将未知宽度的元素放在居中元素的右侧而不移动它
Placing an unknown width element on the right of a centered element without moving it
我有一个以 text-align: center;
为中心的文本元素,我想在它的右侧放置另一个元素(一个小内联 <span>
)而不影响它的位置。
两个元素(尤其是 span
)都没有已知大小,因此我无法在文本元素左侧使用偏移边距。有没有办法在纯 CSS 中做到这一点?
无效的强制性代码:
<div style="text-align: center;">
<h3 id="centered-text">My centered text</h3>
<span class="to-the-right" style="background-color: blue;">BADGE</span>
</div>
如果可以将 h3
和 span
放入包装器中,则可以使该包装器居中,并使用绝对定位将 span 定位在包装器外部。
如果 h3 是整个页面宽度(span 将在可见区域之外),或者如果 span 包含更长的文本(它可能会笨拙地换行),这可能有点棘手。然而,这只是一个开始,这些问题对您来说可能不是问题。
.wrapper {
display: inline-block;
position: relative;
}
h3 {
display: inline-block;
margin: 0;
}
.wrapper span {
display: block;
position: absolute;
left: 100%;
top: 0;
}
<div style="text-align: center;">
<div class="wrapper">
<h3 id="centered-text">My centered text</h3>
<span class="to-the-right" style="background-color: blue;">BADGE</span>
</div>
</div>
您的 css 已关闭。给你的div一个id然后
#divid {margin-left:auto; margin-right:auto; width:100%;}
h3 {text-align:center;}
#centered-text {
display: inline-block;
}
#to-the-right {
display: inline-block;
position: absolute;
margin-left: 4px;
}
<div style="text-align: center;">
<div id="centered-text">My centered text</div>
<div id="to-the-right" style="background-color: blue;">BADGE</div>
</div>
我让你的 H3 不是 H3,因为它使 BADGE 看起来奇怪地高于标题,但这可以通过给 BADGE 一个像 "top: 10px;"
这样的属性来轻松纠正
一种不使用定位的方法是使用 display: flex
和一个伪元素。我个人认为 更好,但如果您想远离定位,那么这也可以解决问题。
span {
background: blue;
}
div {
display: flex;
justify-content: center;
}
div:before, span {
content: "";
flex: 1 1;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
<div>
<h3>My Centered Text</h3>
<span>BADGE</span>
</div>
这确实有一些问题,根据您的需要,这些问题可能重要也可能不重要。如果 div 中需要任何其他元素,则需要进行一些重新配置,因为任何新元素也会变成 flex-items 并弄乱 h3
.
的居中
此外,您可能会注意到跨度现在延伸到 div 的边缘。如果这不是问题,那么标记就可以了,但如果是问题,则将其包装在另一个元素中也可以解决此问题,如下所示:
span {
background: blue;
}
.container {
display: flex;
justify-content: center;
margin-bottom: 5%;
}
.container:before,
.badge {
content: "";
flex: 1 1;
}
* {
margin: 0;
padding: 0;
}
<div class="container">
<h3>My Centered Text</h3>
<div class="badge"><span>BADGE</span></div>
</div>
它并不完美,正如我所说,我更喜欢 ,但如果您想远离定位,那么我认为这是一个不错的选择。
我有一个以 text-align: center;
为中心的文本元素,我想在它的右侧放置另一个元素(一个小内联 <span>
)而不影响它的位置。
两个元素(尤其是 span
)都没有已知大小,因此我无法在文本元素左侧使用偏移边距。有没有办法在纯 CSS 中做到这一点?
无效的强制性代码:
<div style="text-align: center;">
<h3 id="centered-text">My centered text</h3>
<span class="to-the-right" style="background-color: blue;">BADGE</span>
</div>
如果可以将 h3
和 span
放入包装器中,则可以使该包装器居中,并使用绝对定位将 span 定位在包装器外部。
如果 h3 是整个页面宽度(span 将在可见区域之外),或者如果 span 包含更长的文本(它可能会笨拙地换行),这可能有点棘手。然而,这只是一个开始,这些问题对您来说可能不是问题。
.wrapper {
display: inline-block;
position: relative;
}
h3 {
display: inline-block;
margin: 0;
}
.wrapper span {
display: block;
position: absolute;
left: 100%;
top: 0;
}
<div style="text-align: center;">
<div class="wrapper">
<h3 id="centered-text">My centered text</h3>
<span class="to-the-right" style="background-color: blue;">BADGE</span>
</div>
</div>
您的 css 已关闭。给你的div一个id然后
#divid {margin-left:auto; margin-right:auto; width:100%;}
h3 {text-align:center;}
#centered-text {
display: inline-block;
}
#to-the-right {
display: inline-block;
position: absolute;
margin-left: 4px;
}
<div style="text-align: center;">
<div id="centered-text">My centered text</div>
<div id="to-the-right" style="background-color: blue;">BADGE</div>
</div>
我让你的 H3 不是 H3,因为它使 BADGE 看起来奇怪地高于标题,但这可以通过给 BADGE 一个像 "top: 10px;"
这样的属性来轻松纠正一种不使用定位的方法是使用 display: flex
和一个伪元素。我个人认为
span {
background: blue;
}
div {
display: flex;
justify-content: center;
}
div:before, span {
content: "";
flex: 1 1;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
<div>
<h3>My Centered Text</h3>
<span>BADGE</span>
</div>
这确实有一些问题,根据您的需要,这些问题可能重要也可能不重要。如果 div 中需要任何其他元素,则需要进行一些重新配置,因为任何新元素也会变成 flex-items 并弄乱 h3
.
此外,您可能会注意到跨度现在延伸到 div 的边缘。如果这不是问题,那么标记就可以了,但如果是问题,则将其包装在另一个元素中也可以解决此问题,如下所示:
span {
background: blue;
}
.container {
display: flex;
justify-content: center;
margin-bottom: 5%;
}
.container:before,
.badge {
content: "";
flex: 1 1;
}
* {
margin: 0;
padding: 0;
}
<div class="container">
<h3>My Centered Text</h3>
<div class="badge"><span>BADGE</span></div>
</div>
它并不完美,正如我所说,我更喜欢