検索
ホームページウェブフロントエンドhtmlチュートリアルSass を使用して、CSS で垂直方向と水平方向のセンタリングをエレガントかつ効率的に実装します (Flex レイアウト、CSS3+SASS 完全バージョンが付属)_html/css_WEB-ITnose

CSS の水平方向と垂直方向の中央揃えを実現する方法はたくさんあります。ここでは、より一般的な 4 つの方法について簡単に説明します。

1. CSS3 で Flex レイアウトを使用する

Flex について理解する必要があるのは、次のとおりです。これは表示属性であり、その親要素に flex 属性を設定する必要があります (flex は絶対配置で使用する必要があります!!!!)。display: flex の設定に加えて、他に 2 つの属性を設定する必要があります。 、つまり justify -content と align-items は、それぞれ水平方向の中央揃えと垂直方向の中央揃えを意味します。 HTML+CSS コードは次のとおりです。

body {    position: absolute;    width: 100%;    height: 100%;    display: flex;    justify-content: center;    align-items: center;}.parentNode {    width: 400px;    height: 400px;    background: #f00;}

<body>    <div class="parentNode"></div></body>

要件が変更された場合、たとえば、上で述べたように、サブ DIV を次のようにしたい場合、この div 内に div をネストしたいとします。親 DIV も次のように設定します

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Document</title>    <style>        * {            margin: 0;            padding: 0;        }        body {            position: absolute; // flex必须配合absolute使用才会生效            width: 100%;            height: 100%;            display: flex;            justify-content: center;            align-items: center;        }        .parentNode {            width: 400px;            height: 400px;            background: #f00;            position: relative;  // 这里必须用relative 原因是 相对于 body这个父标签定位 如果用absolute会找上级的relative,如果没有,就到顶级的document            display: flex;            justify-content: center;            align-items: center;        }        .childNode {            width: 200px;            height: 200px;            background: #fff;        }    </style></head><body>    <div class="parentNode">        <div class="childNode"></div>    </div></body></html>

2. CSS3 でtransformを使用します

.parentNode {    width: 400px;    height: 400px;    background: #f00;     position: absolute;      left: 50%;    top: 50%;    transform: translate(-50%, -50%);}

3. 要素の幅と高さがわかったら、CSS2 で最も一般的なマージンを使用します

.parentNode {    width: 400px;    height: 400px;    background: #f00;     position: absolute;      left: 50%;    top: 50%;    margin: -200px 0 0 -200px;}

4. 特別なマージンを使用します: auto

.parentNode {    width: 400px;    height: 400px;    background: #f00;    overflow: auto;      margin: auto;      // 在标准流的情况下,让 margin-top 以及 margin-bottom 都为0    position: absolute;      top: 0; left: 0; bottom: 0; right: 0;  // 使浏览器对其元素所在的区域内重新渲染,四个值都设为0目的是让整个窗口都为该元素的重新渲染区域,之后margin-top以及margin-bottom都相等  }

次に、強力な SASS を使用してこれらのスタイルを再構築しましょう。flex から始めましょう。 Web サイト全体の場合、色、フォントなど、Sass には同様の小さなスタイルがいくつかあります。「$」変数を使用して Sass でそれらを均一に処理できるため、この選択は依然として適切です。しかし、スタイルがますます複雑になり、スタイルの大部分を再利用する必要がある場合、変数を使用しても目的を達成できません。このとき、Sass の mixin マクロは非常に意味のあるものになります。 @mixin は、CSS の @media や @font-face に似た、mixin マクロを宣言するためのキーワードです。 center は mixin マクロの名前です。中括弧内は再利用されたスタイル コードです。 @include は混合マクロを呼び出します。パラメーターを使用せずにミックスイン マクロを宣言するだけでなく、パラメーターを使用してミックスイン マクロを定義することもでき、その中により複雑なロジックを記述することができます。

以下では、if else ステートメントと @mixin ハイブリッド マクロを使用して、上記の 2、3、4 のメソッドをカプセル化します。

私たちのアイデアは、まず DIV の左上隅をコンテナの中心に絶対的に配置し、次に要素の幅と高さをそれぞれ表す 2 つのオプションのパラメーター ($width、$height) をミックスインに追加することです。パラメータが渡される場合は、負のマージン メソッドを使用してセンタリングを実現します。パラメータが渡されない場合は、CSS3 変換メソッドを使用します。

@mixin center {    display: flex;    justify-content: center;    align-items: center;}body {    position: absolute;     width: 100%;    height: 100%; @include center;<br />    .parentNode {        width: 400px;        height: 400px;        background: #f00;        position: relative; @include center;<br />        .childNode {           width: 200px;           height: 200px;           background: #fff;        }    }}

ここで、@mixin のカプセル化を開始します。上記の CSS 分析から、センタリングを実現するには、要素を最初に絶対的に配置する必要があることがわかります

/** * 为子元素设定定位上下文 */.parent {    position: relative;}/** * 让子元素绝对居中于父容器 * 没有向 Sass mixin 传递宽和高,使用 CSS transform 属性实现居中效果 */.child-with-unknown-direction {    @include center;}/** * 让子元素绝对居中于父容器 * 向 Sass mixin 传递了宽度,所以就使用负向 margin 处理水平位置, * 使用 CSS transform translateY 处理垂直位置  */.child-with-known-width {    @include center(400px);}/** * 让子元素绝对居中于父容器 * 向 Sass mixin 传递了高度,所以就使用负向 margin 处理垂直位置, * 使用 CSS transform translateX 处理水平位置  */.child-with-known-height {    @include center($height: 400px);}/** * 让子元素绝对居中于父容器 * 向 Sass mixin 传递了高度和宽度,所以就使用负向 margin 处理水平和垂直位置 */.child-with-known-direction {    @include center(400px, 400px);}

次に、に従って @mixin のスケルトンを構築します。次のロジック

幅高さソリューション

nullnulldefinenulldefine
translate define
margin define
マージン左 + 翻訳Y null
margin-right + translationX

@mixin center($width: null, $height: null) {    position: absolute;    top: 50%;    left: 50%;}

最後に、特定のコードをさまざまな条件に挿入します

@mixin center($width:null,$height:null){    display: flex;    justify-content: center;    align-items: center;    @if $width and $height {        // do margin    } @else if not $width and not $height {        // do transform translate(-50%,-50%)    } @else if not $width {        // do margin-top and transform translateX    } @else {    // do margin-left and transform translateY    }}

ついに、Koala ソフトウェアを使用したオフライン コンパイルも可能になりましたhttp://www.sassmeister.com/オンラインコンパイルを通じて行われ、以下はコンパイル結果です

@mixin center($width:null,$height:null){    position: absolute;            top: 50%;            left: 50%;    @if $width and $height {            // do margin            width: $width;            height: $height;            margin: -($height / 2) #{0 0} -($width / 2);   //这里如果直接写 0 0 他会编译为 margin: xx 0 xx 而不是 margin:xx 0 0 xx,所以用 #{0 0}<br />    } @else if not $width and not $height {            // do transform translate(-50%,-50%)            transform: translate(-50%,-50);    } @else if not $width {            // do margin-top and transform translateX            height: $height;            margin-top: -(height / 2);            transform: translateX(-50%);     } @else {            // do margin-left and transform translateY            width: $width;            margin-top: -(width / 2);            transform: translateY(-50%);     }}

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
HTML、CSS、およびJavaScript:例と実用的なアプリケーションHTML、CSS、およびJavaScript:例と実用的なアプリケーションMay 09, 2025 am 12:01 AM

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。1。HTMLは、Webページ構造の構築に使用されます。 2。CSSは、Webページの外観を美化するために使用されます。 3. JavaScriptは、動的な相互作用を実現するために使用されます。タグ、スタイル、スクリプトを通じて、これら3つは最新のWebページのコア関数を構築します。

Lang属性をタグにどのように設定しますか?なぜこれが重要なのですか?Lang属性をタグにどのように設定しますか?なぜこれが重要なのですか?May 08, 2025 am 12:03 AM

タグのLang属性を設定することは、WebアクセシビリティとSEOを最適化する重要なステップです。 1)ラング属性をタグに設定します。 2)多言語コンテンツでは、ようなさまざまな言語パーツのLang属性を設定します。 3)「EN」、「FR」、「ZH」などのISO639-1標準に準拠する言語コードを使用します。Lang属性を正しく設定すると、Webページと検索エンジンランキングのアクセシビリティが向上します。

HTML属性の目的は何ですか?HTML属性の目的は何ですか?May 07, 2025 am 12:01 AM

htmlattributeSareSientionalentionalentionalentionalentiallyance'functionalityandappearance.theyaddinformationtodefinebehavior、light、and interaction、makewebsitesteractive、responsive、andviseallyappaleal.attributeslikesrc、href、class、型、およびdoadabledransform

HTMLでリストを作成するにはどうすればよいですか?HTMLでリストを作成するにはどうすればよいですか?May 06, 2025 am 12:01 AM

toreatealistinhtml、useforunorderedlistsandfororderedlists:1)forunorderedlists、wrapitemsinanduseforeachitem、renderingasabulletedlist.2)

HTMLアクション:Webサイト構造の例HTMLアクション:Webサイト構造の例May 05, 2025 am 12:03 AM

HTMLは、明確な構造のWebサイトを構築するために使用されます。 1)Webサイト構造などのタグを使用し、定義します。 2)例は、ブログとeコマースのウェブサイトの構造を示しています。 3)誤ったラベルネスティングなどの一般的な間違いを避けてください。 4)HTTP要求を削減し、セマンティックタグを使用してパフォーマンスを最適化します。

HTMLページに画像を挿入するにはどうすればよいですか?HTMLページに画像を挿入するにはどうすればよいですか?May 04, 2025 am 12:02 AM

to inertanimageintoanhtmlpage、usethetagwithsrcandaltattributes.1)usealttextforaccessibilityandseo.2)emplencesrcsetForresponsiveimages.3)applylazyloadingwithloading = "lazy" tooptimizeperformance.4)

HTMLの目的:Webブラウザがコンテンツを表示できるようにするHTMLの目的:Webブラウザがコンテンツを表示できるようにするMay 03, 2025 am 12:03 AM

HTMLの中心的な目的は、ブラウザがWebコンテンツを理解して表示できるようにすることです。 1。HTMLは、タグなどのタグを介してWebページの構造とコンテンツを定義します。 3.HTMLは、ユーザーの相互作用をサポートするフォーム要素を提供します。 4. HTMLコードの最適化は、HTTP要求の削減やHTMLの圧縮など、Webページのパフォーマンスを改善できます。

Web開発にとってHTMLタグが重要なのはなぜですか?Web開発にとってHTMLタグが重要なのはなぜですか?May 02, 2025 am 12:03 AM

htmltagsareSterenceforwebdevelovementasyStheStructureanhandhancewebpages.1)theydefineLayout、semantics、and-interactivity.2)semanticagsimprovecessibility.3)opeusofusofagscanoptimizeperformanceandensurecross-brows-compativeation。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール