html - 在最后一行左对齐和垂直对齐的对齐和包装固定宽度的容器?
问题描述
我想要一些 div,所有的宽度和高度都相等,每个边都有一个边距,覆盖了某个容器的整个宽度,它们之间的空间相等。当容器宽度变窄到不能保留 div 宽度(包括它们的边距)时,div 应该折叠起来。每行外边缘的 div 应与整个容器宽度齐平。我确实知道元素的确切数量。
Flexbox 用flex-wrap: wrap
and可以很好地做到这一点justify-content: space-between
,但我不喜欢的是,当行换行时,我最初会得到一行包含位于行两侧的 2 个 div 的行。然后当第三个 div 包装时,它将是死点。我知道这是我所要求的space-between
,但我真正想要的是包装行为将底行上的 div 与上面对齐的 div 左对齐和垂直对齐。
我在这里知道这个解决方案,它工作得很好,但我想不出一种方法来防止容器底部的可变间距而不使用媒体查询。间距的高度取决于容器/屏幕的宽度,我需要它保持一致。
这不必通过 flexbox 来完成。我对其他解决方案持开放态度,但我必须支持 IE10+(最好还支持 IE9,我知道它排除了 flexbox)。例如,我在这个例子中寻找这两行的好处:
.flex-container {
padding: 0;
margin: 0;
list-style: none;
border: 1px solid silver;
-ms-box-orient: horizontal;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -moz-flex;
display: -webkit-flex;
display: flex;
}
.wrap-1 {
justify-content: space-between;
}
.wrap {
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
}
.wrap-1 li {
background: tomato;
}
.wrap-2 li {
background: gold;
}
.flex-item {
padding: 5px;
width: 100px;
height: 100px;
margin: 10px;
line-height: 100px;
color: white;
font-weight: bold;
font-size: 2em;
text-align: center;
}
<ul class="flex-container wrap wrap-1">
<li class="flex-item">1</li>
<li class="flex-item">2</li>
<li class="flex-item">3</li>
<li class="flex-item">4</li>
<li class="flex-item">5</li>
<li class="flex-item">6</li>
<li class="flex-item">7</li>
<li class="flex-item">8</li>
</ul>
<ul class="flex-container wrap wrap-2">
<li class="flex-item">1</li>
<li class="flex-item">2</li>
<li class="flex-item">3</li>
<li class="flex-item">4</li>
<li class="flex-item">5</li>
<li class="flex-item">6</li>
<li class="flex-item">7</li>
<li class="flex-item">8</li>
</ul>
解决方案
最后,我使用了@TemaniAfif 提供的帖子中链接的解决方案之一,但进行了一些修改以处理我的元素的固定宽度和每个元素的边距。
我知道这个解决方案在 HTML 中使用了虚拟元素,这被认为是不好的做法,但我比其他一些黑客更喜欢使用它。请记住,如果您自己使用这样的解决方案来解决类似的问题,那么您应该拥有的虚拟元素的最小数量是您的可显示元素的数量减一,即如果底行只有一个元素,那么所有虚拟元素将需要填充该行的其余部分。
.tiles-container {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.tile {
width: 150px;
margin-left: 10px;
margin-right: 10px;
}
.tile-wrap {
height: 100px;
margin-top: 10px;
margin-bottom: 10px;
background-color: deeppink;
}
.tile-blind {
height: 0;
}
<div class="tiles-container">
<div class="tile tile-wrap">a</div>
<div class="tile tile-wrap">b</div>
<div class="tile tile-wrap">c</div>
<div class="tile tile-wrap">d</div>
<div class="tile tile-wrap">e</div>
<div class="tile tile-wrap">f</div>
<div class="tile tile-wrap">g</div>
<div class="tile tile-wrap">h</div>
<div class="tile tile-wrap">i</div>
<div class="tile tile-wrap">j</div>
<div class="tile tile-wrap">k</div>
<div class="tile tile-wrap">l</div>
<div class="tile tile-blind"></div>
<div class="tile tile-blind"></div>
<div class="tile tile-blind"></div>
<div class="tile tile-blind"></div>
<div class="tile tile-blind"></div>
<div class="tile tile-blind"></div>
<div class="tile tile-blind"></div>
<div class="tile tile-blind"></div>
<div class="tile tile-blind"></div>
<div class="tile tile-blind"></div>
<div class="tile tile-blind"></div>
</div>
推荐阅读
- python-2.x - 这段代码错了吗?我收到无效的语法错误。顺便说一句,我是高中的初学者编码器
- c++ - 如何在不使用位集的情况下显示无符号整数中的位?
- javascript - Shopify 打开特定产品页面的色板
- eigen - 复制向量的一个特征矩阵
- sql - MS Access 类似查询,结果中带有 #
- hibernate - EntityManagerFactory 注入
- json - 在 PowerShell 中使用来自 CSV 的数据修改 JSON 文件
- java - 未经检查的演员表:'java.lang.Class
>' 到 'java.lang.Class - postgresql - 创建带有视图定义转储的 SQL - 排序视图以避免依赖问题
- ionic-framework - 动态设置离子选择项的默认值