人往高处走,水往低处流,CSS世界亦是如此吗?至今为止,咱们讨论的CSS彷佛一直遵循不知从何时就印在脑子里的“从左往右,从上往下”原则。这可能和咱们平常的读写顺序相关,咱们看文章的时候习惯从左往右,从上往下进行阅读。然而CSS世界的流向并非固定的,只须要几条声明,就能够改变CSS世界的水平垂直流向。css
direction属性的兼容性很是好却鲜有人用(又包括我了),不少人甚至都没有听过这个属性,要说这个属性的做用,可了不起,他能改变水平流的方向。做者对这个属性对于纯文本影响介绍的很少,只提到某些国家的语言是从右往左书写的,所以这个属性开发的本意是为了兼顾这些语言。那么具体是怎么兼顾的呢?会给中文带来什么影响吗?作个测试就知道了,测试以下: html
<p>文字会倒过来嘛 我打了个空格
我打了个回车 ?我打了个问号</p>
<style> p{ direction: rtl; } </style>
复制代码
因为markdown编辑器支持标签语言,所以咱们能够直接预览最终效果以下(小提示:你能够经过浏览器直接检查下面的元素看到CSS样式) 前端
文字会倒过来嘛 我打了个空格 我打了个回车 ?我打了个问号浏览器
根据测试的结果,咱们能够总结出以下结论: markdown
(1)元素水平流方向改变,所以text-align:start变成右对齐了,对于不支持text-align:start的浏览器,则会默认修改text-align:right。 编辑器
(2)连续的文字/单词依旧保持连续性,只有在遇到部分"标点"(测试发现,逗号不算,问号能够,其余的没测,你们能够本身测一测)、“回车”、“空格”等特殊字符的时候才会分割。 ide
(3)连续的文字/单词自己并不会倒着写,也就是‘你好’不会变成‘好你’,实现这个效果须要借助还有一个属性的帮忙。 布局
以上是我的对direction对纯文本的影响的一些测试,不能保证彻底的准确性,只能根据结果推算原理。下面咱们来看看direction在内联类元素布局中的一些使用。 测试
第一个例子是要实如今桌面端的时候,肯定按钮在左边,而到移动端的时候,肯定按钮在右边。因为是水平流方向上的位置互换,咱们就能够借助direction:rtl;来替换两个inline-block元素的顺序了。 flex
第二个例子实现开头打点的效果,这个例子我的以为没什么软用,详情请参考上面三个结论的第二条,遇到相似问号的标点符号,内容就会出现调换顺序的状况,和原来的阅读顺序不一样,不知做者本身有没有测试过这个例子。原文测试用例以下:
<p>做者在这里只用了逗号,所以文字全都是连续的,咱们就按他的来,给他点面子</p>
<p style="direction: rtl">做者在这里只用了逗号,所以文字全都是连续的,咱们就按他的来,给他点面子</p>
<style> p{ width: 200px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } </style>
复制代码
因为markdown编辑器支持标签语言,所以咱们能够直接预览最终效果以下(小提示:你能够经过浏览器直接检查下面的元素看到CSS样式)
注意这个只是按照做者的测试用例给的结果,若是你的文章里有一些诸如空格,问号之类的标点符号,这个效果瞬间崩了。所以不推荐使用这个效果。
好了,又来一个听都没听过的属性,看见Unicode就以为跟系统属性可能有关系,然而这个CSS属性是用来控制字符是否反向显示的,还记不记得我在讲direction的时候提到,纯文本的内容并不能彻底反向,direction只对内联元素起做用,而不是对每一个字符起做用,所以这时候咱们就能够借助unicode-bidi来实现文字反向输出的结果。
unicode-bidi有三个经常使用的属性,这里作一个小的总结:
(1)normal。相似于auto,是unicode-bidi的默认属性,表示正常排列,在设置了direction:rtl的状况下,图片、按钮以及问号、加号等字符会从右往左显示,可是中文英文字符仍是会从左往右显示,这里解释了上文中问号在左边的缘由。
(2)embed。embed也表示正常排列,这也就是我为何强调normal相似于auto的缘由了,normal的计算值是受父元素的排列方式的影响的,而embed不会,embed永远表示正向排列,而normal不必定。
(3)bidi-override。表示重写双向排列,配合direction:rtl,则全部字符均会从右往左方向排列,效果强烈。
下面咱们经过一个例子来验证一下normal和embed的区别,以及bidi-override的反向排列效果。
!-- 验证normal和embed的区别 -->
<p style="direction: rtl;unicode-bidi: bidi-override;">
随便写点开头,<span style="unicode-bidi: normal;">验证normal和embed的区别</span>,随便写点结尾
</p>
<p style="direction: rtl;unicode-bidi: bidi-override;">
随便写点开头,<span style="unicode-bidi: embed;">验证normal和embed的区别</span>,随便写点结尾
</p>
复制代码
因为markdown编辑器支持标签语言,所以咱们能够直接预览最终效果以下(小提示:你能够经过浏览器直接检查下面的元素看到CSS样式)
随便写点开头,验证normal和embed的区别,随便写点结尾
随便写点开头,验证normal和embed的区别,随便写点结尾
writing-mode能将页面默认的水平流改为垂直流,在设计之初是为了实现某些文字排版实现垂直显示的效果,如中国的古诗,就须要以从上到下,从右往左的顺序阅读。
writing-mode有三个关键字(不考虑兼容性)。分别是,horizontal-tb(默认值,表示文本流是水平方向),vertical-rl(文本流是垂直方向,阅读顺序是从右往左),vertical-lr(文本流是垂直方向,阅读顺序是从左往右)
因为writing-mode被设计出来以后,改变了CSS世界的默认规则,使得不少水平方向上的规则忽然在垂直方向上有了用武之地,如text-align:center。本来是用来实现内联元素水平居中的,当修改了writing-mode的默认值后,即可以让内联元素在垂直方向上居中了。本来margin垂直方向上的叠压,如今在水平方向上也能产生合并。使用margin:auto能够实现垂直方向上的居中,这样的例子多的数不胜数,若是你对CSS世界足够了解的话,本来用在水平方向上的规则如今均可以放到垂直方向上。
本系列的内容就到此为止了(心里想法是,终于把这个坑填满了,后面填的可能有些粗糙,权当是取其精华去其糟粕了)~对前端感兴趣的小伙伴点个关注吧~
不忘初心,方得始终
喜欢博主的童鞋能够扫描二维码加博主好友~ 也能够扫中间二维码入驻博主的粉丝群(708637831)~固然你也能够扫描二维码打赏并直接包养帅气的博主一枚。