CSS - 填充(或边距)不调整容器大小
CSS - padding (or margin) not resizing the container
感谢您花时间阅读本文。
我正在尝试使用 CSS 进行一些简单的布局,其中我有一个容器 div,并且两个 children 使用 inline-block 并排设置:
<div class="info-window">
<img class="image" src="myURL"/>
<div class=description">some content</div>
</div>
在 CSS 中,我设置了我的容器高度,自动调整图像大小,使其高度为 100% 并保持比例,并且我没有为描述指定任何大小(我希望它将由它的内容)。
.info-window .image {
display: inline-block;
vertical-align: top;
height: 100%;
width: auto;
}
.info-window .description {
display: inline-block;
vertical-align: top;
}
这工作得很好,直到我尝试在两个元素之间添加一些填充或边距。示例:在描述中添加padding-left,即右侧的项目。请注意,行为与图像上的 padding-ight 或边距相同。
.info-window .description {
display: inline-block;
vertical-align: top;
padding-left: 5%;
}
当我这样做时,容器的大小不适合其 children 的总宽度。看起来大小是在添加填充之前计算出来的。
您可以在此处查看 fiddle:https://jsfiddle.net/tot22292/
看右边的文字是怎么裁剪的。
我确实搜索了一些修复程序,但是 box-sizing:border-box;在描述的总大小中包含填充和边框并不能解决问题。
我可能错过了一些简单的东西,但这让我发疯了,所以我来了:)
谢谢!
您可以将 width
元素更改为基于百分比而不是 auto
,并使用基于像素的填充而不是使用百分比。
.info-window .image {
display: inline-block;
vertical-align: top;
width:50%;
height: auto;
}
.info-window .description {
display: inline-block;
vertical-align: top;
width:50%;
padding-left: 10px;
}
Fiddle: https://jsfiddle.net/wrt9v9xs/2/
(决定把这个做成答案。希望有人可以填写 "why" 浏览器如何确定填充。)
我没有任何规格的 link 但这绝对是因为填充是百分比值。这也是有道理的。填充或边距的百分比值是相对于父级宽度的。如果样式的行为符合您的预期,则它必然会更改父宽度。
基本上,对于您当前的代码,填充会影响宽度,而宽度会影响填充。为了解决这个问题,浏览器的渲染引擎似乎只使用预填充的宽度来避免无限循环。 "solution" 将使用静态填充值而不是百分比。
.info-window {
display: inline-block;
white-space: nowrap;
overflow-x: hidden;
}
.info-window .image {
display: inline-block;
vertical-align: top;
height: 100%;
width: auto;
}
.info-window .description {
display: inline-block;
vertical-align: top;
padding-left: 2em;
}
.info-window .title {
font-size: 24px;
font-weight: bold;
color: #000;
white-space: nowrap;
}
<div id="test" style="height:150px;">
<div class="info-window">
<img class="image" src="//placehold.it/312" />
<div class="description">
<span class="title">Some text</span>
<br/> 5
</div>
</div>
</div>
编辑:
好的,这是规范中解决的地方。
If the containing block's width depends on this element, then the resulting layout is undefined in CSS 2.1.
值未定义意味着它取决于渲染引擎,因此听起来 chrome 至少只是决定使用值的预填充宽度进行故障转移。
感谢您花时间阅读本文。
我正在尝试使用 CSS 进行一些简单的布局,其中我有一个容器 div,并且两个 children 使用 inline-block 并排设置:
<div class="info-window">
<img class="image" src="myURL"/>
<div class=description">some content</div>
</div>
在 CSS 中,我设置了我的容器高度,自动调整图像大小,使其高度为 100% 并保持比例,并且我没有为描述指定任何大小(我希望它将由它的内容)。
.info-window .image {
display: inline-block;
vertical-align: top;
height: 100%;
width: auto;
}
.info-window .description {
display: inline-block;
vertical-align: top;
}
这工作得很好,直到我尝试在两个元素之间添加一些填充或边距。示例:在描述中添加padding-left,即右侧的项目。请注意,行为与图像上的 padding-ight 或边距相同。
.info-window .description {
display: inline-block;
vertical-align: top;
padding-left: 5%;
}
当我这样做时,容器的大小不适合其 children 的总宽度。看起来大小是在添加填充之前计算出来的。
您可以在此处查看 fiddle:https://jsfiddle.net/tot22292/ 看右边的文字是怎么裁剪的。
我确实搜索了一些修复程序,但是 box-sizing:border-box;在描述的总大小中包含填充和边框并不能解决问题。
我可能错过了一些简单的东西,但这让我发疯了,所以我来了:)
谢谢!
您可以将 width
元素更改为基于百分比而不是 auto
,并使用基于像素的填充而不是使用百分比。
.info-window .image {
display: inline-block;
vertical-align: top;
width:50%;
height: auto;
}
.info-window .description {
display: inline-block;
vertical-align: top;
width:50%;
padding-left: 10px;
}
Fiddle: https://jsfiddle.net/wrt9v9xs/2/
(决定把这个做成答案。希望有人可以填写 "why" 浏览器如何确定填充。)
我没有任何规格的 link 但这绝对是因为填充是百分比值。这也是有道理的。填充或边距的百分比值是相对于父级宽度的。如果样式的行为符合您的预期,则它必然会更改父宽度。
基本上,对于您当前的代码,填充会影响宽度,而宽度会影响填充。为了解决这个问题,浏览器的渲染引擎似乎只使用预填充的宽度来避免无限循环。 "solution" 将使用静态填充值而不是百分比。
.info-window {
display: inline-block;
white-space: nowrap;
overflow-x: hidden;
}
.info-window .image {
display: inline-block;
vertical-align: top;
height: 100%;
width: auto;
}
.info-window .description {
display: inline-block;
vertical-align: top;
padding-left: 2em;
}
.info-window .title {
font-size: 24px;
font-weight: bold;
color: #000;
white-space: nowrap;
}
<div id="test" style="height:150px;">
<div class="info-window">
<img class="image" src="//placehold.it/312" />
<div class="description">
<span class="title">Some text</span>
<br/> 5
</div>
</div>
</div>
编辑:
好的,这是规范中解决的地方。
If the containing block's width depends on this element, then the resulting layout is undefined in CSS 2.1.
值未定义意味着它取决于渲染引擎,因此听起来 chrome 至少只是决定使用值的预填充宽度进行故障转移。