
Handsome 是一款收费的 Typecho 主题,本文给出的 Handsome 主题美化教程收集自网络,部分内容可能随着主题更新而失效。
首页列表最前方广告位
新年倒计时
1 | <style> |
自定义 CSS
以下内容添加到后台主题外观设置
-开发者设置
-自定义 CSS
头像呼吸环和鼠标悬停旋转放大
1 | .img-full { |
打赏图标跳动
1 | .btn-pay { |
自定义鼠标指针
可以使用下面代码,或者直接下载插件 HoerMouse 使用
1 | body { |
自定义右侧滚动条
1 | /*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/ |
首页文章列表悬浮
1 | .blog-post .panel:not(article) { |
首页文章列表宽度
盒子模型下我感觉页面有点小,但非盒子模型下首页文章列表感觉太宽了,特别在首页设置了大头图情况下,图片看起来就更不美观了,所以可以用以下代码改窄一点。
1 | .blog-post{ |
首页文章版式阴影化
1 | .panel{ |
首页文章标题颜色渐变
1 | .index-post-title a:hover{ |
文章标题居中
1 | .panel h2{ |
文章图片悬停放大
1 | .entry-thumbnail { |
文章末尾转载说明
可使用插件 Copyright
自定义 JavaScript
以下内容添加到后台主题外观设置
-开发者设置
-自定义 JavaScript
鼠标点击爱心
1 | ! function (e, t, a) { |
彩色数字
可用于将左侧各分类下文章数目变成彩色数字,右侧博客信息变成彩色,标签变成彩色。
如果启用 pjax,添加自定义 JavaScript 的同时还要将代码放入 pjax 函数中,否则无效。
1 | let tags = document.querySelectorAll("#tag_cloud-2 a"); |
网页标签获得/失去焦点时更改标题内容
1 | //网页标签获得/失去焦点时更改标题内容 |
多处组合改动
复制弹窗提醒
第一步:将 layer.js 保存至自己的服务器上。
第二步:将以下代码添加到后台主题外观设置
-开发者设置
-自定义输出 head 头部的 HTML 代码
,注意修改引用路径。
1 | <script src="https://xxxx/layer.js"></script> |
第三步:将以下代码添加到后台主题外观设置
-开发者设置
-自定义 JavaScript
1 | document.body.oncopy = function() {layer.msg('复制成功,若要转载请务必保留本文链接!');}; |
彩色 3D 云标签
彩色标签
以下内容添加到后台主题外观设置
-开发者设置
-自定义 CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14#tag_cloud-2>div>a {
color: #fff;
text-align: center;
text-overflow: ellipsis;
white-space: nowrap;
padding: 3px 5px;
border: 0;
border-radius: 3px;
display: inline-block;
line-height: 18px;
}
#tag_cloud-2>div>a:hover {
background: #d02f53;
}以下内容添加到后台
主题外观设置
-开发者设置
-自定义 JavaScript
1
2
3
4
5
6
7
8
9
10
11function colorfultags(){
let tags = document.querySelectorAll("#tag_cloud-2 a");
let colorArr = ["#f60", "#45B6F7", "#15a287", "#5cb85c", "#d9534f", "#567e95", "#00a67c", "#b37333"];
let count = 1;
tags.forEach(tag => {
tagsColor = colorArr[count%8];
tag.style.backgroundColor = tagsColor;
count++;
});
}
window.onload=colorfultags();3D 标签
以下内容添加到后台主题外观设置
-开发者设置
-自定义 CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14#tag_cloud-2>div {
position: relative;
width: 200px;
height: 240px;
border: 2px black;
margin: 0 0px 0px 0
}
#tag_cloud-2>div>a {
position: absolute;
}
#tag_cloud-2>div>a:hover {
display: block
}以下内容添加到后台
主题外观设置
-开发者设置
-自定义 JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169//3d标签,和css搭配使用
function around3D() {
var oDiv = document.getElementById('tag_cloud-2').getElementsByTagName('div')[0];
if (null == oDiv) {
return
} else {
var radius = 80;
var d = 200;
var dtr = Math.PI / 180;
var mcList = [];
var lasta = 1;
var lastb = 1;
var distr = true;
var tspeed = 11;
var size = 200;
var mouseX = 0;
var mouseY = 10;
var howElliptical = 1;
var aA = null;
var i = 0;
var oTag = null;
aA = oDiv.getElementsByTagName('a');
for (i = 0; i < aA.length; i++) {
oTag = {};
aA[i].onmouseover = (function(obj) {
return function() {
obj.on = true;
this.style.zIndex = 9999;
this.style.color = '#fff';
this.style.background = '#0099ff';
this.style.padding = '5px 5px';
this.style.filter = "alpha(opacity=100)";
this.style.opacity = 1;
}
})(oTag)
aA[i].onmouseout = (function(obj) {
return function() {
obj.on = false;
this.style.zIndex = obj.zIndex;
this.style.color = '#fff';
this.style.background = '#30899B';
this.style.padding = '5px';
this.style.filter = "alpha(opacity=" + 100 * obj.alpha + ")";
this.style.opacity = obj.alpha;
this.style.zIndex = obj.zIndex;
}
})(oTag)
oTag.offsetWidth = aA[i].offsetWidth;
oTag.offsetHeight = aA[i].offsetHeight;
mcList.push(oTag);
}
sineCosine(0, 0, 0);
positionAll();
(function() {
update();
setTimeout(arguments.callee, 40);
})();
function update() {
var a, b, c = 0;
a = (Math.min(Math.max(-mouseY, -size), size) / radius) * tspeed;
b = (-Math.min(Math.max(-mouseX, -size), size) / radius) * tspeed;
lasta = a;
lastb = b;
if (Math.abs(a) <= 0.01 && Math.abs(b) <= 0.01) {
return;
}
sineCosine(a, b, c);
for (var i = 0; i < mcList.length; i++) {
if (mcList[i].on) {
continue;
}
var rx1 = mcList[i].cx;
var ry1 = mcList[i].cy * ca + mcList[i].cz * (-sa);
var rz1 = mcList[i].cy * sa + mcList[i].cz * ca;
var rx2 = rx1 * cb + rz1 * sb;
var ry2 = ry1;
var rz2 = rx1 * (-sb) + rz1 * cb;
var rx3 = rx2 * cc + ry2 * (-sc);
var ry3 = rx2 * sc + ry2 * cc;
var rz3 = rz2;
mcList[i].cx = rx3;
mcList[i].cy = ry3;
mcList[i].cz = rz3;
per = d / (d + rz3);
mcList[i].x = (howElliptical * rx3 * per) - (howElliptical * 2);
mcList[i].y = ry3 * per;
mcList[i].scale = per;
var alpha = per;
alpha = (alpha - 0.6) * (10 / 6);
mcList[i].alpha = alpha * alpha * alpha - 0.2;
mcList[i].zIndex = Math.ceil(100 - Math.floor(mcList[i].cz));
}
doPosition();
}
function depthSort() {
var i = 0;
var aTmp = [];
for (i = 0; i < aA.length; i++) {
aTmp.push(aA[i]);
}
aTmp.sort(
function(vItem1, vItem2) {
if (vItem1.cz > vItem2.cz) {
return -1;
} else if (vItem1.cz < vItem2.cz) {
return 1;
} else {
return 0;
}
}
);
for (i = 0; i < aTmp.length; i++) {
aTmp[i].style.zIndex = i;
}
}
function positionAll() {
var phi = 0;
var theta = 0;
var max = mcList.length;
for (var i = 0; i < max; i++) {
if (distr) {
phi = Math.acos(-1 + (2 * (i + 1) - 1) / max);
theta = Math.sqrt(max * Math.PI) * phi;
} else {
phi = Math.random() * (Math.PI);
theta = Math.random() * (2* Math.PI);
}
mcList[i].cx = radius * Math.cos(theta) * Math.sin(phi);
mcList[i].cy = radius * Math.sin(theta) * Math.sin(phi);
mcList[i].cz = radius * Math.cos(phi);
aA[i].style.left = mcList[i].cx + oDiv.offsetWidth / 2 - mcList[i].offsetWidth / 2 + 'px';
aA[i].style.top = mcList[i].cy + oDiv.offsetHeight / 2 - mcList[i].offsetHeight / 2 + 'px';
}
}
function doPosition() {
var l = oDiv.offsetWidth / 2;
var t = oDiv.offsetHeight / 2;
for (var i = 0; i < mcList.length; i++) {
if (mcList[i].on) {
continue;
}
var aAs = aA[i].style;
if (mcList[i].alpha > 0.1) {
if (aAs.display != '')
aAs.display = '';
} else {
if (aAs.display != 'none')
aAs.display = 'none';
continue;
}
aAs.left = mcList[i].cx + l - mcList[i].offsetWidth / 2 + 'px';
aAs.top = mcList[i].cy + t - mcList[i].offsetHeight / 2 + 'px';
aAs.filter = "alpha(opacity=" + 100 * mcList[i].alpha + ")";
aAs.zIndex = mcList[i].zIndex;
aAs.opacity = mcList[i].alpha;
}
}
function sineCosine(a, b, c) {
sa = Math.sin(a * dtr);
ca = Math.cos(a * dtr);
sb = Math.sin(b * dtr);
cb = Math.cos(b * dtr);
sc = Math.sin(c * dtr);
cc = Math.cos(c * dtr);
}
}
}
window.onload = around3D();如果启用了 pjax ,要实现 3D 彩色标签,则保持上面两个自定义 CSS 不变,将上面两个自定义 JavaScript 删掉,替换成下面这个自定义 JavaScript,然后后台 pjax 回调函数加上
colorfultags();around3D();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176function colorfultags(){
let tags = document.querySelectorAll("#tag_cloud-2 a");
let colorArr = ["#f60", "#45B6F7", "#15a287", "#5cb85c", "#d9534f", "#567e95", "#00a67c", "#b37333"];
let count = 1;
tags.forEach(tag => {
tagsColor = colorArr[count%8];
tag.style.backgroundColor = tagsColor;
count++;
});
}
function around3D() {
var oDiv = document.getElementById('tag_cloud-2').getElementsByTagName('div')[0];
if (null == oDiv) {
return;
} else {
var radius = 80;
var d = 200;
var dtr = Math.PI / 180;
var mcList = [];
var lasta = 1;
var lastb = 1;
var distr = true;
var tspeed = 11;
var size = 200;
var mouseX = 0;
var mouseY = 10;
var howElliptical = 1;
var aA = null;
var i = 0;
var oTag = null;
aA = oDiv.getElementsByTagName('a');
for (i = 0; i < aA.length; i++) {
oTag = {};
aA[i].onmouseover = (function(obj) {
return function() {
obj.on = true;
this.style.zIndex = 9999;
this.style.color = '#fff';
this.style.background = '#0099ff';
this.style.padding = '5px 5px';
this.style.filter = "alpha(opacity=100)";
this.style.opacity = 1;
}
})(oTag)
aA[i].onmouseout = (function(obj) {
return function() {
obj.on = false;
this.style.zIndex = obj.zIndex;
this.style.color = '#fff';
this.style.background = '#30899B';
this.style.padding = '5px';
this.style.filter = "alpha(opacity=" + 100 * obj.alpha + ")";
this.style.opacity = obj.alpha;
this.style.zIndex = obj.zIndex;
}
})(oTag)
oTag.offsetWidth = aA[i].offsetWidth;
oTag.offsetHeight = aA[i].offsetHeight;
mcList.push(oTag);
}
sineCosine(0, 0, 0);
positionAll();
(function() {
update();
setTimeout(arguments.callee, 40);
})();
function update() {
var a, b, c = 0;
a = (Math.min(Math.max(-mouseY, -size), size) / radius) * tspeed;
b = (-Math.min(Math.max(-mouseX, -size), size) / radius) * tspeed;
lasta = a;
lastb = b;
if (Math.abs(a) <= 0.01 && Math.abs(b) <= 0.01) {
return;
}
sineCosine(a, b, c);
for (var i = 0; i < mcList.length; i++) {
if (mcList[i].on) {
continue;
}
var rx1 = mcList[i].cx;
var ry1 = mcList[i].cy * ca + mcList[i].cz * (-sa);
var rz1 = mcList[i].cy * sa + mcList[i].cz * ca;
var rx2 = rx1 * cb + rz1 * sb;
var ry2 = ry1;
var rz2 = rx1 * (-sb) + rz1 * cb;
var rx3 = rx2 * cc + ry2 * (-sc);
var ry3 = rx2 * sc + ry2 * cc;
var rz3 = rz2;
mcList[i].cx = rx3;
mcList[i].cy = ry3;
mcList[i].cz = rz3;
per = d / (d + rz3);
mcList[i].x = (howElliptical * rx3 * per) - (howElliptical * 2);
mcList[i].y = ry3 * per;
mcList[i].scale = per;
var alpha = per;
alpha = (alpha - 0.6) * (10 / 6);
mcList[i].alpha = alpha * alpha * alpha - 0.2;
mcList[i].zIndex = Math.ceil(100 - Math.floor(mcList[i].cz));
}
doPosition();
}
function depthSort() {
var i = 0;
var aTmp = [];
for (i = 0; i < aA.length; i++) {
aTmp.push(aA[i]);
}
aTmp.sort(
function(vItem1, vItem2) {
if (vItem1.cz > vItem2.cz) {
return -1;
} else if (vItem1.cz < vItem2.cz) {
return 1;
} else {
return 0;
}
}
);
for (i = 0; i < aTmp.length; i++) {
aTmp[i].style.zIndex = i;
}
}
function positionAll() {
var phi = 0;
var theta = 0;
var max = mcList.length;
for (var i = 0; i < max; i++) {
if (distr) {
phi = Math.acos(-1 + (2 * (i + 1) - 1) / max);
theta = Math.sqrt(max * Math.PI) * phi;
} else {
phi = Math.random() * (Math.PI);
theta = Math.random() * (2 * Math.PI);
}
mcList[i].cx = radius * Math.cos(theta) * Math.sin(phi);
mcList[i].cy = radius * Math.sin(theta) * Math.sin(phi);
mcList[i].cz = radius * Math.cos(phi);
aA[i].style.left = mcList[i].cx + oDiv.offsetWidth / 2 - mcList[i].offsetWidth / 2 + 'px';
aA[i].style.top = mcList[i].cy + oDiv.offsetHeight / 2 - mcList[i].offsetHeight / 2 + 'px';
}
}
function doPosition() {
var l = oDiv.offsetWidth / 2;
var t = oDiv.offsetHeight / 2;
for (var i = 0; i < mcList.length; i++) {
if (mcList[i].on) {
continue;
}
var aAs = aA[i].style;
if (mcList[i].alpha > 0.1) {
if (aAs.display != '')
aAs.display = '';
} else {
if (aAs.display != 'none')
aAs.display = 'none';
continue;
}
aAs.left = mcList[i].cx + l - mcList[i].offsetWidth / 2 + 'px';
aAs.top = mcList[i].cy + t - mcList[i].offsetHeight / 2 + 'px';
aAs.filter = "alpha(opacity=" + 100 * mcList[i].alpha + ")";
aAs.zIndex = mcList[i].zIndex;
aAs.opacity = mcList[i].alpha;
}
}
function sineCosine(a, b, c) {
sa = Math.sin(a * dtr);
ca = Math.cos(a * dtr);
sb = Math.sin(b * dtr);
cb = Math.cos(b * dtr);
sc = Math.sin(c * dtr);
cc = Math.cos(c * dtr);
}
}
}
文件改动
左侧导航全站友链显示头像
在 aside.php
文件中大约 213 行左右 “使用links插件,输出全站友链” 位置下方修改代码,在 php 代码中的 a 标签内加上:
1 | <img style=\"width:18px;height:18px;border-radius:50%;margin-right:3px;\" src=\"{image}\" /> |
左、右下角彩色版权声明
找到主题文件夹下 handsomecomponentfooter.php
文件,找到下方这段代码(在文件中可按 Ctrl+F 进行查找):
1 | Powered by <a target="_blank" href="http://www.typecho.org">Typecho</a> |
修改为:
1 | <div class="wrapper bg-light"> |
然后在后台主题外观设置
-开发者设置
-自定义 CSS
中添加:
1 | /*最底部版权声明样式*/ |
网站顶部彩虹条
第一步:将以下代码添加到后台主题外观设置
-开发者设置
-自定义 CSS
1 | .gundongtiao{ |
第二步:在网站文件 footer.php
(文件路径为 handsome/component/footer.php
)末尾添加:
1 | <div class="gundongtiao"></div> |
添加访客 3D 地球
找到 handsome/component/sidebar.php
下方代码位置:
1 | <li class="list-group-item text-second"><span class="blog-info-icons"> <i data-feather="activity"></i></span> |
插入以下代码:(可以修改其中的 height
来调整大小)
1 | <!--自定义访客地球--> |
然后去 RevolverMaps 找自己喜欢的地球样式,并且把它给的 JavaScript 代码复制下来,然后将复制的代码进行转义,即将 /
改为 \/
,将 "
改为 \"
,将转义后的代码和下方代码合并在一起,放到后台主题外观设置
-开发者设置
-自定义 JavaScript
。
1 | $(document).ready(function(){ |
如果你不会转义,也可以直接使用我转义好的:
1 | <script type=\"text/javascript\" src=\"//rf.revolvermaps.com/0/0/8.js?i=51frwlq4tnv&m=0&c=ff0000&cr1=ffffff&f=arial&l=33&bv=65\" async=\"async\"><\/script> |
评论框打字特效
详见 网页输入框打字特效