这个小提琴显示了三个div
元素,说明了“问题”和以下两个“解决方案”。
一种可能的“解决方案”
我不确定您的需求,但到目前为止,我发现的唯一真正的解决方案是设置display: table
您的文本容器。但这将允许容器拉伸到所需的宽度以包含最长的单词,这对您来说可能并不理想。如果没问题,那是最好的解决方案。
另一种可能的“伪造”解决方案
如果您必须至少保持元素的外观大小,那么您可以通过一些创造性的伪元素使用来伪造外观:
.fakeIt {
text-align: center; /* what you wanted all along */
display: table; /* key to get centered */
position: relative; /* allow reference for absolute element */
z-index: 2; /* set up for a background to be pushed below */
width: 40px; /* what you want, but table resizes larger if needed*/
border: none; /* transferring border to the "fake" */
background-color: transparent; /* transferring background to the "fake" */
}
.fakeIt:after {
content: ''; /* before or after need it, even if empty */
width: 40px; /* the original width you wanted for the container */
position: absolute; /* need this to position it */
z-index: -1; /* push it behind the foreground */
left: 50%; /* push it to center */
top:0; /* give it height */
bottom: 0; /* give it height */
margin-left: -20px; /* half the width to finish centering */
border: 1px solid red; /* the border you wanted on the container */
background-color: yellow; /* the background you wanted on the container */
}
但是,根据您的特定应用程序,“伪造”解决方案可能不起作用。此外,原始元素仍将占据文档中更宽的“空间”,只是看起来不像。这可能会导致问题。容器上的负数margin
可以解决这个问题,但您不知道需要设置什么值,因为它会因文本宽度而异。
您在评论中提到您不熟悉 css 中的伪元素,因此您可能想要快速介绍一下。