中央のcss:完全ガイド
4755 ワード
ここで主に参考にしたのはCHRIS COYIERが書いた文章(クリックして見る)で、主にcssの水平、垂直に中央に位置するいくつかの方法について話して、すべての方法の後ろにdemoがあって、オンラインで効果を見ることができます.
水平方向の中央には行内要素とブロック要素があり、行内要素には文字、ピクチャ、リンクなどがある.ブロック要素は主にdiv、pなどのblock要素である.
行内要素については、水平方向の中央(demoをオンラインで表示)を次のように実装できます.
この方法はinline,inline-block,inline-tableなどに有効である.
ブロック要素の場合、margin-leftとmargin-right自動を設定できます(demoをオンラインで表示):
ブロック要素の幅が既知であるかどうかにかかわらず、水平方向の中央に配置できます.
複数のブロック要素が水平方向に中央に位置する必要がある場合、2つの方法が実現されます.1つはinline-block、もう1つはflexです.最初の方法では、次の方法(demoをオンラインで表示)を使用して、ブロック要素display:inline-blockを設定し、親要素が水平に中央に位置します.
flexを使用する場合は、ブロックの親要素に次のスタイルを追加する必要があります(demoをオンラインで表示します).
垂直方向の中央にも行内要素とブロック要素がありますが、水平方向の中央に比べて、垂直方向の中央にはここで議論する必要がある場合が多いので、以下で分析します.
単行の行内要素の場合、padding-topとpadding-bottomの値を等しく設定するだけです(demoをオンラインで表示します):
paddingを設定できない場合は、内部要素の高さ(height=50 px)が既知の場合、line-height=heightを設定して、要素の垂直中央を実現することができます(オンラインでdemoを表示します):
複数行の要素については、垂直方向の中央に4つの方法があります.a.は、上記のようにpadding-topとpadding-bottomの値を等しく設定することによって垂直中央(demo-1): b.vertical-alignプロパティを使用して垂直中央(demo-2) c.flexテクノロジーを使用して垂直中央を実現できます.以下のスタイル(demo-3) d.全高さの擬似要素をコンテナ内に配置し、テキスト垂直位置合わせ(demo-4)
Webレイアウトでは、要素の高さを知っている場合もあれば、知らない場合もあります.既知の高さのブロック要素については、垂直中央(demo)を実現するように設定できます.
ブロック要素の高さを知らない場合がありますが、transformを使用して実現できます.
上記の2つの方法に加えてflex実装(demo)を使用することもできます.
水平中心だけでなく垂直中心も望んでいる場合があり、上記の例と組み合わせて実現することができます.主に以下の3つの側面に分けられます.
要素の高さと幅が既知である場合、要素を絶対的に位置決めし、中心を50%オフセットし、次のように負のmargin値を使用して実現できます(demo).
要素の高さと幅が不明な場合は、変換プロパティを使用して、次のように50%の負の値を2つの方向に与えることができます(demo).
flexで実装するには、2つの中心プロパティ(demo)を使用する必要があります.
1水平
水平方向の中央には行内要素とブロック要素があり、行内要素には文字、ピクチャ、リンクなどがある.ブロック要素は主にdiv、pなどのblock要素である.
1.1行内要素
行内要素については、水平方向の中央(demoをオンラインで表示)を次のように実装できます.
.blocklist1_1 {
text-align: center;
}
この方法はinline,inline-block,inline-tableなどに有効である.
1.2要素
ブロック要素の場合、margin-leftとmargin-right自動を設定できます(demoをオンラインで表示):
.blocklist1_2 .div1 {
margin: 0px auto;
}
ブロック要素の幅が既知であるかどうかにかかわらず、水平方向の中央に配置できます.
1.3複数のブロック要素
複数のブロック要素が水平方向に中央に位置する必要がある場合、2つの方法が実現されます.1つはinline-block、もう1つはflexです.最初の方法では、次の方法(demoをオンラインで表示)を使用して、ブロック要素display:inline-blockを設定し、親要素が水平に中央に位置します.
..blocklist1_3 .div1 {
text-align: center;
}
.blocklist1_3 .div1 div {
display: inline-block;
}
flexを使用する場合は、ブロックの親要素に次のスタイルを追加する必要があります(demoをオンラインで表示します).
.blocklist1_3 .div2 {
display: flex;
justify-content: center;
}
2垂直
垂直方向の中央にも行内要素とブロック要素がありますが、水平方向の中央に比べて、垂直方向の中央にはここで議論する必要がある場合が多いので、以下で分析します.
2.1ライン内の要素
2.1.1一方通行
単行の行内要素の場合、padding-topとpadding-bottomの値を等しく設定するだけです(demoをオンラインで表示します):
.blocklist2_1_1 .div1 {
padding-top: 20px;
padding-bottom: 20px;
}
paddingを設定できない場合は、内部要素の高さ(height=50 px)が既知の場合、line-height=heightを設定して、要素の垂直中央を実現することができます(オンラインでdemoを表示します):
.blocklist2_1_1 .div2 {
line-height: 50px;
height: 50px;
}
2.1.2複数行
複数行の要素については、垂直方向の中央に4つの方法があります.
.blocklist2_1_2 .div1 {
padding: 20px 0px;
}
.blocklist2_1_2 .div2 {
display: table;
}
.blocklist2_1_2 .div2>div {
display: table-cell;
vertical-align: middle;
}
.blocklist2_1_2 .div3 {
display: flex;
justify-content: center;
flex-direction: column;
height: 400px;
}
.blocklist2_1_2 .div4 {
position:relative;
}
.blocklist2_1_2 .div4::before {
content: ' ';
display: inline-block;
height: 100%;
width: 1%;
vertical-align: middle;
}
.blocklist2_1_2 .div4>div {
display: inline-block;
vertical-align: middle;
}
2.2ブロック要素
2.2.1ブロック要素の高さは既知である
Webレイアウトでは、要素の高さを知っている場合もあれば、知らない場合もあります.既知の高さのブロック要素については、垂直中央(demo)を実現するように設定できます.
.blocklist2_2_1 .div {
position: relative;
}
.blocklist2_2_1 .div div {
position: absoulte;
top: 50%;
height: 100px;
margin-top: -70px; // 70px height*1/2 + padding
padding: 20px;
}
2.2.2ブロック要素の高さが不明
ブロック要素の高さを知らない場合がありますが、transformを使用して実現できます.
.blocklist2_2_2 .div {
position: relative;
}
.blocklist2_2_2 .div div {
transform: translateY(-50%);
top: 50%;
position: absoulte;
}
2.2.3 flexによる実現
上記の2つの方法に加えてflex実装(demo)を使用することもできます.
.blocklist2_2_3 .div {
display: flex;
flex-direction: column;
justify-content: center;
}
3水平垂直
水平中心だけでなく垂直中心も望んでいる場合があり、上記の例と組み合わせて実現することができます.主に以下の3つの側面に分けられます.
3.1要素の高さ、幅は既知
要素の高さと幅が既知である場合、要素を絶対的に位置決めし、中心を50%オフセットし、次のように負のmargin値を使用して実現できます(demo).
.blocklist3_1 .div {
position: relative;
}
.blocklist3_1 .div div {
position: absoulte;
top: 50%;
left: 50%;
margin: -120px 0px 0px -220px; //height ,width , padding
height: 200px;
width: 400px;
padding: 20px;
}
3.2要素の高さ、幅が不明
要素の高さと幅が不明な場合は、変換プロパティを使用して、次のように50%の負の値を2つの方向に与えることができます(demo).
.blocklist3_2 .div {
position: relative;
}
.blocklist3_2 .div div {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
3.3 flexboxによる実装
flexで実装するには、2つの中心プロパティ(demo)を使用する必要があります.
.blocklist3_3 .div {
display: flex;
justify-content: center;
align-items: center;
}