CSS垂直中央の7つの方法
14776 ワード
私たちは1つのレイアウトを編集して、通常は水平の中央と垂直の中央を使って設計して、水平の中央はとても処理して、margin:0 autoを設定することにほかならない.またはtext-align:center;水平中心の問題は簡単に解決できますが、これまで最も面倒な位置合わせの問題は、「垂直中心」という嫌な設定でしたが、以下ではCSSを単純に垂直中心にする7つの方法を紹介します.
設定行高(line-height) 擬似要素 を追加 calc動的計算 表または仮装表 を使用する. transform 絶対位置決め Flexbox を使用
行の高さを設定するのは垂直に中央に位置する最も簡単な方法で、「単行」の「行内要素」(inline、inline-block)に適用されます.例えば、単行のタイトルや、すでにinline-block属性に設定されているdivなどです.line-heightを高さと同じ数値に設定すると、内容の行内要素は垂直に中央に位置し、行の高さなので、行内要素の上下に上りの高さの1/2が加算されるので、垂直に位置します.しかし、これにより、なぜ単行の行内要素が必要なのかがわかります.複数行であれば、2行目と1行目の間隔が大きくなり、私たちが望んでいる効果ではありません.CSS例:
最初の方法は、最も簡単な方法(単行タイトルに適用)ですが、単行しかないので、複数行の要素を垂直に中央に置くには、偽の要素を使用する必要があります.その前に、CSSのvertical-alignという属性を説明します.この属性は垂直に中央に位置していますが、要素内のすべての要素の垂直位置が互いに中央に位置し、外枠の高さに対して垂直に中央に位置していません.(次のCSSはこのような形の垂直中央になります)
したがって、1つのブロックが高さ100%になると、他のブロックは本当に垂直に中央に位置します.
しかし、私たちはいつも垂直に中央に位置するたびに、奇妙なdivを追加することはできません.だから私たちは頭を「偽要素」に動かして、beforeと::afterを利用してdivを鉄棒の中に追加して、この「偽」divの高さ100%を譲って、簡単に他のdivを中に置くことができます.でもでもでも!divはdisplayをinline-blockに設定することを覚えています.結局vertical-align:middleです.行内要素に対してdiv自体がblockなので変更しなければなりません!
ここを見ると疑問に思うかもしれませんが、もし今日私のdivがblockでなければならないなら、私はどのように垂直に中央に置くべきですか?この場合、CSS特有のcalcダイナミックコンピューティングの能力を使用する必要があります.私たちは中央にあるdivのtop属性を、上からの距離が「50%の外枠高さ-50%のdiv高さ」であれば、垂直に中央にすることができます.なぜmargin-topを使わないのか、marginが水平幅に合っているので、topを使わなければ正確ではありません.
表というHTMLでよく使われるDOMでは、垂直中心を実現するのはかなり簡単で、次の行vertical-align:middleだけでいいことに気づく人もいるかもしれませんが、なぜでしょうか.最も主要な原因はtableのdisplayがtableであり、tdのdisplayがtable-cellであるため、表を直接使用するほか、垂直に中央に位置する要素の親要素のdisplayをtable-cellに変更することで簡単に達成できるが、displayを変更すると他のスタイル属性の連動の影響を及ぼす場合があり、注意して使用する必要がある.HTML:
CSS:
transformはCSS 3の新しい属性で、主に要素の変形、回転、変位を管理し、transformの奥のtranslateY(垂直の変位を変えるには、パーセンテージ単位で使用すると要素自体の長さと幅を基準にします)を利用して、要素自体のtop属性を組み合わせることで、垂直に中央に位置する効果を出すことができます.比較的注意しなければならないのは、サブ要素にposition:relativeを付けなければなりません.そうしないと効果がありませんよ.
絶対的な位置付けはCSSの中のposition:absoluteで、絶対的な位置を利用して指定しますが、垂直中心のやり方は私たちの正統な絶対的な位置とは異なり、上下左右の数値を0に設定し、margin:autoを1つ組み合わせることで垂直中心にすることができますが、特に注意しなければならないのは、絶対的な位置付けの子要素を設定し、その親要素のpositionをrelativeに指定しなければなりませんよ!また、絶対的に位置する要素は互いに上書きされるので、コンテンツ要素が多い場合は問題がある可能性があります.
align-itemsまたはalign-contentのプロパティを使用すると、軽くて簡単に垂直に中央に位置する効果が得られます.
以上が垂直中央の方法です.垂直中央はdisplayという属性を修正するために使用されることが多いため、レイアウトにも影響を与えることが多いです.例えば、flexboxを使うべきではない場所でflexboxを使うと、tableを使うべきではない場所でtableを使うべきで、inline-blockを使うべきではありません.その後、他の位置決めスタイルをたくさん書いて修正すると、少し本末転倒します.そのため、これらCSSを垂直に中心に置く方法をどのように活用するかは、皆さんのレイアウト次第です.
転載先:https://juejin.im/post/5cd111b0f265da03a00fe5d2
7つの垂直中心の方法
行の高さを設定(line-height)
行の高さを設定するのは垂直に中央に位置する最も簡単な方法で、「単行」の「行内要素」(inline、inline-block)に適用されます.例えば、単行のタイトルや、すでにinline-block属性に設定されているdivなどです.line-heightを高さと同じ数値に設定すると、内容の行内要素は垂直に中央に位置し、行の高さなので、行内要素の上下に上りの高さの1/2が加算されるので、垂直に位置します.しかし、これにより、なぜ単行の行内要素が必要なのかがわかります.複数行であれば、2行目と1行目の間隔が大きくなり、私たちが望んでいる効果ではありません.CSS例:
.div0{
width:200px;
height:150px;
border:1px solid #000;
line-height:150px;
text-align:center;
}
.redbox{
display:inline-block;
width:30px;
height:30px;
background:#c00;
}
擬似要素の追加(::before、::after)
最初の方法は、最も簡単な方法(単行タイトルに適用)ですが、単行しかないので、複数行の要素を垂直に中央に置くには、偽の要素を使用する必要があります.その前に、CSSのvertical-alignという属性を説明します.この属性は垂直に中央に位置していますが、要素内のすべての要素の垂直位置が互いに中央に位置し、外枠の高さに対して垂直に中央に位置していません.(次のCSSはこのような形の垂直中央になります)
.div0{
width:200px;
height:150px;
border:1px solid #000;
text-align:center;
}
.redbox{
width:30px;
height:30px;
background:#c00;
display:inline-block;
vertical-align:middle;
}
.greenbox{
width:30px;
height:60px;
background:#0c0;
display:inline-block;
vertical-align:middle;
}
.bluebox{
width:30px;
height:40px;
background:#00f;
display:inline-block;
vertical-align:middle;
}
したがって、1つのブロックが高さ100%になると、他のブロックは本当に垂直に中央に位置します.
.greenbox{
width:30px;
height:100%;
background:#0c0;
display:inline-block;
vertical-align:middle;
}
しかし、私たちはいつも垂直に中央に位置するたびに、奇妙なdivを追加することはできません.だから私たちは頭を「偽要素」に動かして、beforeと::afterを利用してdivを鉄棒の中に追加して、この「偽」divの高さ100%を譲って、簡単に他のdivを中に置くことができます.でもでもでも!divはdisplayをinline-blockに設定することを覚えています.結局vertical-align:middleです.行内要素に対してdiv自体がblockなので変更しなければなりません!
.div0::before{
content:'';
width:0;
height:100%;
display:inline-block;
position:relative;
vertical-align:middle;
background:#f00;
}
calc動的計算
ここを見ると疑問に思うかもしれませんが、もし今日私のdivがblockでなければならないなら、私はどのように垂直に中央に置くべきですか?この場合、CSS特有のcalcダイナミックコンピューティングの能力を使用する必要があります.私たちは中央にあるdivのtop属性を、上からの距離が「50%の外枠高さ-50%のdiv高さ」であれば、垂直に中央にすることができます.なぜmargin-topを使わないのか、marginが水平幅に合っているので、topを使わなければ正確ではありません.
.div0{
width:200px;
height:150px;
border:1px solid #000;
}
.redbox{
position:relative;
width:30px;
height:30px;
background:#c00;
float:left;
top:calc(50% - 15px);
margin-left:calc(50% - 45px);
}
.greenbox{
position:relative;
width:30px;
height:80px;
background:#0c0;
float:left;
top:calc(50% - 40px);
}
.bluebox{
position:relative;
width:30px;
height:40px;
background:#00f;
float:left;
top:calc(50% - 20px);
}
表または仮装表の使用
表というHTMLでよく使われるDOMでは、垂直中心を実現するのはかなり簡単で、次の行vertical-align:middleだけでいいことに気づく人もいるかもしれませんが、なぜでしょうか.最も主要な原因はtableのdisplayがtableであり、tdのdisplayがtable-cellであるため、表を直接使用するほか、垂直に中央に位置する要素の親要素のdisplayをtable-cellに変更することで簡単に達成できるが、displayを変更すると他のスタイル属性の連動の影響を及ぼす場合があり、注意して使用する必要がある.HTML:
<table>
<tr>
<td>
<div> div>
td>
tr>
table>
<div class="like-table">
<div> div>
div>
CSS:
.like-table{
display:table-cell;
}
td,
.like-table{
width:150px;
height:100px;
border:1px solid #000;
vertical-align: middle;
}
td div,
.like-table div{
width:100px;
height:50px;
margin:0 auto;
color:#fff;
font-size:12px;
line-height: 50px;
text-align: center;
background:#c00;
}
.like-table div{
background:#069;
}
transform
transformはCSS 3の新しい属性で、主に要素の変形、回転、変位を管理し、transformの奥のtranslateY(垂直の変位を変えるには、パーセンテージ単位で使用すると要素自体の長さと幅を基準にします)を利用して、要素自体のtop属性を組み合わせることで、垂直に中央に位置する効果を出すことができます.比較的注意しなければならないのは、サブ要素にposition:relativeを付けなければなりません.そうしないと効果がありませんよ.
.use-transform{
width:200px;
height:200px;
border:1px solid #000;
}
.use-transform div{
position: relative;
width:100px;
height:50px;
top:50%;
transform:translateY(-50%);
background:#095;
}
ぜったいいち
絶対的な位置付けはCSSの中のposition:absoluteで、絶対的な位置を利用して指定しますが、垂直中心のやり方は私たちの正統な絶対的な位置とは異なり、上下左右の数値を0に設定し、margin:autoを1つ組み合わせることで垂直中心にすることができますが、特に注意しなければならないのは、絶対的な位置付けの子要素を設定し、その親要素のpositionをrelativeに指定しなければなりませんよ!また、絶対的に位置する要素は互いに上書きされるので、コンテンツ要素が多い場合は問題がある可能性があります.
.use-absolute{
position: relative;
width:200px;
height:150px;
border:1px solid #000;
}
.use-absolute div{
position: absolute;
width:100px;
height:50px;
top:0;
right:0;
bottom:0;
left:0;
margin:auto;
background:#f60;
}
Flexboxの使用
align-itemsまたはalign-contentのプロパティを使用すると、軽くて簡単に垂直に中央に位置する効果が得られます.
.use-flexbox{
display:flex;
align-items:center;
justify-content:center;
width:200px;
height:150px;
border:1px solid #000;
}
.use-flexbox div{
width:100px;
height:50px;
background:#099;
}
以上が垂直中央の方法です.垂直中央はdisplayという属性を修正するために使用されることが多いため、レイアウトにも影響を与えることが多いです.例えば、flexboxを使うべきではない場所でflexboxを使うと、tableを使うべきではない場所でtableを使うべきで、inline-blockを使うべきではありません.その後、他の位置決めスタイルをたくさん書いて修正すると、少し本末転倒します.そのため、これらCSSを垂直に中心に置く方法をどのように活用するかは、皆さんのレイアウト次第です.
転載先:https://juejin.im/post/5cd111b0f265da03a00fe5d2