我有一个包含一到三个弹性项目的弹性盒。
正确的布局应该是这样的<div></div><h2></h2><div></div>
在包含的弹性框中。
我有代码可以完成这项工作(请参阅this) 仅当布局顺序保持不变时。
我的问题是:如何有办法确保,如果标记并不总是按该顺序(比如说我的一位同事未能正确执行),我该如何设置它以便<h2>
总是显示在中间(或者在只有一个 div 和一个 h2 的情况下尽可能接近)。
为了实现这一目标,我一直在利用order
财产;然而,我要么没有充分利用它的潜力,要么它是错误的解决方案。
我已经做了thisjsfiddle 作为它的测试场,但也有这个示例:
.diff-order {
order: 2
}
.diff-order:not(h2) {
order: 1;
}
.container {
display: flex;
}
.container > * {
flex: 1; /* KEY RULE */
border: 1px dashed red;
}
h2 {
text-align: center;
margin: 0;
}
.container > div {
display: flex;
}
.diff-order {
order: 2
}
.diff-order:not(h2) {
order: 1;
}
p { text-align: center;}
p > span { background-color: aqua; padding: 5px; }
<div class="container">
<h2>
I'm an h2
</h2>
<div>
<span>I'm a span</span>
<span>I'm a span</span>
</div>
<div>
<span>I'm a span</span>
<span>I'm a span</span>
</div>
</div>
<div class="container">
<h2 class="diff-order">
I'm an h2
</h2>
<div class="diff-order">
<span>I'm a span</span>
<span>I'm a span</span>
</div>
<div class="diff-order">
<span>I'm a span</span>
<span>I'm a span</span>
</div>
</div>
它的作用是移动<h2>
到包含 div 的末尾。我想看看是否有办法设置顺序,以便<h2>
永远是中心项目。也许是伪类:before
and :after
可以使用(也许可以替代 h2 周围的 div...)。
谢谢。
当有三要素在容器中:
AND
AND
然后,你可以这样做:
.container > div:first-of-type { order: 1; }
.container > h2 { order: 2; }
.container > div:last-of-type { order: 3; }
这可以翻译为:
无论源中元素的顺序如何,
- 第一个 div 将按视觉顺序首先出现
- The
h2
将按视觉顺序出现在第二位
- 第二个 div 将出现在视觉顺序的最后
.container {
display: flex;
}
.container > * {
flex: 1;
border: 1px dashed red;
}
h2 {
text-align: center;
margin: 0;
}
.container > div:first-of-type { order: 1; }
.container > h2 { order: 2; }
.container > div:last-of-type { order: 3; }
p { text-align: center;}
p > span { background-color: aqua; padding: 5px; }
<div class="container">
<div>
</div>
<h2>I'm an h2</h2>
<div>
<span>I'm span 1</span>
<span>I'm span 2</span>
<span>I'm span 3</span>
</div>
</div>
<div class="container">
<div>
<span>I'm span 1</span>
<span>I'm span 2</span>
<span>I'm span 3</span>
</div>
<h2>I'm an h2</h2>
<div>
<span>I'm span 4</span>
<span>I'm span 5</span>
<span>I'm span 6</span>
</div>
</div>
<div class="container">
<div>
<span>I'm span 1</span>
<span>I'm span 2</span>
</div>
<h2>I'm an h2</h2>
<div>
<span>I'm span 3</span>
</div>
</div>
<div class="container">
<div>
<span>I'm a span</span>
<span>I'm a span</span>
</div>
<div>
</div>
<h2>
I'm an h2
</h2>
</div>
<div class="container">
<div>
<span>I'm a span</span>
<span>I'm a span</span>
</div>
<h2>
I'm an h2
</h2>
</div>
<div class="container">
<h2 class="diff-order">
I'm an h2
</h2>
<div class="diff-order">
<span>I'm a span</span>
<span>I'm a span</span>
</div>
<div class="diff-order">
<span>I'm a span</span>
<span>I'm a span</span>
</div>
</div>
<p><span>TRUE CENTER</span></p>
对于有的情况一个元素在容器中添加justify-content: space-around
.
因为每个项目已经有flex: 1
应用,space-around
当容器中有两个或多个项目时,将不起作用。
然而,当只有一件物品时,space-around
决心center
.
从规格来看:
8.2.轴对齐:justify-content财产
The justify-content
属性沿主轴对齐弹性项目
Flex 容器的当前行。
space-around
Flex 项目均匀分布在行中,空间大小减半
两端。
如果剩余自由空间为负或者有
该行上只有一个弹性项目,该值与center
.
.container {
display: flex;
justify-content: space-around; /* NEW */
}
.container > * {
flex: 1;
border: 1px dashed red;
}
h2 {
text-align: center;
margin: 0;
}
.container > div:first-of-type { order: 1; }
.container > h2 { order: 2; }
.container > div:last-of-type { order: 3; }
p { text-align: center;}
p > span { background-color: aqua; padding: 5px; }
<div class="container">
<div>
</div>
<h2>I'm an h2</h2>
<div>
<span>I'm span 1</span>
<span>I'm span 2</span>
<span>I'm span 3</span>
</div>
</div>
<div class="container">
<div>
<span>I'm span 1</span>
<span>I'm span 2</span>
<span>I'm span 3</span>
</div>
<h2>I'm an h2</h2>
<div>
<span>I'm span 4</span>
<span>I'm span 5</span>
<span>I'm span 6</span>
</div>
</div>
<div class="container">
<div>
<span>I'm span 1</span>
<span>I'm span 2</span>
</div>
<h2>I'm an h2</h2>
<div>
<span>I'm span 3</span>
</div>
</div>
<div class="container">
<div>
<span>I'm a span</span>
<span>I'm a span</span>
</div>
<div>
</div>
<h2>
I'm an h2
</h2>
</div>
<div class="container">
<div>
<span>I'm a span</span>
<span>I'm a span</span>
</div>
<h2>
I'm an h2
</h2>
</div>
<div class="container">
<h2 class="diff-order">
I'm an h2
</h2>
<div class="diff-order">
<span>I'm a span</span>
<span>I'm a span</span>
</div>
<div class="diff-order">
<span>I'm a span</span>
<span>I'm a span</span>
</div>
</div>
<div class="container">
<h2 class="diff-order">
I'm an h2
</h2>
</div>
<p><span>TRUE CENTER</span></p>
您现在可以购买一件或三件弹性商品。
对于两个项目,它会变得有点棘手。
因为你总是想要h2
居中,我建议始终在容器中放置两个 div,即使它们是空的。然后flex: 1
将为所有三个项目提供相同的宽度。
.container {
display: flex;
justify-content: space-around;
}
.container > * {
flex: 1;
border: 1px dashed red;
}
h2 {
text-align: center;
margin: 0;
}
.container > div:first-of-type { order: 1; }
.container > h2 { order: 2; }
.container > div:last-of-type { order: 3; }
p { text-align: center;}
p > span { background-color: aqua; padding: 5px; }
<div class="container">
<div>
</div>
<h2>I'm an h2</h2>
<div>
<span>I'm span 1</span>
<span>I'm span 2</span>
<span>I'm span 3</span>
</div>
</div>
<div class="container">
<div>
<span>I'm span 1</span>
<span>I'm span 2</span>
<span>I'm span 3</span>
</div>
<h2>I'm an h2</h2>
<div>
<span>I'm span 4</span>
<span>I'm span 5</span>
<span>I'm span 6</span>
</div>
</div>
<div class="container">
<div>
<span>I'm span 1</span>
<span>I'm span 2</span>
</div>
<h2>I'm an h2</h2>
<div>
<span>I'm span 3</span>
</div>
</div>
<div class="container">
<div>
<span>I'm a span</span>
<span>I'm a span</span>
</div>
<div>
</div>
<h2>
I'm an h2
</h2>
</div>
<div class="container">
<div></div>
<div>
<span>I'm a span</span>
<span>I'm a span</span>
</div>
<h2>
I'm an h2
</h2>
</div>
<div class="container">
<h2 class="diff-order">
I'm an h2
</h2>
<div class="diff-order">
<span>I'm a span</span>
<span>I'm a span</span>
</div>
<div class="diff-order">
<span>I'm a span</span>
<span>I'm a span</span>
</div>
</div>
<p><span>TRUE CENTER</span>
</p>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)