[解決済み] フレックスボックスが要素に等しい幅を与えない
質問
最大5項目、最小3項目のフレックスボックスナビゲーションを試みているが、すべての要素で幅が均等に分割されない。
フィドル
このチュートリアルのモデルになっているのは http://www.sitepoint.com/responsive-fluid-width-variable-item-navigation-css/
SASS
* {
font-size: 16px;
}
.tabs {
max-width: 1010px;
width: 100%;
height: 5rem;
border-bottom: solid 1px grey;
margin: 0 0 0 6.5rem;
display: table;
table-layout: fixed;
}
.tabs ul {
margin: 0;
display: flex;
flex-direction: row;
}
.tabs ul li {
flex-grow: 1;
list-style: none;
text-align: center;
font-size: 1.313rem;
background: blue;
color: white;
height: inherit;
left: auto;
vertical-align: top;
text-align: left;
padding: 20px 20px 20px 70px;
border-top-left-radius: 20px;
border: solid 1px blue;
cursor: pointer;
}
.tabs ul li.active {
background: white;
color: blue;
}
.tabs ul li:before {
content: "";
}
<div class="tabs">
<ul>
<li class="active" data-tab="1">Pizza</li>
<li data-tab="2">Chicken Noodle Soup</li>
<li data-tab="3">Peanut Butter</li>
<li data-tab="4">Fish</li>
</ul>
</div>
解決方法は?
リンク先の記事には書かれていない重要な部分があり、それは
flex-basis
. デフォルトでは
flex-basis
は
auto
.
から 仕様書 :
flex-basis が auto の場合、使用される flex basis はフレックスアイテムの main size 特性の値である。(これはそれ自体がキーワード auto である場合もあり、フレックスアイテムの内容に基づいてサイズを決定します)。
各フレックスアイテムには
flex-basis
これは初期サイズのようなものです。 そして、そこから残りの空きスペースは、比例配分されます。
flex-grow
というように とは
auto
の場合、その基準はコンテンツサイズ(または、定義されたサイズ)です。
width
など)。 その結果、あなたの例では、中のテキストが大きい項目は、全体としてより多くのスペースが与えられています。
要素を完全に均等にしたい場合は
flex-basis: 0
. これはフレックスの基底を0に設定し、残りのスペース(すべての基底が0なのですべてのスペースとなります)は、以下の基準で比例配分されます。
flex-grow
.
li {
flex-grow: 1;
flex-basis: 0;
/* ... */
}
この図は仕様書から は、この点をかなりうまく説明しています。
そして 以下は動作例です。 をあなたのフィドルで演奏してください。
関連
-
[解決済み] divをクリックすると、その下にある要素に移動します。
-
[解決済み] セレクトボックスのプレースホルダーを作成するにはどうすればよいですか?
-
[解決済み] コンテナの幅に応じたフォントの拡大縮小
-
[解決済み] inline/inline-block要素間のスペースを削除するにはどうすればよいですか?
-
[解決済み] フレックスボックスのアイテム間の距離を設定するためのより良い方法
-
[解決済み] CSS Flexboxで、"justify-items "と "justify-self "プロパティはなぜないのですか?
-
[解決済み] Flexbox:水平方向と垂直方向の中央揃え
-
[解決済み] preタグでテキストを折り返すにはどうしたらよいですか?
-
[解決済み] HTMLのid属性とname属性の違い
-
[解決済み】フレックスボックスで要素を最下段に揃える
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 要素を水平方向にセンタリングする方法
-
[解決済み] CSSでcellpaddingとcellspacingを設定する?
-
[解決済み] CSSでテキストを垂直方向にセンタリングするには?[重複しています]
-
[解決済み] <button> vs. <input type="button" />. Which to use?
-
[解決済み] divの中のテキストを縦に揃えるにはどうしたらいいですか?
-
[解決済み] CSSコンテンツによるHTMLエンティティの追加
-
[解決済み] ボディの高さをブラウザの高さの100%にする
-
[解決済み] HTMLアンカーは'name'と'id'のどちらで作成するのが良いですか?
-
[解決済み] 静的な HTML ページにファビコンを追加する
-
[解決済み] 検索エンジンはAngularJSアプリケーションをどのように扱っているのか?