gpt4 book ai didi

html - 如何阻止内联 block 占用比子元素更多的宽度

转载 作者:行者123 更新时间:2023-12-02 00:48:22 27 4
gpt4 key购买 nike

我的 main(天蓝色)元素占用的宽度似乎比其子元素占用的宽度多。它的显示设置为 inline-block 这让我很好奇为什么它的宽度没有自动设置为 auto。直接子元素也有 inline-block 的显示,但它们的组合宽度 = 小于 100% 宽度。这里发生了什么?我该如何解决这个问题,让 main 元素只占用它需要的空间,而不是整个 100% 的宽度?

/* ///////////////////////////////// IMPORTS /////////////////////////////// */
@import url('https://necolas.github.io/normalize.css/latest/normalize.css');

/* ///////////////////////////////// INITIAL /////////////////////////////// */
* {
box-sizing: border-box;
}
body {
background-color: red;
text-align: center;
}
main {
display: inline-block;
width: 90%;
background-color: skyblue;
text-align: left;
}
main p {
margin: 0;
padding: 10px;
color: #bbb;
font-size: 0.9rem;
}
a {
color: #fff;
text-decoration: none;
}
a[href="#"] {
display: inline-block;
width: 25%;
margin: 2.2%;
background-color: #f1f1f1;
vertical-align: top;
}
img {
max-width:100%;
}
<html>
<body> <!-- red -->
<main> <!-- skyblue -->
<a href="#">
<div><img src="http://i.imgur.com/7WBWShL.jpg" alt=""></div>
<p>mmm random text caption.</p>
</a>
<a href="#">
<div><img src="http://i.imgur.com/7WBWShL.jpg" alt=""></div>
<p>Is that a sheep or a goat?</p>
</a>
<a href="#">
<div><img src="http://i.imgur.com/7WBWShL.jpg" alt=""></div>
<p>A ram maybe? Is that wood tiling behind it?</p>
</a>
<a href="#">
<div><img src="http://i.imgur.com/7WBWShL.jpg" alt=""></div>
<p>Definitly an animal on grass...on wood</p>
</a>
<a href="#">
<div><img src="http://i.imgur.com/7WBWShL.jpg" alt=""></div>
<p>Umm. k.</p>
</a>
</main>
</body>
</html>

enter image description here

编辑: 我认为它可能是 main { width: 90%; } 但这似乎迫使 main 占据 100% 的宽度。让问题变得更糟。

编辑 2:我可以使用 flexbox 或 floats,但我也很好奇这是标准的 inline-block 行为吗?通常(根据我的经验)inline-block 样式元素的宽度为 auto 并根据其内容的大小进行调整。不会比他们需要的更大。

最佳答案

每当 inline-block 的内容换行时,即使换行一次,它也会占据整个可用宽度。

至于期望的行为,我想您正在寻找这个:......?

* {
box-sizing: border-box;
}
body {
background-color: red;
text-align: center;
}
main {
display: inline-block;
margin: 5vw;
background-color: skyblue;
text-align: left;
padding: .8rem;
overflow: hidden;
}
main p {
margin: 0;
padding: 10px;
color: #bbb;
font-size: 0.9rem;
}
a {
color: #fff;
text-decoration: none;
}
a[href="#"] {
display: inline-block;
width: calc(33.3333% - 1.6rem);
margin: .8rem;
background-color: #f1f1f1;
vertical-align: top;
box-sizing: border-box;
float: left;
}
img {
max-width:100%;
}
<link href="https://necolas.github.io/normalize.css/latest/normalize.css" rel="stylesheet"/>
<main> <!-- skyblue -->
<a href="#">
<div><img src="http://i.imgur.com/7WBWShL.jpg" alt=""></div>
<p>mmm random text caption.</p>
</a>
<a href="#">
<div><img src="http://i.imgur.com/7WBWShL.jpg" alt=""></div>
<p>Is that a sheep or a goat?</p>
</a>
<a href="#">
<div><img src="http://i.imgur.com/7WBWShL.jpg" alt=""></div>
<p>A ram maybe? Is that wood tiling behind it?</p>
</a>
<a href="#">
<div><img src="http://i.imgur.com/7WBWShL.jpg" alt=""></div>
<p>Definitly an animal on grass...on wood</p>
</a>
<a href="#">
<div><img src="http://i.imgur.com/7WBWShL.jpg" alt=""></div>
<p>Umm. k.</p>
</a>
</main>


除了将边距从 % 更改为 rem 之外,我还对您的原始代码进行了另一项更改,您可能想了解原因:

通常,你会认为有

display:inline-block;
width:25%;
margin: 0;
box-sizing: border-box;

在 child 身上应该让他们换成 4 行,对吧?

但大多数情况下他们不会。原因如下:将它们想象成一行文本中的大字母。标记有换行符,元素放在下一行,以提高可读性。这些换行符和新行开头的制表符被浏览器缩减为单个 space 字符。而那些 space 字符不在 CSS 中。选项是:

a) 使用 html 注释 block 来抑制 inline-block 元素之间的空格:

<parent><!--
--><child></child><!--
--><child></child><!--
--><child></child><!--
--><child></child><!--
--><child></child><!--
--></parent>

这行得通,每行 4 个,不添加额外的空格。或者……

b) 在 child 身上使用float:left。如果您还希望父级扩展其高度(背景)以包含所有 float 的子级,您应该对其设置 overflow:hidden。这是我在上面的例子中使用的,也是 float 内联容器的典型解决方案。

关于html - 如何阻止内联 block 占用比子元素更多的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42045417/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com