次のような水平ナビゲーションバーがあります。
<ul id = "Navigation">
<li><a href = "About.html">About</a></li>
<li><a href = "Contact.html">Contact</a></li>
<!-- ... -->
</ul>
CSSを使用して箇条書きを削除し、水平にします。
#Navigation li
{
list-style-type: none;
display: inline;
}
各リンクがul
のスペース全体を埋めるように均等に広がるようにテキストを正当化しようとしています。 text: justify
をli
セレクターとul
セレクターの両方に追加しようとしましたが、それらはまだ左揃えです。
#Navigation
{
text-align: justify;
}
#Navigation li
{
list-style-type: none;
display: inline;
text-align: justify;
}
text-align: right
を使用すると、期待どおりに動作するため、これは奇妙です。
リンクを均等に広げるにはどうすればよいですか?
CSS3 flexboxes ができたので、これを機能させるためにトリックや回避策に頼る必要はなくなりました。幸いなことに、 ブラウザサポートは長い道のりを歩んできました で、私たちのほとんどはフレックスボックスの使用を開始できます。
親要素のdisplay
をflex
に設定してから、 _justify-content
_ property を _space-between
_ に変更するか、 _space-around
_ 子の間に/周りにスペースを追加するためにflexbox=アイテム。その後、ベンダーのプレフィックスを追加します ブラウザのサポートを追加 。
_justify-content: space-between
_の使用- (ここに例) :
_ul {
list-style: none;
padding: 0;
margin: 0;
}
.menu {
display: flex;
justify-content: space-between;
}
_
_<ul class="menu">
<li>About</li>
<li>Contact</li>
<li>Contact Longer Link</li>
<li>Contact</li>
</ul>
_
_justify-content: space-around
_の使用- (ここの例) :
_ul {
list-style: none;
padding: 0;
margin: 0;
}
.menu {
display: flex;
justify-content: space-around;
}
_
_<ul class="menu">
<li>About</li>
<li>Contact</li>
<li>Contact Longer Link</li>
<li>Contact</li>
</ul>
_
この作業を行うには、「トリック」を使用する必要があります。
HTML:
<ul id="Navigation">
<li><a href="About.html">About</a></li>
<li><a href="Contact.html">Contact</a></li>
<!-- ... -->
<li class="stretch"></li>
</ul>
CSS:
#Navigation
{
list-style-type: none;
text-align: justify;
height: 21px;
background: #ccc
}
#Navigation li
{
display: inline
}
#Navigation .stretch {
display: inline-block;
width: 100%;
/* if you need IE6/7 support */
*display: inline;
zoom: 1
}
IE6/7トリックの詳細: インラインブロックはInternet Explorer 7、6では機能しません
これは、ul
要素の擬似要素を使用しても実現できます。
ul {
margin: 0;
padding: 0;
list-style-type: none;
text-align: justify;
}
ul:after {
content: "";
width: 100%;
display: inline-block;
}
li {
display: inline;
}
ただやる:
ul { width:100%; }
ul li {
display:table-cell;
width:1%;
}
これはあなたのニーズに合うかもしれません:
#Navigation{
}
#Navigation li{
list-style-type: none;
text-align: center;
float: left;
width: 50%; /*if 2 <li> elements, 25% if 4...*/
}
HTML
<ul id="Navigation">
<li><a href="#">The Missing Link</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Riluri</a></li>
<li><a href="#">Contact us</a></li>
<!-- ... -->
<li class="stretch"></li>
</ul>
CSS
#Navigation {
list-style-type: none;
text-align: justify;
height: 21px;
background: #ccc
}
#Navigation li{
display: inline
}
#Navigation li a {
text-align: left;
display:inline-block;
}
#Navigation .stretch {
display: inline-block;
width: 100%;
/* if you need IE6/7 support */
*display: inline;
zoom: 1
}
<li>要素を分離する必要があります。そうしないと、正当化が機能しません。
For example, this:
<ul><li>test</li><li>test</li></ul>
needs to be like this:
<ul>
<li>test</li>
<li>test</li>
</ul>
または、少なくとも<li>タグの開始タグと終了タグの間にスペースが必要です。
空白が含まれている場合、マークされた回答は機能しません。
ここでの一番の答えは空白で動作します HTML + CSSで水平メニューを*本当に*正当化するにはどうすればいいですか?
このブログ には満足のいく堅牢なソリューションがあります。ただし、ul/li
ナビゲーションに対応するには若干の変更が必要です。
#Navigation {
width: 100%;
padding: 0;
text-align: justify;
font-size: 0;
font-size: 12px\9; /* IE 6-9 */
}
#Navigation>li {
font-size: 12px;
text-align: center;
display: inline-block;
zoom: 1;
*display: inline; /* IE only */
}
#Navigation:after {
content:"";
width: 100%;
display: inline-block;
zoom: 1;
*display: inline;
}