900 ピクセルのコンテナーに 6 つのナビゲーション項目を均等に配置し、項目間に均等な空白を配置したいと思います。たとえば...
---| 900px Container |---
---| HOME ABOUT BASIC SERVICES SPECIALTY SERVICES OUR STAFF CONTACT US |---
現時点では、これを行うための最良の方法は次のとおりです。
nav ul {
width: 900px;
margin: 0 auto;
}
nav li {
line-height: 87px;
float: left;
text-align: center;
width: 150px;
}
これには 2 つの問題があります。まず、これは実際には正当化されておらず、li タグが ul タグ全体に均等に分散されているため、「HOME」や「ABOUT」などの小さなメニュー項目と「BASIC SERVICES」などの大きなメニュー項目の間に不均一な空白が作成されます。
2 番目の問題は、ナビゲーション項目が 150 ピクセルより大きい場合 (SPECIALTY SERVICES の場合がこれに該当)、ナビゲーション全体に十分なスペースがあるにもかかわらず、レイアウトが崩れてしまうことです。
どなたかこの問題を解決していただけませんか? 解決策を Web で探しましたが、どれも不十分なようです。可能であれば CSS / HTML のみ...
ありがとう!
更新(2013年7月29日):テーブルセルを使用するのがこのレイアウトを実装する最も現代的な方法です。以下のフェリックスの回答を参照してください。table cell
プロパティ94%のブラウザで動作します現時点では、IE7 以下については何らかの対策を講じる必要がありますが、それ以外は問題ないはずです。
更新 (2013 年 7 月 30 日): 残念ながら、このレイアウトをメディア クエリと組み合わせる場合、これに影響を与える Webkit のバグがあります。現時点では、「display」プロパティの変更は避ける必要があります。Webkit のバグを参照してください。
更新 (2014 年 7 月 25 日): この問題に対するよりよい解決策として、text-align: justify を使用する方法があります。これを使用すると簡単になり、Webkit のバグを回避できます。
ベストアンサー1
アイテムを均等に分散する最新の方法は、コンテナ要素に次の 2 つの宣言を設定することです。
.container {
display: flex; /* (1) */
justify-content: space-between; /* (2) or space-around or space-evenly */
}
使用する値は、justify-content
どのような均等配分が必要かによって異なります。
見る翻訳
ul {
list-style: none;
padding: 0;
width: 90vw;
border: 3px solid gold;
display: flex;
}
a {
background: gold;
}
ul {
justify-content: space-between;
}
ul ~ ul {
justify-content: space-around;
}
ul ~ ul ~ ul {
justify-content: space-evenly;
}
<h3>justify-content: space-between; </h3>
<ul id="nav">
<li><a href="#">HOME</a></li>
<li><a href="#">ABOUT</a></li>
<li><a href="#">BASIC SERVICES</a></li>
<li><a href="#">OUR STAFF</a></li>
<li><a href="#">CONTACT US</a></li>
</ul>
<div>Distributes items evenly. The first item is flush with the start, the last is flush with the end </div>
<hr>
<h3>justify-content: space-around;</h3>
<ul id="nav">
<li><a href="#">HOME</a></li>
<li><a href="#">ABOUT</a></li>
<li><a href="#">BASIC SERVICES</a></li>
<li><a href="#">OUR STAFF</a></li>
<li><a href="#">CONTACT US</a></li>
</ul>
<div>Distribute items evenly. Items have a half-size space on either end</div>
<hr>
<h3>justify-content: space-evenly;</h3>
<ul id="nav">
<li><a href="#">HOME</a></li>
<li><a href="#">ABOUT</a></li>
<li><a href="#">BASIC SERVICES</a></li>
<li><a href="#">OUR STAFF</a></li>
<li><a href="#">CONTACT US</a></li>
</ul>
<div>Distribute items evenly. Items have equal space around them</div>
<hr>
これが私の元の答えです - 何らかの理由でフレックスコンテナの使用が実行できない場合
text-align:justify
コンテナで使用すると、リストにいくつの要素があっても機能します(各リスト項目の%幅を計算する必要はありません)。
#nav {
text-align: justify;
min-width: 500px;
}
#nav:after {
content: '';
display: inline-block;
width: 100%;
}
#nav li {
display: inline-block;
}
<ul id="nav">
<li><a href="#">HOME</a></li>
<li><a href="#">ABOUT</a></li>
<li><a href="#">BASIC SERVICES</a></li>
<li><a href="#">OUR STAFF</a></li>
<li><a href="#">CONTACT US</a></li>
</ul>