このフィドルdiv
は、「問題」と次の「解決策」の両方を示す3つの要素を示しています。
1つの可能な「解決策」
あなたのニーズはわかりませんが、これまでのところ、私が見つけた唯一の本当の解決策は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の疑似要素に精通していないと述べているので、簡単な紹介が必要になる場合があります。