【问题标题】:How to make child div fluid with respect to parent如何使子div相对于父母流动
【发布时间】:2017-09-07 00:26:11
【问题描述】:

我有一个基于屏幕大小的two/three 列布局。

如果窗口大小大于1000,则我需要遵循3 column 布局,否则我需要遵循two column 布局。

我已经使用 JS 实现了这一点,但代码非常混乱。现在我想用 CSS 来做。但我被困住了。

这里是 JSFiddle:https://jsfiddle.net/7kuah16h/1/

常量:

Child Min Width (148px) including padding
child Max Width (196px) including padding

如果窗口大小为500px(例如)子级必须为196pxtwo column.

如果窗口大小为350px,则子级必须为175px,每个two column

如果窗口大小变为1000px,那么它应该转换为 3 列布局。

如果窗口大小小于1000px,所有内容都应居中对齐。

孩子必须将其宽度 a/c 更改为可用宽度。

我的要求:

【问题讨论】:

  • 您已标记media queries,但未在您的示例中使用它们。这是一条路

标签: html css media-queries


【解决方案1】:

如果你只想support modern browsers,你可以使用弹性盒子,避免使用浮动盒子和溢出。更适合响应式设计和移动设备。

.parent {
    display: flex;
    flex-wrap: wrap;
}
.child {
    height: 50px;
    flex: 0 1 50%; // 2 boxes 
 }

 @media (min-width: 1000px) {
   .child {
       flex: 0 1 33.33%; // 3 boxes for screens bigger than 1000px 
   }
 }

更新你的小提琴:https://jsfiddle.net/7kuah16h/9/

【讨论】:

  • 感谢您的回复。我已经更新了你的小提琴。我面临两个问题。 1. 我希望我的孩子 div 的宽度在 50-100px 之间变化,例如基于可用大小。 2. 必须只有 3 列。目前它根据空间更改为 4-5。 @agapitocandemor
  • 抱歉@Dalvik,您能找到解决问题的方法吗??
  • 我找到了解决办法
【解决方案2】:

我添加了带有可能解决方案的 jsfiddle,但我不确定我是否正确理解了您的问题。你能确认这是你要找的吗?

您需要为特定断点定义具有宽度的媒体查询:

@media (min-width: 1000px) {
  .child {
    width: 33.33%;
  }
}

更多细节在小提琴中:

https://jsfiddle.net/wz5raza3/

当然,根据您的解决方案,您需要的不止于此,例如填充、边距或相等的列高。对于任何实际使用,使用 flexbox 会更好。

如果您只想使用旧方法学习基本布局,我建议: http://learnlayout.com/

【讨论】:

  • @Dalvik 抱歉,我已经用正确的链接更新了链接。
【解决方案3】:

这是使用@media screen 解决您的问题的近似方法。您可以根据需要调整内容块的屏幕值和宽度。

@media screen and (max-width: 350px) {
  .block {
    width:150px;
  }
}

@media screen and (max-width: 500px) and (min-width: 351px) {
  .block {
    width:196px;
  }
}

@media screen and (max-width: 999px) and (min-width: 501px) {
  .block {
    width:48%;
  }
}

@media screen and (min-width: 1000px) {
  .block {
    width:32%;
  }
}

.container {
  text-align:center;
}

.block {
  text-align:left;
  display:inline-block;
  background-color:#ddd;
  height:175px;
  margin:0px;
  padding:0px;
}

body {
  margin:0px;
  padding:0px;
}
<div class="container">
  <div class="block">block</div>
  <div class="block">block</div>
  <div class="block">block</div>
  <div class="block">block</div>
  <div class="block">block</div>
  <div class="block">block</div>
</div>

【讨论】:

    【解决方案4】:

    只需将 text-align: center 添加到父 div 即可。

    【讨论】:

    • 但是子元素的流体宽度呢?它们保持固定。它们不会根据窗口大小而改变。 @chrisstar
    • 我真的不明白你的意思
    • 中心对齐不是问题。主要问题是子元素没有将其宽度 a/c 更改为可用空间。
    猜你喜欢
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 2014-11-15
    • 1970-01-01
    相关资源
    最近更新 更多