【问题标题】:responsive overlapping elements when there is not enough space当空间不足时响应重叠元素
【发布时间】:2021-01-08 07:19:01
【问题描述】:

这是我的场景...

  • 当空间不足时,元素(div、li)开始像堆叠的卡片包一样相互重叠。 (在调整窗口大小时)
  • 但是当有足够的空间甚至更多时,我希望它们彼此相邻,最大边距为 5px(它们之间没有任何额外的边距)。
  • 元素的宽度和高度是固定的。
  • 元素可以超过 5 个或更少,甚至 1 个。

我尝试了绝对位置和 calc() 但没有用。 我需要做 js jquery 还是用 css 做?

我的期望:

  • 带有 5 个项目的橙色容器,例如当它有足够的空间甚至更多时 → link
  • 带有 5 个项目的橙色容器,例如当空间不够时 → link
  • 带有 2 件物品的橙色容器,例如当它有足够的空间甚至更多时 → link
  • 带有 2 个项目的橙色容器,例如当空间不够时 → link

感谢这个答案https://stackoverflow.com/a/48395486/7872538 和这个数学的一点改变margin: 0 calc(((75% / 25) - 12px) + 5%);

我可以处理 5 个元素,但是当我删除一个或多个元素时,它看起来像这样 → link
有额外的空白空间。


这是我的html:

<div class="red-container">
    <div class="orange-container">
       <div class="box-a size">A</div>
       <div class="box-b size">B</div>
       <div class="box-c size">C</div>
       <div class="box-d size">D</div>
       <div class="box-f size">F</div>
   </div>
</div>

到目前为止,这是我的 CSS:

.red-container {
  padding: 10px;
  border: 2px dotted red;
  float: right;
  width: 70%;
  margin: 100px 0;
}
.orange-container {
  width: auto;
  height: auto;
  border: 1px dashed orange;
  float: right;
  margin: 10px 0;
}
.size {
  width: 100px;
  height: 100px;
  float: right;
  text-align: center;
  font-weight: bold;
  font-size: 20px;
  margin: 5px 5px 5px 0;
}
.box-a {
  background: red;
}
.box-b {
  background: DodgerBlue
}
.box-c {
  background: green;
}
.box-d {
  background: orange;
}
.box-f {
  background: blueviolet;
  margin-left: 5px;
}

【问题讨论】:

  • 在没有看到任何代码的情况下很难帮助您。请包括所有相关代码、html css、jquery/javascript
  • @CarstenLøvboAndersen 感谢您的回复。但没有 js/jquery,但我尝试使用 css calc() 但结果并没有完全符合我的要求......

标签: javascript html jquery css flexbox


【解决方案1】:

您可以使用display:flex 获取驻留结果。

我已经添加了这个,并且稍微改变了你的 css。

.size {
  flex: 0 0 calc(15% - 10px);
  box-sizing: border-box;
}
.size:last-child {
  flex-grow: 1;
}

这应该能够指导您 100% 满足您的要求

演示

.red-container {
  padding: 10px;
  border: 2px dotted red;
  float: right;
  width: 70%;
  margin: 100px 0;
}

.orange-container {
  width: 100%;
  height: auto;
  border: 1px dashed orange;
  float: right;
  margin: 10px 0;
  
  display: flex;
  flex-flow: row wrap;
}

.size {
  height: 100px;
  text-align: center;
  font-weight: bold;
  font-size: 20px;
  //margin: 5px 5px 5px 0;
}
.size {
  flex: 0 0 calc(10% - 10px);
  box-sizing: border-box;
}
.size:last-child {
  flex-grow: 1;
}


.box-a {
  background: red;
}

.box-b {
  background: DodgerBlue
}

.box-c {
  background: green;
}

.box-d {
  background: orange;
}

.box-f {
  background: blueviolet;
  
}
<div class="red-container">
  <div class="orange-container">
    <div class="box-a size">A</div>
    <div class="box-b size">B</div>
    <div class="box-c size">C</div>
    <div class="box-d size">D</div>
    <div class="box-f size">F</div>
  </div>
</div>

【讨论】:

  • 这很好,但物品必须固定高度和高度,因为它们是图像,我不希望它们被拉伸。相反,我希望它们重叠,而不是拉伸。它们应该看起来像我上传的第一张和第二张照片。缺少的另一件事是它们之间的边距(最大 5px),所以如果你能向我解释更多,这对我来说是一个挑战。太感谢了。 @CarstenLøvboAndersen
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
  • 2013-12-10
  • 2020-12-13
  • 2019-07-27
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多