我使用HTML和CSS编写类似卡片的按钮。
出于某种原因,图片下方文字的width
始终超出了父div
的边缘。
我可以调整以使其在桌面上观看时相对不明显,但在移动设备上观看时会变得非常痛苦。
.card {
width: 20%;
box-shadow: 0px 0px 10px gray;
}
.card:hover {
box-shadow: 0px 0px 20px black;
}
.card-img {
width: 100%;
}
.card-title {
margin: 10px;
display: inline-block;
font-family: Open Sans;
text-align: center;
width: 100%;
}

<div class="card">
<img class="card-img" src="http://prww-weather.com/logo.png" />
<p class="card-title">Card Title</p>
</div>
&#13;
有谁知道为什么card-title
超出了card
的边缘以及我如何解决它?
我认为这与分配给inline-block
课程的card-title
有关,但如果我不包括margin
card-title
card-img
}和{{1}}崩溃。
答案 0 :(得分:3)
你可以试试这个:
https://jsfiddle.net/nbLLgx5x/
.card {
width: 20%;
box-shadow: 0px 0px 10px gray;
}
.card:hover {
box-shadow: 0px 0px 20px black;
}
.card-img {
width: 100%;
display: block;
}
.card-title {
padding: 10px;
font-family: Open Sans;
text-align: center;
margin: 0;
}
<div class="card">
<img class="card-img" src="http://prww-weather.com/logo.png" />
<p class="card-title">This is a very long card title</p>
</div>
答案 1 :(得分:2)
这完全归功于保证金:你为卡片名称分配的10px。这将消耗100%父宽度+ 10px左侧和10px右侧
要在卡片标题周围留出一个装订线空间并将其约束在父级边界内,请使用padding:10px
作为卡片标题,
并在所有元素上启用box-sizing: border-box;
属性。 (border-box将允许填充,边框被视为元素宽度本身的一部分)
* {
box-sizing: border-box;
}
.card {
width: 20%;
box-shadow: 0px 0px 10px gray;
}
.card:hover {
box-shadow: 0px 0px 20px black;
}
.card-img {
width: 100%;
}
.card-title {
padding: 10px;
display: inline-block;
font-family: Open Sans;
text-align: center;
width: 100%;
}
<div class="card">
<img class="card-img" src="http://prww-weather.com/logo.png" />
<p class="card-title">Card Title</p>
</div>
答案 2 :(得分:1)
使用padding
和border-box
.card {
width: 20%;
box-shadow: 0px 0px 10px gray;
}
.card:hover {
box-shadow: 0px 0px 20px black;
}
.card-img {
width: 100%;
}
.card-title {
margin: 0;
padding: 10px 0;
display: inline-block;
font-family: Open Sans;
text-align: center;
width: 100%;
box-sizing: border-box;
}
<div class="card">
<img class="card-img" src="http://prww-weather.com/logo.png" />
<p class="card-title">Card Title</p>
</div>
答案 3 :(得分:1)
那是因为您在使用margin
padding
(margin
s用于外部空间,padding
用于内部空间,因此您的.card-title
是一个孩子,并且您希望它周围有一些空间,但不超过父级,padding
救援)。
但由于您现在正在使用padding
,因此您需要box-sizing
才能获得有关width
的{{1}}计算权利。
此外,您可能需要在box-model
中设置display:block
以消除差距。
img
&#13;
*,
*::before,
*::after {
box-sizing: border-box
}
.card {
width: 20%;
box-shadow: 0px 0px 10px gray;
}
.card:hover {
box-shadow: 0px 0px 20px black;
}
.card-img {
width: 100%;
display:block
}
.card-title {
padding:5px 10px;
display: inline-block;
font-family: Open Sans;
text-align: center;
width: 100%;
margin:0;
border:1px solid red
}
&#13;
答案 4 :(得分:1)
此处的问题是width: 100%;
和margin: 10px;
简单地说,你的卡片标题会占用你卡片的宽度,并且还会有你边距的额外宽度(这里2 * 10 = 20px),这最终会更宽因此,您的文本将以卡片标题为中心,但卡片标题本身将在此处向右移动10px。
所以在这里你应该使用填充而不是边距。快速提醒这些2如何工作(感谢John Boker's answer):
边距在块元素的外部,而填充在内部。
以下是从https://www.impressivewebs.com/width-100-percent-css/解释得很好的图片: