显示:内联块强制换行
display: inline-block forces new line
似乎 display: inline-block
很不受欢迎,人们倾向于使用 float
,也许这就是我找不到有用的问题答案的原因。
给定以下代码段,有 3 个框。 #b1
与 #b2
和 #b3
的高度相同。是否可以直接在 #b2
下显示 #b3
而不是换行?
我不太喜欢 float
,因为我必须添加 clear:both
,而且我也不确定如何使用 float
来添加。根据我的知识对其进行了测试,但没有得到更好的结果。
有没有人知道如何在不在 #b2
和 #b3
周围添加包装器的情况下解决这个问题?很遗憾,无法更改 HTML 标记。
提前谢谢你,祝你有愉快的一天。
#wrapper {
width: 100%;
font-size: 0;
}
.block {
display: inline-block;
vertical-align: top;
position: relative;
}
.block > p {
font-size: 1rem;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
.block_50x100 {
width: 50%;
padding-top: 100%;
background: #0f0;
}
.block_50x50 {
width: 50%;
padding-top: 50%;
background: #00f;
}
.block_50x50+.block_50x50 {
background: #f00;
}
<div id="wrapper">
<div id="b1" class="block block_50x100">
<p>some content</p>
</div>
<div id="b2" class="block block_50x50">
<p>some content</p>
</div>
<div id="b3" class="block block_50x50">
<p>some content</p>
</div>
</div>
在我看来,花车更适合这种情况。
#wrapper {
width: 100%;
overflow: hidden; /* more reliable way to contain floats
by creating the isolated Block Formatting Context (BFC)
more on this: https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context */
}
.block {
display: block;
overflow: hidden; /* new BFC again, now to preven overlapping of regular and floating blocks */
}
.block_50x100 {
width: 50%;
padding-top: 100%;
background: #0f0;
float: left;
}
.block_50x50 {
width: 50%;
padding-top: 50%;
background: #00f;
}
.block_50x50+.block_50x50 {
background: #f00;
}
<div id="wrapper">
<div id="b1" class="block block_50x100">
</div>
<div id="b2" class="block block_50x50">
</div>
<div id="b3" class="block block_50x50">
</div>
</div>
任何 inline-* 元素都不能跨越两行或更多行,因为此类元素是按照内联格式规则布局的,在单行中有足够的水平 space,之后的行换行发生,新行开始。只有浮动可以跨越多行文本。另一种选择是使用带有 flex-flow: column wrap
的 Flexbox 布局,但这需要为容器设置显式高度。
似乎 display: inline-block
很不受欢迎,人们倾向于使用 float
,也许这就是我找不到有用的问题答案的原因。
给定以下代码段,有 3 个框。 #b1
与 #b2
和 #b3
的高度相同。是否可以直接在 #b2
下显示 #b3
而不是换行?
我不太喜欢 float
,因为我必须添加 clear:both
,而且我也不确定如何使用 float
来添加。根据我的知识对其进行了测试,但没有得到更好的结果。
有没有人知道如何在不在 #b2
和 #b3
周围添加包装器的情况下解决这个问题?很遗憾,无法更改 HTML 标记。
提前谢谢你,祝你有愉快的一天。
#wrapper {
width: 100%;
font-size: 0;
}
.block {
display: inline-block;
vertical-align: top;
position: relative;
}
.block > p {
font-size: 1rem;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
.block_50x100 {
width: 50%;
padding-top: 100%;
background: #0f0;
}
.block_50x50 {
width: 50%;
padding-top: 50%;
background: #00f;
}
.block_50x50+.block_50x50 {
background: #f00;
}
<div id="wrapper">
<div id="b1" class="block block_50x100">
<p>some content</p>
</div>
<div id="b2" class="block block_50x50">
<p>some content</p>
</div>
<div id="b3" class="block block_50x50">
<p>some content</p>
</div>
</div>
在我看来,花车更适合这种情况。
#wrapper {
width: 100%;
overflow: hidden; /* more reliable way to contain floats
by creating the isolated Block Formatting Context (BFC)
more on this: https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context */
}
.block {
display: block;
overflow: hidden; /* new BFC again, now to preven overlapping of regular and floating blocks */
}
.block_50x100 {
width: 50%;
padding-top: 100%;
background: #0f0;
float: left;
}
.block_50x50 {
width: 50%;
padding-top: 50%;
background: #00f;
}
.block_50x50+.block_50x50 {
background: #f00;
}
<div id="wrapper">
<div id="b1" class="block block_50x100">
</div>
<div id="b2" class="block block_50x50">
</div>
<div id="b3" class="block block_50x50">
</div>
</div>
任何 inline-* 元素都不能跨越两行或更多行,因为此类元素是按照内联格式规则布局的,在单行中有足够的水平 space,之后的行换行发生,新行开始。只有浮动可以跨越多行文本。另一种选择是使用带有 flex-flow: column wrap
的 Flexbox 布局,但这需要为容器设置显式高度。