From: http://www.zhangxinxu.com/wordpress/2016/11/css-content-pre-animation-character-loading/
小tip: 使用CSS(Unicode字符)让inline水平元素换行
从语义上来讲,这里使用定义标题最为合适,具体结构和样式呢?下面展示几个技术实现:
- 每个键值对都使用一个
dl
。如下:<dl> <dt>提问:</dt><dd>为什么没有男朋友?</dd> </dl> <dl> <dt>回答:</dt><dd>男朋友是什么、可以吃吗?</dd> </dl>
dt { float: left; } dd { margin-left: 0; }
使用display: run-in;
dt { display: run-in; } dd { margin-left: 0; }
display: run-in;
被修饰的元素根据上下文决定是块元素还内联元素
上面生涩的释义没看懂?正好,直接顾名思意:当前元素跑-进(run-in)
后面的元素。
对于支持的浏览器,例如IE9,就是下面效果:
对于不支持的(如FF)就是下面这副德行:
- 在每个
dd
后面使用<br />
,当然,dt
,dd
要设置成inline
水平的。不过嘛,从合法性上将,block水平后面的<br />
是不合法的~~
助Unicode字符,CSS实现换行
关键CSS代码就是下面:
dd:after { content: '\A'; white-space: pre; }
上面"\A"
就是神奇值所在。包含换行符的CR和LF字符①一般都是unicode字符,其可像其他unicode字符一样随便插。它们分别有000D和000A Unicode编码。这就意味着,如果偶们escape内容合理,其就可以像普通内容一样插插插!
//zxx: 上面这段上标为①处的“CR和LF字符”分别指回车(CR)和换行(LF). 回车CR-将光标移动到 当前行(?) 的开头;换行LF-将光标“垂直”移动到下一行(并不移动到下一行的开头,即不改变光标水平位置)。
上面的代码纯粹CSS2.1的东西,与CSS3没有直系血缘。
代码很短,这里也完整展示下:
dd, dt { display: inline; margin: 0; } dd:after { content: '\A'; white-space: pre; }
<dl> <dt>提问:</dt><dd>为什么没有男朋友?</dd> <dt>回答:</dt><dd>男朋友是什么、可以吃吗?[抠鼻图片][抠鼻图片]</dd> </dl>
因为使用了after伪类,因此上面方法支持的浏览器为IE8+,以及其他靠谱浏览器。经过自己的测试,content内容只能是"\A"
或者需要包括"\A"
,大小写无妨。
原因是:有可能dd
元素不止一个。
其改进后的CSS代码如下:
dt:before { content: '\D\A'; white-space: pre; } dt:first-child:before { content: normal; }
原理显而易见:标题元素前换行,去除第一个标签元素前面的换行符。
关于字符打点动画实现
利用CSS content内容生成技术以及CSS3 animation实现的
CSS代码如下:
dot {
display: inline-block;
height: 1em; line-height: 1;
text-align: left;
vertical-align: -.25em;
overflow: hidden;
}
dot::before {
display: block;
content: '...\A..\A.';
white-space: pre-wrap; /* 也可以是white-space: pre */
animation: dot 3s infinite step-start both;
}
@keyframes dot {
33% { transform: translateY(-2em); }
66% { transform: translateY(-1em); }
}
HTML代码如下:
订单提交中<dot>...</dot>使用自定义
<dot>
元素的好处是IE7,IE8浏览器根本就不认识这个元素,相关CSS会忽略,直接显示3个点;使用::before
伪元素,display
设置为block
原因在于其他现代浏览器可以把原来的3
个点推到看不见的最下面,显示的是content
插入的第1行的3
个点。于是,全浏览器都显示良好。有此可见,创意固然重要,基础和细节也是不可忽视的,这样,才能实现完美的效果——现在这种实现,外面标签的宽度就是
3
个点的宽度,不要担心超出或剪裁,字符实现,和前面的文字字体,颜色保持一致,完美!
content字符生成配合CSS3 animation各类字符loading效果实现
其实,content
字符生成配合CSS3 animation
可以实现的不仅仅是打点这一种字符动画效果,你使用其他一些有意思的字符就能时间更多有意思的loading效果,如下截图(代码来自:https://github.com/tawian/text-spinners):
例如,我们命令行中常见的loading动画实现只要content
设置为下面这个值就可以:
.loading::after {
display: inline-table;
content: "/\A–\A\\\A|";
white-space: pre;
animation: spin4 2s steps(4) infinite;
}