親エレメントの中で子エレメントを水平に垂直に中央に配置する6つの方法
13562 ワード
ここでは、子要素を親要素の中で水平に垂直に中央に配置し、その長所と短所を分析する6つの方法を紹介します.
位置決め:3種類の display: flex JavaScript display: table-cell
まず、ページ構造とデフォルトの背景色を指定します.(ブラウザでの表示結果は水平垂直に中央にあるため、実行図は添付されません.)
ベースHTML
ベースCSS
CSS
メリットとデメリット:の欠点:
CSS
メリットとデメリット:の利点: の欠点:互換性の問題.
CSS
メリットとデメリット:の利点: の欠点:固定されたアスペクト値が必要です.そうしないと、アスペクト値がない方向に親要素全体にわたって押し出されます.
CSS
メリットとデメリット:の利点: の欠点:互換性の問題.
まず、観察を容易にするために
CSS
JavaScript
メリットとデメリット:の利点: 欠点:
利点と欠点:この方法はあまり使用されず、
開発では,実際には互換性の問題をあまり考慮する必要がないので,
フレキシブルボックスのレイアウトがまだ理解されていない場合は、ここにチェン一峰の
目次
まず、ページ構造とデフォルトの背景色を指定します.(ブラウザでの表示結果は水平垂直に中央にあるため、実行図は添付されません.)
ベースHTML
<div class="parent">
<div class="child">childdiv>
div>
ベースCSS
* {
margin: 0;
padding: 0;
}
.parent {
background-color: pink;
}
.child {
background-color: lightseagreen;
}
位置決め実装1
CSS
.parent {
position: relative;
width: 200px;
height: 200px;
}
.child {
position: absolute;
width: 100px;
height: 100px;
left: 50%;
top: 50%;
margin-top: -50px;
margin-left: -50px;
}
メリットとデメリット:
.child
要素のアスペクト値を知らなければならず、固定されたアスペクト値を持たなければならない.位置決め実装2
CSS
.parent {
position: relative;
width: 200px;
height: 200px;
}
.child {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
メリットとデメリット:
.child
のアスペクト値を知る必要がなく、同時にそのアスペクト値を設定する必要がなく、コンテンツによって自動的に開くことができる.位置決め実装3
CSS
.parent {
position: relative;
width: 200px;
height: 200px;
}
.child {
position: absolute;
width: 100px;
height: 100px;
left: 0;
top: 0;
right: 0;
bottom: 0;
margin: auto;
}
メリットとデメリット:
.child
の幅を知る必要はありません.display:flex実装
CSS
.parent {
width: 200px;
height: 200px;
display: flex;
justify-content: center;
align-items: center;
}
メリットとデメリット:
.child
のアスペクト値を知る必要がなく、同時にそのアスペクト値を設定する必要がなく、コンテンツによって自動的に開くことができる.JavaScript実装
まず、観察を容易にするために
CSS
を省略するために、選択的に元素を添加することができる.CSS
.parent {
width: 200px;
height: 200px;
}
JavaScript
window.onload = function() {
let parent = document.querySelector(".parent"),
child = document.querySelector(".child");
parent.style.position = "relative";
child.style.position = "absolute";
child.style.left = (parent.offsetWidth - child.offsetWidth) / 2 + 'px';
child.style.top = (parent.offsetHeight - child.offsetHeight) / 2 + 'px';
console.log(child.offsetHeight);
}
メリットとデメリット:
DOM
を直接操作して幅の高さを得るので、幅の高さを設定する必要はありません.CSS
を直接使用していないと性能が良い.display:table-cell実装
.parent {
width: 200px;
height: 200px;
display: table-cell;
vertical-align: middle;
text-align: center;
}
.child {
display: inline-block;
}
利点と欠点:この方法はあまり使用されず、
.parent
要素のアスペクト値はパーセントに設定できない.まとめ
開発では,実際には互換性の問題をあまり考慮する必要がないので,
display: flex
の方式を使うと簡潔で実用的だと個人的に感じている.フレキシブルボックスのレイアウトがまだ理解されていない場合は、ここにチェン一峰の
flex
を追加するか、リンク:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html
にアクセスできます.