野花--css实现元素竖向排列 --- writing-mode和flex的区别
我是在做小米商店首页的侧边栏hover显示时碰到的这个要求,因为想尽量简洁架构,因此侧边栏hover出来的页面也想放在侧边栏的 li元素中,所以就出现了一个限制条件,即li是有宽度限制的,同时li所在的父元素也是有宽度限制的,在第一次尝试使用flex做纵向排列时,出现了背景色不能按照flex纵向排列延伸显示出来,如图示,hover出来的页面是flex纵向排列,但是背景色白色并没有同样显示在自动换列上.


第一种:使用flex方法
前提条件1.爷元素有宽度 2父元素有高度 3.子元素有宽度和高度:
.top_box {
width: 50px;
}
.box {
background-color: #9bceea;
height: 120px;
flex-wrap: wrap;
display: flex;
flex-direction: column;
.item {
height: 40px;
width: 50px;
background-color: #8F41E9;
}
}
<div class="top_box">
<div class="box">
<div class="item">第1项</div>
<div class="item">第2项</div>
<div class="item">第3项</div>
<div class="item">第4项</div>
<div class="item">第5项</div>
<div class="item">第6项</div>
<div class="item">第7项</div>
<div class="item">第8项</div>
<div class="item">第9项</div>
<div class="item">第10项</div>
<div class="item">第11项</div>
</div>
</div>

运行确实是纵向排列,然后因为高度限制,自动换列,直到结束最后一个div排列.
但是上述有一个问题,就是.box的背景并没有显示出来,按照我的诉求,应该要显示box的背景在整个div中.右下角并没有将背景色显示出来,这个就是flex布局在有高度和宽度限制条件下,纵向排列的局限性.
第二种方法:writing-mode属性结合float
让列表内元素竖着排列,高度不够,纵向换行的需求。
.top_box {
width: 50px;
}
.box {
background-color: #9bceea;
height: 120px;
writing-mode: vertical-lr;
.item {
float: left;
writing-mode: initial;
height: 40px;
width: 50px;
background-color: #8F41E9;
}
}
<div class="top_box">
<div class="box">
<div class="item">第1项</div>
<div class="item">第2项</div>
<div class="item">第3项</div>
<div class="item">第4项</div>
<div class="item">第5项</div>
<div class="item">第6项</div>
<div class="item">第7项</div>
<div class="item">第8项</div>
<div class="item">第9项</div>
<div class="item">第10项</div>
<div class="item">第11项</div>
</div>
</div>
如果只有父元素中有writing-mode属性,子元素中没有writing-mode属性,哪么文字也会纵向排列,就像这样

因此,需要在子项中添加writing-mode属性值initial还原成初始的文字排列

这样就实现了纵向排列,自动换行,同时父级元素的背景也延伸显示出来了.
具体原理还不清楚,是经过多次尝试才确定的解决方法.

浙公网安备 33010602011771号