💻
[Bootstrap] container-fluidの中にcontainerを配置する
なぜそんなことをしたいのか
- twigを使っていて、ベーステンプレート側に
container-fluidが書かれている - 子テンプレート側にパンくずリストとフォームがあって、パンくずリストは
container-fluidサイズで表示したいけど、フォームはcontainerサイズで表示したい- なぜなら、Bootstrapのグリッドシステムで最大のグリッドポイント(
xl)が1200pxと小さいので、iMac Retinaのように馬鹿でかい画面サイズまで考慮するとなるとグリッドではいい感じにレイアウトできないので
- なぜなら、Bootstrapのグリッドシステムで最大のグリッドポイント(
みたいな状況があって、 container-fluid の中で container を使っていい感じに表示したくなったので、そのマークアップの方法をメモ代わりに書いておこうという記事です😅
具体例
例えばこんなコードを考えます。
{# base.html.twig #}
<body>
<nav class="navbar navbar-light bg-light">
<div class="container-fluid">
<strong class="navbar-brand">Site name</strong>
</div>
</nav>
<div class="container-fluid">
{% block content %}
{% endblock %}
</div>
</body>
{# page.html.twig #}
{% extends 'base.html.twig' %}
{% block subtitle %}Edit some data{% endblock %}
{% block content %}
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="">Home</a></li>
<li class="breadcrumb-item"><a href="">Some data</a></li>
<li class="breadcrumb-item active">Edit</li>
</ol>
</nav>
<div class="form-group row">
<label class="col-form-label col-sm-3">Name</label>
<div class="col-sm-9">
<input type="text" name="name" class="form-control" value="Alice">
</div>
</div>
<div class="form-group row">
<label class="col-form-label col-sm-3">Email</label>
<div class="col-sm-9">
<input type="email" name="email" class="form-control" value="alice@example.com">
</div>
</div>
<div class="form-group row">
<div class="col-sm-9 offset-sm-3">
<button type="submit" class="btn btn-primary">Save</button>
</div>
</div>
{% endblock %}
これだと、iMac Retina( 2880 x 1620 )の画面で見ると、

こんな感じで、フォームが「さすがに横に長すぎやろ…」というサイズ感になってしまいます。
これを、

こんなふうに、どんな画面サイズでもいい感じに表示されるようにしたかったということです。
結論
結論としてはめちゃくちゃ簡単で、フォーム部分を以下のような div で囲うだけです。
+ <div class="container-lg ml-0 px-0">
<div class="form-group row">
<label class="col-form-label col-sm-3">Name</label>
<div class="col-sm-9">
<input type="text" name="name" class="form-control" value="Alice">
</div>
</div>
<div class="form-group row">
<label class="col-form-label col-sm-3">Email</label>
<div class="col-sm-9">
<input type="email" name="email" class="form-control" value="alice@example.com">
</div>
</div>
<div class="form-group row">
<div class="col-sm-9 offset-sm-3">
<button type="submit" class="btn btn-primary">Save</button>
</div>
</div>
+ </div>
-
lg以上の画面サイズに対してcontainerを適用し、 -
containerのデフォルトの挙動である画面中央寄せではなく左寄せにするためにml-0をセットし、 -
container-fluidの中でcontainerを使ってしまっているせいで左右に余計なパディングが取られてしまうので、px-0でそれを消す
としているだけです。
まとめ
- Bootstrapで
container-fluidの中にcontainerを配置したくなったらこの記事を思い出してください😇
Discussion