css 用direction来改变元素水平方向,价值研究。

"direction"有两个值:ltr | rtl

ltr:从左往右
rtl:从右往左

默认:ltr

一起看个效果就懂了。
857662-20160924202409324-507078780.png

<style>
  div{
    direction:rtl;
  }
</style>
<div>这是什么啊</div>

本想它是否可以达到float的效果,结果发现很多坑。

如下,我本想让第二个p标签跑右边去,结果不起作用。
857662-20160924211214559-810734620.png
其实也不是不起作用,因为它只是对里面的内容起作用。如果想让文字跑右边去,还得设置这个元素的宽度,因为inline-block默认宽度是靠内容得来的。
857662-20160924211535434-217337330.png

<style>
  body,p{
    margin:0;
    padding:0;
  }
  #box{
    width:200px;
    border:1px solid #ccc;
  }
  #box>p{
    display:inline-block;
  }
  #box>p:last-of-type{
    width:50px;
    background-color:red;
    direction:rtl;
  }
</style>
<div id="box">
  <p>左</p>
  <p>右</p>
</div>

但我们还不能设置这个元素为100%,不然就掉下去了,除非知道左边那个元素的宽度然后通过calc函数减去这个值,不过其实还是不行的,因为inline-block也有个坑,它默认就会有几px的间距。所有说,在模拟float效果这方面direction表示力不从心。那么direction究竟能干嘛?

如果想真的了解direction能干嘛,那么看一下,下面这些direction的奇怪表现,也许就是这些奇怪的表现让direction有了活力。

一些奇怪的特征...

857662-20160924204303887-383346276.png
LI的小点跑右边去了

<style>
  ul>li{
    width:100px;
    direction:rtl;
  }
</style>
<ul>
  <li>1111</li>
  <li>2222</li>
  <li>3333</li>
</ul>

还有这个
857662-20160924204500059-746528105.png

<style>
  div{
    direction:rtl;
  }
</style>
<div id="box">这是什么啊?</div>

这个
857662-20160924212653418-848157385.png

<style>
  body,p{
    margin:0;
    padding:0;
  }
  #box{
    width:200px;
    border:1px solid #ccc;
    direction:rtl;
  }
  #box>p{
    display:inline-block;
  }
</style>
<div id="box">
  <p>左</p>
  <p>右</p>
</div>

价值可能就是文字颠倒效果了。

另外它还可以配合unicode-bidi使用。

里面有一个unicode-bidi:bidi-override属性,我们可以手动让文字颠倒。
857662-20160924214238340-66270232.png

<style>
  body,p{
    margin:0;
    padding:0;
  }
  #box{
    direction:rtl;
    unicode-bidi:embed;
  }
</style>
<div id="box">CSS</div>

除了bidi-override它还有其他的几个属性,如下:

normal:对象不打开附加的嵌入层,对于内联元素,隐式重排序跨对象边界进行工作。
embed:对象打开附加的嵌入层,<' direction '> 属性的值指定嵌入层,在对象内部进行隐式重排序。
bidi-override:严格按照 <' direction '> 属性的值重排序。忽略隐式双向运算规则。

我猜之所以会出现上面的奇怪现象就是因为它默认值是normal,对于内联元素,隐式重排序跨对象边界进行工作。这句话很关键,估计是不同当文字碰到不同格式的字就会创建一个内联元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值