【CSS】CSS direction属性简介与实际应用

2020-09-24  本文已影响0人  前端菜篮子

侵删

来自:CSS direction属性简介与实际应用@张鑫旭

一、用的少并不代表没有用

Chrome Safari Firefox Opera IE Android iOS
2.0+ 1.3+ Any 9.2+ 5.5+ Any 3.1+

CSS direction属性简单好记,属性值少,兼容性好,关键时候省心省力,是时候给大家宣传宣传,不要埋没了人家的特殊技能。

二、CSS direction简介

基本上,大家只要关心下面这两个属性值就好了:

direction: ltr;   // 默认值
direction: rtl;
<p class="rtl">
<img src="mm1.jpg"/>
<img src="mm2.jpg"/>
</p>

改变的只是内联元素块的左右顺序

需要注意的是,当direction属性的值是rtl的时候,我们的文字的前后顺序是不变了,例如:

 <p class="rtl">
    <span>span1</span> 
    <span>span2</span>
</p>

结果,还是span1在左边,span2在右边:

三、CSS direction实际应用

CSS direction可以让我们不改变DOM前后顺序的情况下,调换元素的前后顺序,在有些场景下非常有用。

下面是我真实遇到的例子:

image
.button { float: right; }
.container, .button { transform: scaleX(-1); }

CSS direction还有一个近亲writing-mode,可比direction复杂的多,也有意思的多


下面来自:改变CSS世界纵横规则的writing-mode属性@张鑫旭

本文稍微摘了点知识点,具体的请看原文

writing-mode这个CSS属性IE5.5浏览器就已经支持了,但是在很长一段时间里,FireFox, Chrome这些现代浏览器都不支持writing-mode

然而,就在我们被流行前端技术一叶蔽目的时候,各大现代浏览器纷纷对writing-mode实现了更加标准的支持

一、writing-mode的原本作用

float属性有些类似,writing-mode原本设计的是控制内联元素的显示的(即所谓的文本布局-Text Layout)。因为在亚洲,尤其像中国这样的东亚国家,存在文字的排版不是水平式的,而是垂直的,例如中国的古诗古文。

垂直古诗

因此,writing-mode就是用来实现文字可以竖着呈现的。

writing-mode语法

原文很多内容,本文就记个实战版本的喽:

writing-mode: lr-tb | tb-rl | tb-lr (IE8+);
writing-mode: horizontal-tb | vertical-rl | vertical-lr;

一些说明:

有同学可能要疑问了,既然writing-mode实现文本垂直排版场景有限,那还有什么学习的意义呢?
前面也提到了,虽然writing-mode创造的本意是文本布局,但是,其带来的文档流向的改变,不仅改变了我们多年来正常的CSS认知,同时可以巧妙实现很多意想不到的需求和效果。

二、writing-mode不经意改变了哪些规则?

writing-mode将页面默认的水平流改成了垂直流,颠覆了很多我们以往的认知,基于原本水平方向才适用的规则全部都可以在垂直方向适用!(具体内容去原文看吧!

三、writing-mode和*-start属性的流机制

CSS3中出现了诸多*-start/*-end属性(亦称为CSS逻辑属性),例如:margin-start/margin-end, border-start/border-end, padding-start/padding-end, 以及text-align:start/text-align:end声明。

下面问题来了,为什么会蹦出这么多*-start/*-end鬼?

那是因为现代浏览器加强了对流的支持,包括老江湖direction,以及最近年月跟进的writing-mode

在很久以前,我们的认知里,网页布局就一种流向,就是从左往右,从上往下,因此,我们使用margin-left/margin-right没有任何问题。但是,如果我们流是可以变化的,例如,一张图片距离左边缘20像素,我们希望其文档流是从右往左,同时距离右侧是20像素,怎么办?

此时,margin-left:20px在图片direction变化后,就无效了;但是,margin-start就不会有此问题,所谓start, 指的是文档流开始的方向,换句话说,如果页面是默认的文档流,则margin-start等同于margin-left,如果是水平从右往左文档流,则margin-start等同于margin-rightmargin-end也是类似的。

上一篇 下一篇

猜你喜欢

热点阅读