css实现元素竖向排列 --- writing-mode

html-css06

css实现元素竖向排列 --- writing-mode,第1张

在许多使用场景下,会有让列表内元素竖着排列,高度不够,纵向换行的需求。本文教你如何实现一个竖着的元素排列。

实现元素纵向排列主要靠 css 的 writing-mode 属性和 float 属性。

设置 writing-mode 值为 vertical-lr , 可以使所有子元素纵向排列。

此时发现里面的子元素仍旧是横向排列,但文字变纵向了

再加上 float: left 让元素左排。

此时,元素已经变成纵向排列了,但由于未限制高度,元素将无限向下排列。同时子元素的文字排列方式也变成了纵向。

在给列表加一个高度。并重新设置子元素 writing-mode 属性便可解决

此时效果已经完成,但还有一个奇怪的问题

在添加到某个位置元素直接会跳到这列最后一个,不知这个问题为何会产生,但是在给子元素添加一个宽度后,bug 便神奇的好了。。

总结: writing-mode 是一个很长久的 css 属性了,新的值 vertical-lr 在大部分现代浏览器都已支持,在古老的 ie9 以下,也可用 lr 代替,所以这种实现方式是可兼容的。只是注意某些浏览器需要 --webkit- 或 --ms- 前缀。

writing-mode 属性 --MDN

一、原始使用writing-mode属性-

语法:writing-mode:lr-tb或writing-mode:tb-rl

参数:

1、lr-tb:从左向右,从上往下

2、tb-rl:从上往下,从右向左

运行代码发现,IE显示正常,火狐、谷歌浏览器却不支持,所以不建议使用writing-mode属性。

二、使用CSS模拟文字竖排

对文字对象宽度设置只能排下一个文字的宽度距离,让文字一行排不下两个文字使其文字自动换行,就形成了竖立排版需求。 

<!DOCTYPE html>

 <html> 

 <head>

  <meta http-equiv="Content-Type" content="text/html charset=gb2312" /> 

  <style> 

   body{text-align:center} 

   .shuli{ margin:0 autowidth:20pxline-height:24pxborder:1px solid #333} 

    </style>

  </head> 

  <body> 

  <div class="shuli">我是竖列排版</div> 

  </body> 

 </html>

说明:对文字DIV设置较小的宽度,以达到一排只能排下一个文字,这样文字就自动换行,实现垂直竖列排版。

三、使用br换行让其文字垂直竖排显示 

利用html br换行标签实现文字换行,对每个文字后加上换行br标签让其竖列排版。

    <!DOCTYPE html> 

    <html> 

    <head> 

    <meta http-equiv="Content-Type" content="text/html charset=gb2312" /> 

    <style> 

    body{text-align:center line-height:22px} 

    /* CSS注释说明:设置css文字居中,css行高为22px间隔 */ 

    </style> 

    </head> 

    <body> 

    我<br>是<br>竖<br>列<br>排<br>版 

    </body> 

    </html>

1、选中要对齐的DIV。

2、点击右侧CSS选项卡下的添加属性,如下图

3、在新添加属性名称下选择:line-height,

4、中间的数值框内填上数字,这个数值必须要和这个DIV的height属性值一样,才能使文字纵向居中,

5、第三个框中选择px。确认

6、或者直接在代码视图下的div中的style样式中添加line-height:100px,使这个DIV的行距line-height值与高度height值相等就可以实现垂直居中。