咏柳
碧玉妆成一树高,
万条垂下绿丝绦。
不知细叶谁裁出,
二月春风似剪刀。
class="verticle-mode">
咏柳
碧玉妆成一树高,
万条垂下绿丝绦。
不知细叶谁裁出,
二月春风似剪刀。
.verticle-mode {
writing-mode: tb-rl;
-webkit-writing-mode: vertical-rl;
writing-mode: vertical-rl;
}
/* IE7比较弱,需要做点额外的动作 */
.verticle-mode {
*width: 120px;
}
.verticle-mode h4,
.verticle-mode p {
*display: inline;
*writing-mode: tb-rl;
}
.verticle-mode h4 {
*float:right;
}
最终效果

更多细节与讨论请移步张鑫旭老师的这篇文章:改变CSS世界纵横规则的writing-mode属性
5、实现鼠标悬浮内容自动撑开的过渡动画
需求
需要为一个列表添加个动画,容器的高度是不确定的,也就是高度为 auto
,悬浮时候撑开内容有个过渡动画
如下图所示:

而用 CSS3
实现的话,由于高度的不确定,而 transtion
是需要具体的树枝,所以设置 height:auto
是无法实现效果的,可以通过 max-height
这个属性间接的实现这么个效果, css
样式是这样的:
代码
class="hd"> 列表1
class="bd">列表内容
内容列表内容
内容列表内容
内容
class="hd"> 列表1
class="bd">列表内容
内容列表内容
内容列表内容
内容
class="hd"> 列表1
class="bd">列表内容
内容列表内容
内容列表内容
内容
.bd {
max-height:0;
overflow:hidden;
transition: all 1s ease-out;
}
li:hover .bd {
max-height: 600px;
transition-timing-function: ease-in;
}
最终效果
跟前面 GIF
差不多,这里就不录 GIF
了,有兴趣的可以自己尝试感受一下

6、利用 pointer-events
禁用 a
标签事件效果
需求:
在做 tab
切换的时候,当选中当前项,禁用当前标签的事件,只有切换其他 tab
的时候,才重新请求新的数据。
pointer-events
是一个用于 HTML
指针事件的属性。
pointer-events
可以禁用 HTML
元素的 hover/focus/active
等动态效果。
默认值为 auto
,语法: pointer-events:auto|none|visiblepainted|visiblefill|visiblestroke|visible|painted|fill|stroke|all;
代码
.active{
pointer-events: none;
}
最终效果

好像没什么效果😂
7、CSS 如何实现文字两端对齐
需求
红框所在的文字有四个字的、三个字的、两个字的,如果不两端对齐可以选择居中对齐,或者右对齐。但是如果要想文字两端对齐呢?
代码
姓名
手机号码
验证码
账号
密码
div{
margin:10px 0;
width:100px;
border:1px solid red;
text-align-last: justify;
}
最终效果

8、使用 :not()
去除导航上不需要的属性
需求
有时候导航栏需要之间需要用逗号,进行隔离,但是最后一个不需要
代码
a
b
c
d
e
li{
list-style:none;
margin-bottom:10px;
display:inline-block;
}
ul > li:
not(:last-child)::after {
content: ",";
}
当然,你可以使用 .nav li+li
(不包括第一个li) 或者 .nav li:first-child~li
(不包括最后一个li), 但是使用 :not()
的意图特别清晰, CSS
选择器按照人类描述它的方式定义边框。
最后效果

或者,你已经学习了一些关于 使用 :not(),你还可以尝试:
/* 选择1到3的元素并显示 */
li:not(:nth-child(-n+3)){
display: none;
}
9、移动web页面支持弹性滚动
需求
在IOS机型中,非body元素的滚动条会非常不流畅,又不想用JS模拟滚动条。
传统 pc
端中,子容器高度超出父容器高度,通常使用 overflow:auto
可出现滚动条拖动显示溢出的内容,而移动 web
开发中,由于浏览器厂商的系统不同、版本不同,导致有部分机型尤其是 IOS
机型不支持弹性滚动,从而在开发中制造了所谓的 BUG
。
代码
body{
-webkit-overflow-scrolling: touch; /* ios5+ */
}
ele{
overflow:auto;
}
-webkit-overflow-scrolling
属性具有继承效果,所以在 body
上设置即可,这样局部滚动条就非常的流畅了。
最终效果
所有滚动条都相当的流畅了
10、美化浏览器自带的 radio
, checkbox
属性
需求
设计师:你那个单选框按钮好丑啊,跟我的设计稿差好远。程序员:我有什么办法,浏览器就是这样的。。。
记得刚开始写页面时候,被浏览器各种默认的 UI
样式恶心到了,当初确实也没啥办法,反正也不影响功能,就那样吧。
先讲一下原理:checkbox hack技术
我们使用 CSS
一些特殊的选择器,然后配合单选框以及复选框自带的一些特性,可以实现元素的显示隐藏效果。然后通过一些简单的扩展,我们可以不使用任何 JavaScript
代码实现类似:自定义的单复选框,“更多”展开与收起效果,选项卡切换效果,或是多级下拉列表效果等等。
相信很多前端开发人员都会遇到 boss
让修改 checkbox
和 radio
样式,毕竟自带的样式太丑了。后来我们发现修改自带样式并不是那么容易,最后直接使出杀手锏——点击之后替换图片。
今天教大家一种方法,不用替换图片,随意修改样式。
先讲一下原理:两个关键东东,一是伪类选择器 :checked
,表示对应控件元素(单选框或是复选框)选中时的样式;二就是加号 +
相邻兄弟选择器,这个符号表示选择后面的兄弟节点。于是,两者配合,就可以轻松自如控制后面元素的显示或者隐藏,或是其他样式了。
而如何让单复选框选中和不选中了,那就是 label
标签了哈, for
属性锚定对应的单选框或是复选框,然后点击这里的 label
标签元素的时候,对应的单复选框就会选中或是取消选中。然后,就有上面的效果啦!
代码
这里只给一个 radio
单选框的代码,仅供参考:
class="radio-beauty-container">
class="radio-name">前端工程师
type="radio" name="radioName" id="radioName1" hidden/>
class="radio-name">后端工程师
type="radio" name="radioName" id="radioName2" hidden/>
class="radio-name">全栈工程师
type="radio" name="radioName" id="radioName3"
hidden/>
.radio-beauty-container {
font-size: 0;
$bgc: green;
%common {
padding: 2px;
background-color: $bgc;
background-clip: content-box;
}
.radio-name {
vertical-align: middle;
font-size: 16px;
}