博客改装第二弹,Widget折叠效果
涉及文件
1 | themes/landscape-plus/source |
涉及元素结构
1 | <div class="widget-wrap"> |
简要思路
其实方法说来挺简单,就是点击title
的时候切换wrap
的widget-hidden
类,让widget
隐藏,同时更改wrap
的外边距
大体步骤
- 注册Widget标题的点击回调
- 添加样式表
其实主要部分都是在玩CSS…
第一步: 注册Widget标题的点击回调
(说来才发现jQuery是真的好用)
为了达到折叠效果,首先我们需要选择合适的元素作为折叠/展开的按钮
在script.js
中添加如下代码:
1 | // Widget click-expand |
相关语法
$(selector).on(event,childSelector,data,function)
参数 |描述
:— |:—
event |必需。规定要从被选元素移除的一个或多个事件或命名空间。由空格分隔多个事件值,也可以是数组。必须是有效的事件。
childSelector |可选。规定只能添加到指定的子元素上的事件处理程序(且不是选择器本身,比如已废弃的 delegate() 方法)。
data |可选。规定传递到函数的额外数据。
function |可选。规定当事件发生时运行的函数。
第二步: 添加样式表
给相关元素添加过渡效果
既然是折叠/展开而不是隐藏/显示,那么就一定会有
精美的动画故向三个元素添加样式
1
transition-duration: 0.4s
隐藏widget:
接下来就是隐藏啦
为了使内容隐藏完全的同时不使文字的动画过于僵硬,我们需要将上下内边距设置为0,同时
保留左右内边距1
2
3
4.widget-hidden > .widget
height: 0
padding: 0 15px 0 15px
overflow: hidden大致效果:
调整
wrap
边距此时我们发现,折叠后的Widget与下方的间距有点大,于是需要调整
下边距和相邻Widget的上边距1
2
3
4
5.widget-hidden
margin-bottom: 8px
.widget-hidden + .widget-wrap
margin-top: 8px此时效果如图:
添加折叠按钮
写到这里,感觉好像还没内味儿
啊对了,还没有添加折叠按钮
由于
我懒得找图片用border
+transform
可以快速做出效果较好的折叠按钮,
我就采用了这种办法添加
.widget-wrap
和.widget-hidden
的::before
样式如下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16.widget-wrap
&:before
content: ""
width: 6px
height: 6px
border: solid #999
border-width: 0 2px 2px 0
transform: translate(-50%, -50%) rotate(45deg)
float: left
margin: 3px
transition-duration: 0.4s
pointer-events: none
.widget-hidden
&:before
transform: rotate(-45deg)大功告成!
最终效果?在文章开头啊…