【问题标题】:move fixed-margin div below left-float div when screen size is small当屏幕尺寸较小时,将固定边距 div 移动到左浮动 div 下方
【发布时间】:2020-05-09 10:13:17
【问题描述】:

我正在使用这个问题https://stackoverflow.com/a/468080/2981429 中推荐的方法,并且有两个 div:

#left-pane {
  float: "left";
  width: "300px";
}

#right-pane {
  margin-left: "300px";
}

左窗格占用固定的 300 像素宽度,右窗格始终占用 100% 的剩余空间。

我想在右侧窗格中添加“最小宽度”。当它低于大约 300 像素的宽度时,我想将其移动到左窗格下方。

当我尝试将min_width: 300px 实际添加到右窗格时,它只是无形地延伸到页面边界之外 - 它似乎无法到达浮动的左窗格下方。


Codepen


【问题讨论】:

  • 对于您的布局,我认为最好使用 flexbox。但是,如果我了解您是否想在使用小型设备时在列上获得 2 个 div?
  • @Sfili_81 是的,正确的,它们会在同一列。顺便说一句,我在问题中添加了一个代码笔。感谢您对使用 flexbox 的建议。我以前没做过。

标签: css css-float


【解决方案1】:

您可以使用 flexbox 进行布局。 您可以在MDN 上找到一个很好的起点。

当您使用小型设备时,您可以使用媒体查询来获取列上的 div。

例如:

@media (max-width: 600px) {
  .container{
    flex-direction:column;
  }
  #left,#right{
    flex: 0 1 100%;/* set the width to 100% for the 2 columns */
  }
}

.container{
  display:flex;
}
#left {
  flex:0 1 300px;
  height: 300px;
  background-color: blue;
}

#right {
  flex:1 1 auto;
  height: 300px;
  background-color: darkred;
}
<div class="container">
  <div id='left'></div>
  <div id='right'></div>
</div> 

【讨论】:

  • 谢谢,这主要是有效的。有没有办法给左元素一个固定的宽度和动态的高度?使用此代码,它的高度和宽度似乎都固定为 300 像素。我可以降低 flex 值,比如 0 1 150px,但宽度也会减小。
  • 您可以为两列设置自动高度。只有左列具有固定宽度,右列占据其余空间。
  • 我似乎失去了在overflow-y上滚动的能力,但我累了,明天还要多看这个。
  • 原来overflow-y的问题并没有真正相关。谢谢。
【解决方案2】:

这不是float 的工作。你需要flex 这个实例。

.container {
  display: flex;
  flex-flow: row nowrap;
  width: 100%;
 }

#left-pane {
  width: 300px;
  min-width: 300px;
}

@media only screen and (max-width: 300px) {
  .container {
    flex-flow: column;
  }
}

使用flex 为您提供了许多新的布局和响应式选项,您可以在此处阅读更多内容:https://css-tricks.com/snippets/css/a-guide-to-flexbox/

【讨论】:

    【解决方案3】:

    .parent {
      display: flex;
    }
    #left {
      float: left;
      width: 300px;
      height: 300px;
      background-color: blue;
    }
    
    #right {
      height: 300px;
      background-color: darkred;
      width: calc(100% - 300px);
    }
    
    @media (max-width: 600px) {
      .parent {
        flex-direction: column;
      }
      #left,
      #right {
        width: 100%;
      }
    }
    <div class="parent">
      <div id='left'></div>
      <div id='right'></div>
    </div>

    【讨论】:

    • 我的意见,没有必要使用 calc 作为宽度。使用 flex: 1 1 auto 你委托给 flex 来计算剩余空间
    猜你喜欢
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 2023-03-24
    • 2013-04-30
    • 1970-01-01
    相关资源
    最近更新 更多