野花--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还原成初始的文字排列

 

 这样就实现了纵向排列,自动换行,同时父级元素的背景也延伸显示出来了.

 

具体原理还不清楚,是经过多次尝试才确定的解决方法.

posted @ 2022-11-06 18:37  EricYJChung  阅读(666)  评论(0编辑  收藏  举报