コンテナdivの内側に3つのdivを配置したいのですが、これは次のようなものです。
[[LEFT] [CENTER] [RIGHT]]
コンテナdivは100%幅(設定幅なし)で、コンテナdivのサイズを変更した後も中央divは中央に留まるはずです。
だから私は設定:
#container{width:100%;}
#left{float:left;width:100px;}
#right{float:right;width:100px;}
#center{margin:0 auto;width:100px;}
しかしそれはなります:
[[LEFT] [CENTER] ]
[RIGHT]
任意のヒント?
HTML構造を変更したくない場合は、ラッパー要素にtext-align: center;
を、中央揃え要素にdisplay: inline-block;
を追加することによっても変更できます。
#container {
width:100%;
text-align:center;
}
#left {
float:left;
width:100px;
}
#center {
display: inline-block;
margin:0 auto;
width:100px;
}
#right {
float:right;
width:100px;
}
ライブデモ: http://jsfiddle.net/CH9K8/ /
これはdivを他のdivの内側に水平に揃えるためのCSS3メソッドです。
#container {
display: flex; /* establish flex container */
flex-direction: row; /* default value; can be omitted */
flex-wrap: nowrap; /* default value; can be omitted */
justify-content: space-between; /* switched from default (flex-start, see below) */
background-color: lightyellow;
}
#container > div {
width: 100px;
height: 100px;
border: 2px dashed red;
}
<div id="container">
<div></div>
<div></div>
<div></div>
</div>
justify-content
プロパティは5つの値を取ります。
flex-start
(デフォルト)flex-end
center
space-between
space-around
すべての場合において、3つのdivは同じ行にあります。各値の説明については、以下を参照してください。 https://stackoverflow.com/a/33856609/3597276
flexboxの利点:
flexboxの詳細については、以下をご覧ください。
ブラウザのサポート:Flexboxはすべての主要ブラウザでサポートされています IE <10を除く 。 Safari 8やIE 10などの最近のブラウザのバージョンには、 ベンダープレフィックス が必要です。簡単にプレフィックスを追加するには、 Autoprefixer を使用してください。詳細は この答え にあります。
Floatプロパティは、実際にはテキストの位置合わせには使用されません。
このプロパティは、要素を右または左または中央に追加するために使用されます。
div > div { border: 1px solid black;}
<html>
<div>
<div style="float:left">First</div>
<div style="float:left">Second</div>
<div style="float:left">Third</div>
<div style="float:right">First</div>
<div style="float:right">Second</div>
<div style="float:right">Third</div>
</div>
</html>
float:left
の出力は[First][second][Third]
になります
float:right
の出力は[Third][Second][First]
になります
つまり、float => leftプロパティは、前の要素の左に次の要素を追加します。rightと同じ場合
また、親要素の幅を考慮する必要があります。子要素の幅の合計が親要素の幅を超える場合は、次の要素が次の行に追加されます。
<html>
<div style="width:100%">
<div style="float:left;width:50%">First</div>
<div style="float:left;width:50%">Second</div>
<div style="float:left;width:50%">Third</div>
</div>
</html>
[最初] [二番目]
[三番]
だからあなたは完璧な結果を得るためにこれらすべての側面を考慮する必要があります
私はバーがタイトでダイナミックなのが好きです。これはCSS 3とHTML 5のためのものです
まず、幅を100ピクセルに設定することは制限的です。しないでください。
次に、コンテナの幅を100%に設定しても、ナビゲーションやクレジット/著作権バーのように、アプリ全体のヘッダー/フッターバーであることが説明されるまでは問題ありません。そのシナリオでは代わりにright: 0;
を使用してください。
クラス(#container
、#left
など)の代わりにid(hash .container
、.left
など)を使用しているので、コード内の他の場所でスタイルパターンを繰り返したくない場合は問題ありません。代わりにクラスを使うことを考えます。
HTMLの場合、left、center、&rightの順番を入れ替える必要はありません。 display: inline-block;
はこれを修正し、あなたのコードをきれいで論理的に正しい順序に戻します。
最後に、将来の<div>
で混乱しないように、フロートをすべてクリアする必要があります。あなたはclear: both;
でこれを行います
要約する:
HTML:
<div class="container">
<div class="left"></div>
<div class="center"></div>
<div class="right"></div>
<div class="clear"></div>
</div>
CSS:
.container {right: 0; text-align: center;}
.container .left, .container .center, .container .right { display: inline-block; }
.container .left { float: left; }
.container .center { margin: 0 auto; }
.container .right { float: right; }
.clear { clear: both; }
HAMLとSASSを使用する場合のボーナスポイント
HAML:
.container
.left
.center
.right
.clear
SASS:
.container {
right: 0;
text-align: center;
.left, .center, .right { display: inline-block; }
.left { float: left; }
.center { margin: 0 auto; }
.right { float: right; }
.clear { clear: both; }
}
要素を整列させるために利用できるいくつかのトリックがあります。
01.テーブルトリックを使う
.container{
display:table;
}
.left{
background:green;
display:table-cell;
width:33.33vw;
}
.center{
background:gold;
display:table-cell;
width:33.33vw;
}
.right{
background:gray;
display:table-cell;
width:33.33vw;
}
<div class="container">
<div class="left">
Left
</div>
<div class="center">
Center
</div>
<div class="right">
Right
</div>
</div>
02.フレックストリックの使い方
.container{
display:flex;
justify-content: center;
align-items: center;
}
.left{
background:green;
width:33.33vw;
}
.center{
background:gold;
width:33.33vw;
}
.right{
background:gray;
width:33.33vw;
}
<div class="container">
<div class="left">
Left
</div>
<div class="center">
Center
</div>
<div class="right">
Right
</div>
</div>
03.フロートトリックを使う
.left{
background:green;
width:100px;
float:left;
}
.center{
background:gold;
width:100px;
float:left;
}
.right{
background:gray;
width:100px;
float:left;
}
<div class="container">
<div class="left">
Left
</div>
<div class="center">
Center
</div>
<div class="right">
Right
</div>
</div>
これは、CSS3 Flexboxを使って簡単に行うことができます。これは、将来的に(<IE9
が完全になくなったときに)使用される機能です。ほとんどすべてのブラウザで使用できます。
_ html _
<div class="container">
<div class="left">
Left
</div>
<div class="center">
Center
</div>
<div class="right">
Right
</div>
</div>
_ css _
.container {
display: flex;
flex-flow: row nowrap; /* Align on the same line */
justify-content: space-between; /* Equal margin between the child elements */
}
出力:
.container {
display: flex;
flex-flow: row nowrap; /* Align on the same line */
justify-content: space-between; /* Equal margin between the child elements */
}
/* For Presentation, not needed */
.container > div {
background: #5F85DB;
padding: 5px;
color: #fff;
font-weight: bold;
font-family: Tahoma;
}
<div class="container">
<div class="left">
Left
</div>
<div class="center">
Center
</div>
<div class="right">
Right
</div>
</div>
Twitterのブートストラップでは:
<p class="pull-left">Left aligned text.</p>
<p class="pull-right">Right aligned text.</p>
<p class="text-center">Center aligned text.</p>
あなたがHTMLの順序を保ちたいがflexを使わないのなら、可能な答え。
HTML
<div class="a">
<div class="c">
the
</div>
<div class="c e">
jai ho
</div>
<div class="c d">
watsup
</div>
</div>
CSS
.a {
width: 500px;
margin: 0 auto;
border: 1px solid red;
position: relative;
display: table;
}
.c {
display: table-cell;
width:33%;
}
.d {
text-align: right;
}
.e {
position: absolute;
left: 50%;
display: inline;
width: auto;
transform: translateX(-50%);
}
HTML:
<div id="container" class="blog-pager">
<div id="left">Left</div>
<div id="right">Right</div>
<div id="center">Center</div>
</div>
CSS:
#container{width:98%; }
#left{float:left;}
#center{text-align:center;}
#right{float:right;}
text-align:center;
は完璧な中央揃えです。
私はこれを単純化し、コンテナを必要とせずにそれを達成するために別の試みをしました。
HTML
.box1 {
background-color: #ff0000;
width: 200px;
float: left;
}
.box2 {
background-color: #00ff00;
width: 200px;
float: right;
}
.box3 {
background-color: #0fffff;
width: 200px;
margin: 0 auto;
}
CSS
.box1 {
background-color: #ff0000;
width: 200px;
float: left;
}
.box2 {
background-color: #00ff00;
width: 200px;
float: right;
}
.box3 {
background-color: #0fffff;
width: 200px;
margin: 0 auto;
}
ライブで見ることができます JSFiddle
Bootstrap 3 Iを使用して、同じ幅のdivを3つ作成します(12桁のレイアウトでdivごとに4桁)。これにより、左右のセクションの幅が異なる場合でも、中央のゾーンを中央に配置することができます(列のスペースがオーバーフローしない場合)。
HTML:
<div id="container">
<div id="left" class="col col-xs-4 text-left">Left</div>
<div id="center" class="col col-xs-4 text-center">Center</div>
<div id="right" class="col col-xs-4 text-right">Right</div>
</div>
CSS:
#container {
border: 1px solid #aaa;
margin: 10px;
padding: 10px;
height: 100px;
}
.col {
border: 1px solid #07f;
padding: 0;
}
ライブラリなしでその構造を作成するために、Bootstrap CSSからいくつかの規則をコピーしました。
HTML:
<div id="container">
<div id="left" class="col">Left</div>
<div id="center" class="col">Center</div>
<div id="right" class="col">Right</div>
</div>
CSS:
* {
box-sizing: border-box;
}
#container {
border: 1px solid #aaa;
margin: 10px;
padding: 10px;
height: 100px;
}
.col {
float: left;
width: 33.33333333%;
border: 1px solid #07f;
padding: 0;
}
#left {
text-align: left;
}
#center {
text-align: center;
}
#right {
text-align: right;
}
これを試すことができます:
このようなあなたのHTMLコード:
<div id="container">
<div id="left"></div>
<div id="right"></div>
<div id="center"></div>
</div>
そしてあなたのCSSコードはこんな感じです:
#container{width:100%;}
#left{float:left;width:100px;}
#right{float:right;width:100px;}
#center{margin:0 auto;width:100px;}
だから、その出力はこのようになるはずです:
[[LEFT] [CENTER] [RIGHT]]
これを私が中心要素として image を使用してこれを行ったときに私が受け入れられた答えに加えなければならなかった変更はここにあります:
#center
)で囲まれていることを確認してください。そうでない場合は、display
をblock
に設定する必要があります。これは、浮動要素間のスペースを基準にして中央に配置されているように見えます。Image と の両方のコンテナのサイズを必ず設定してください。
#center {
margin: 0 auto;
}
#center, #center > img {
width: 100px;
height: auto;
}