flex:1盒子的内部盒子高度不可设置为100%

案例

如图,设置一个盒子的宽高为200px,第三个盒子设置为flex:1,效果如下

 <div style="width: 200px; height: 200px; background-color: gray; display: flex; flex-direction: column">
        <div style="background-color: aqua">1</div>
        <div style="background-color: bisque">2</div>
        <div style="flex: 1; background-color: red;overflow: auto;">
          <h1>flex:1的盒子</h1>
          <h1>flex:1的盒子</h1>
          <h1>flex:1的盒子</h1>
          <h1>flex:1的盒子</h1>
          <h1>flex:1的盒子</h1>
        </div>
      </div>

 

可以看到第三个盒子会自动占据所有的空间,如果内容过多,则高度会更大,但是超出部分会隐藏,此时我们可以设置overflow:auto使其出现滚动条

 

 

 <div style="flex: 1; background-color: red;overflow: auto;">
          <h1>flex:1的盒子</h1>
          <h1>flex:1的盒子</h1>
          <h1>flex:1的盒子</h1>
          <h1>flex:1的盒子</h1>
          <h1>flex:1的盒子</h1>
        </div>

 那么问题来了,我们把代码更改如下:如果此时我在第三个盒子里又放一个子盒子,然后设置子盒子的高度是100%,并且设置overflow:auto,那么子盒子的高度和父盒子是完全一样的,如果当内容超多,不也是会出现滚动条吗,但是事实却不是这样,而是直接显示出来了

     <div style="width: 200px; height: 200px; background-color: gray; display: flex; flex-direction: column">
        <div style="background-color: aqua">1</div>
        <div style="background-color: bisque">2</div>
        <div style="flex: 1; background-color: red">
          <div style="height: 100%; overflow: auto">
            <h1>flex:1的盒子</h1>
            <h1>flex:1的盒子</h1>
            <h1>flex:1的盒子</h1>
            <h1>flex:1的盒子</h1>
            <h1>flex:1的盒子</h1>
            <h1>flex:1的盒子</h1>
            <h1>flex:1的盒子</h1>
          </div>
        </div>
      </div>

 

问题

我们发现,当父盒子的高度由 flex: 1 决定时,子盒子的高度设置为100%可能没有实际效果,这是为啥呢?

解决办法

这是因为 flex: 1 会使父盒子自动填充剩余空间,并且子盒子的高度设置为100%会继承父盒子的高度,但是由于父盒子的高度是不定的,是会被子盒子充大的,所以子盒子设置height:100%其实是没作用的

我们可以在父盒子上设置overflow:auto即可

  <div style="width: 200px; height: 200px; background-color: gray; display: flex; flex-direction: column">
    <div style="background-color: aqua">1</div>
    <div style="background-color: bisque">2</div>
    <div style="flex: 1; background-color: red; overflow: auto ">
      <div style="height: 100%;">
        <h1>flex:1的盒子</h1>
        <h1>flex:1的盒子</h1>
        <h1>flex:1的盒子</h1>
        <h1>flex:1的盒子</h1>
        <h1>flex:1的盒子</h1>
        <h1>flex:1的盒子</h1>
        <h1>flex:1的盒子</h1>
        <h1>flex:1的盒子</h1>
      </div>
    </div>
  </div>


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
弹性盒子布局(Flexbox)是一种用于在容器中进行灵活的、可响应的布局的 CSS3 模块。它提供了一种简单而强大的方式来对容器内的元素进行排列、对齐和分布。 Flexbox 的核心思想是将容器分为主轴(main axis)和交叉轴(cross axis)。主轴是元素排列的方向,可以是水平方向(row)或垂直方向(column),而交叉轴则是与主轴垂直的方向。 通过设置容器和子元素的属性,我们可以实现各种灵活的布局效果。以下是一些常用的属性: 1. 容器的属性: - `display: flex`:将容器设置为弹性容器。 - `flex-direction`:指定主轴的方向,可以是 `row`(默认值)、`column`、`row-reverse` 或 `column-reverse`。 - `justify-content`:指定子元素在主轴上的对齐方式,可以是 `flex-start`、`flex-end`、`center`、`space-between`、`space-around` 或 `space-evenly`。 - `align-items`:指定子元素在交叉轴上的对齐方式,可以是 `flex-start`、`flex-end`、`center`、`baseline` 或 `stretch`。 - `flex-wrap`:指定子元素是否换行,可以是 `nowrap`(默认值)、`wrap` 或 `wrap-reverse`。 2. 子元素的属性: - `flex-grow`:指定子元素在剩余空间中的放大比例,默认值为 0,即不放大。 - `flex-shrink`:指定子元素在空间不足时的缩小比例,默认值为 1,即等比例缩小。 - `flex-basis`:指定子元素在主轴上的初始尺寸,默认值为 `auto`。 - `flex`:`flex-grow`, `flex-shrink` 和 `flex-basis` 的缩写。 - `align-self`:覆盖容器的 `align-items` 属性,指定子元素在交叉轴上的对齐方式。 Flexbox 提供了一种简单而强大的布局方式,适用于各种场景,特别是在构建响应式布局时非常有用。希望这些信息对你有帮助!如果还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值