【问题标题】:Make the parent div width the same as the children使父 div 宽度与子 div 宽度相同
【发布时间】:2021-02-09 03:06:26
【问题描述】:

我制作的这个布局似乎可行,唯一的问题是我希望所有 che 填充的 div 都居中。

有三种可能的“状态”:

  1. 青色元素在所有其他元素的左侧

  2. 金色和粉色元素位于两列

  3. 所有元素都在一个列上。

我想要什么:

在第一种情况下,所有内容都居中并且可以正常工作,而在其他两种情况下则不行:元素始终向左对齐。

为了居中,我正在考虑使用margin: 0 auto,但即使I used inline-flex 似乎div 也比它们的内容大(查看运行示例中状态#3 的灰色区域)。为什么?

我该如何解决?

.container {
  outline: 1px solid black;
  max-width: 490px;
  margin: 0 auto;
}
.columns {
  outline: 1px solid black;
  display: inline-flex;
  flex-wrap: wrap;
}
.map {
  background-color: cyan;
  width: 150px;
  min-width: 150px;
  height: 150px;
  min-height: 150px;
  margin-right: 20px;
}
.content {
  outline: 1px solid black;
  background-color: lightgray;
  max-width: 320px;
}

.cards {
  outline: 1px solid black;
  display: inline-flex;
  flex-wrap: wrap;
}
.card {
  background-color: pink;
  outline: 1px solid black;
  width: 150px;
  height: 70px;
  display: inline-block;
}
.card.left {
  margin-right: 20px;
}

.texts {
  outline: 1px solid black;
  display: inline-flex;
  flex-wrap: wrap;
}
.text {
  background-color: gold;
  outline: 1px solid black;
  width: 150px;
  height: 200px;
  display: inline-block;
}
.text.left {
  margin-right: 20px;
}
<div class="container">
  <div class="columns">
    <div class="map"></div>
    <div class="content">
      <div class="cards">
        <div class="card left">card #1</div>
        <div class="card">card #2</div>
        <div class="card left">card #3</div>
        <div class="card">card #4</div>
      </div>
      
      <div class="texts">
        <div class="text left">text #1</div>
        <div class="text">text #2</div>
      </div>
    </div>
  </div>
</div>

【问题讨论】:

  • 您是否已经考虑过使用 CSS 网格?对我来说,总体而言,这似乎是一个更好、更容易的解决方案。
  • 不完全确定你想要什么。这? jsfiddle.net/ghL8qb71
  • @MichaelBenjamin 谢谢迈克尔,但你的例子不能如我所愿。我添加了 3 张图片,结果符合我的预期。
  • @tacoshy 谢谢你的提示,你有什么例子可以告诉我一些类似于我想要的东西吗?我在主信息中添加了 3 张图片
  • 您可以更改 HTML 结构还是需要当前的结构?

标签: html css flexbox centering


【解决方案1】:

以正确的方式使用媒体查询,在这里,找到this fiddle链接,尝试调整结果窗口的大小。

.container {
  max-width: 490px;
  margin: 0 auto;
}

.columns {
  display: inline-flex;
  flex-wrap: wrap;
}

.map {
  background-color: cyan;
  width: 150px;
  min-width: 150px;
  height: 150px;
  min-height: 150px;
  margin-right: 20px;
}

.content {
  background-color: lightgray;
  max-width: 320px;
}

.cards {
  display: inline-flex;
  flex-wrap: wrap;
}

.card {
  background-color: pink;
  width: 150px;
  height: 70px;
  display: inline-block;
}

.card.left {
  margin-right: 20px;
}

.texts {
  display: inline-flex;
  flex-wrap: wrap;
}

.text {
  background-color: gold;
  width: 150px;
  height: 200px;
  display: inline-block;
}

.text.left {
  margin-right: 20px;
}
@media(max-width: 520px){
.container {

    display: flex;
      flex-direction: column;
    align-items: center;
}
 .columns {
    display: inline-block;
    
  }
}
@media(max-width: 352px){
.container {

    display: flex;
      flex-direction: column;
    align-items: center;
}
  .map {margin-right: 0;}
 
  .content {
        max-width: min-content;
  }
.card.left {
    margin-right: 0px;
}
.text.left {
    margin-right: 0px;
}
}
<div class="container">
  <div class="columns">
    <div class="map"></div>
    <div class="content">
      <div class="cards">
        <div class="card left">card #1</div>
        <div class="card">card #2</div>
        <div class="card left">card #3</div>
        <div class="card">card #4</div>
      </div>
      <div class="texts">
        <div class="text left">text #1</div>
        <div class="text">text #2</div>
      </div>
    </div>
  </div>
</div>

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-12-13
  • 2014-09-05
  • 2017-12-25
  • 2013-06-25
  • 2013-09-16
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
相关资源
最近更新 更多