css centering_html/css_WEB-ITnose
目次
-
- インライン要素のセンタリング方法
-
- 複数のブロック要素のセンタリング方法
- 複数のブロック要素を縦方向かつ中央に積み重ねる方法
-
-
- 高さが不明な場合/unfixed
-
-
- 高さ不定・不確定の実装方法
この記事は、centering-css-complete-guide 記事の不完全な翻訳です。英語レベルと CSS レベルの関係で、一部は私の理解に基づいています。翻訳/理解の間違い、または記事のその他の問題がある場合は、アドバイスをお願いします。
元のアドレス: https://css-tricks.com/centering-css-complete-guide/
原著者: CHRIS COYIER
水平方向の中央揃え
インライン要素の中央揃えメソッドの場合
インライン要素の水平方向の中央揃えには、ブロックの親要素のスタイルを次のように設定する必要があります:
.center-childred { text-align: center;}
たとえば、リンクまたはテキスト要素を中央に配置する例:
CodePen の Chris Coyier (@chriscoyier ) による「Pen Centering Inline Elements」を参照してください。 🎜 > このメソッドは、inline、inline-block、inline-table、inline-flex などに適用できます。
ブロックレベル要素のセンタリング方法
ブロックレベル要素の margin-left と margin-right を auto に設定することで水平方向のセンタリングを実現できますが、ブロック要素には幅を与える必要がありますそうでない場合は、中央揃えではなく全幅になります。設定方法は以下の通りです。
.center-me { margin: 0 auto;}
margin: 0 auto を適用したオブジェクトに幅を指定すると、オブジェクトは親コンテナ内の中央に配置されます。
2 番目のパラメータとして auto を指定すると、基本的にブラウザは左右のマージンを自動的に決定し、左右のマージンが同じサイズに設定されることが保証されます。最初のパラメータ 0 は、上マージンと下マージンが両方とも 0 に設定されることを示します。
margin-top:0;
margin-bottom:0;
margin-left:auto ;
margin-right:auto;
したがって、例を挙げると、親が 100px、子が 50px の場合、auto プロパティmargin-left と margin-right の間に共有する空き領域が 50 ピクセルあると判断します:
var freeSpace = 100 - 50;
varqualShare = freeSpace / 2;
これは次のようになります:
margin-left:25;margin-right:25;
デモは次のとおりです:
を参照してください。 CodePen の guihailiuli ( @guihailiuli ) によって中央に配置された Pen ブロック要素
width: 400px; をコメントアウトすると、div は中央に配置されず、コンテナーを左から右に埋めます。
この方法を使用すると、ブロック要素の幅が親要素の幅よりも大きい場合、子要素の幅が親要素の幅を超えてしまい、中央揃えができなくなる場合があります。幅: 600ピクセル;。
margin についての補足: 0 auto;
- ブロックレベルの要素の幅を設定すると、要素がコンテナーを左から右に埋めるのを防ぐことができます。次に、左右のマージンを自動に設定して水平方向の中央に配置できます。要素は指定した幅を占め、残りの幅は左右の 2 つのマージンに分割されます。
-
-
-
このコードの関数は次のとおりです。フロントエンド 誰でも理解できること: ブロック要素を水平方向に中央揃えにすること。一般に、誰もが次のように書きます:
.content {
width: 980px;
margin: 0 auto;
}
上面的代码能正常工作,大部分情况下也不会有问题,但上面的代码存在思维的懒惰。写成:
.content {
width: 980px;
margin-left: auto;
margin-right auto;
}
看起来代码变多了,变啰嗦了。但如果你真经过思考,就会明白:
- margin: 0 auto 中的 0 绝大部分情况下是冗余的,页面上早就有 reset.css 或 normalize.css 重置过
- margin: 0 auto 不纯粹,你要的是“水平居中”,却顺便把 top / bottom 给重置了 不纯粹会导致顺序和优先级的依赖,比如有另一处要给 margin-top/bottom 赋值时,就必须要提高优先级
进一步的东西是,我一直觉得CSS里,有一个重要的原则: 最小影响原则
你在写某段CSS代码时,首先要非常清楚地知道这段CSS代码的功能,其次要尽量严格保障这段CSS代码只实现了你想要实现的功能。
这就如医生动手术,好好做好本分就行,千万别留下一个小镊子在病人身体里。
与HTML代码一样,对CSS代码来说,很重要的两个衡量标准也是稳定和灵活。这里不多说了。
熟悉设计模式的,应该会感知到,最小影响原则和单一职责原则(SRP)本质上是一样的。SRP 作为设计模式的重要原则之一,其重要性不用我在此啰嗦了。
多个块状元素的居中方法
如果有多个块状元素需要水平居中在一行,很可能你会想到改变他们的display属性为 inline-block ,或者用flexbox。
例如:
See the Pen Centering Row of Blocks by Chris Coyier ( @chriscoyier ) on CodePen .
多个块状元素在竖直方向上堆在一起居中的方法
这种情况使用 margin: 0 auto; 一样有效
See the Pen Centering Blocks on Top of Each Other by Chris Coyier ( @chriscoyier ) on CodePen .
垂直居中
行内元素的垂直居中
对单行元素
一些行内元素/文本元素,将他们padding的top和bottom值设为一致就可以
.link { padding-top: 30px; padding-bottom: 30px;}
对单行元素进行垂直对齐:
See the Pen Centering text (kinda) with Padding by Chris Coyier ( @chriscoyier ) on CodePen .
如果出于一些原因不想选择 padding ,在居中文本时一样可以使用 line-height ,可以使文本的高度处于中心
.center-text-trick { height: 100px; line-height: 100px; white-space: nowrap;}
效果如下:
See the Pen Centering a line with line-height by Chris Coyier ( @chriscoyier ) on CodePen .
对多行元素
针对这种情况可以使用 vertical-align
See the Pen Centering text (kinda) with Padding by Chris Coyier ( @chriscoyier ) on CodePen .
如果不使用table,也可以使用flexbox, 用法如下:
.flex-center-vertically { display: flex; justify-content: center; flex-diretion: column; height: 400px;}
效果:
See the Pen Vertical Center Multi Lines of Text with Flexbox by Chris Coyier ( @chriscoyier ) on CodePen .
使用这种方法需要相关的父元素有一个固定的高度(px,%等)
还有第三种方法是采用称为 ghost element 的技术,
用法如下:
.ghost-center { position: relative;}.ghost-center::height { content: " "; display: inlie-block; height: 100%; width: 1%; vertical-align: middle;}.ghost-center p { display: inline-block; vertical-align: middle;}
效果:
See the Pen Ghost Centering Multi Line Text by Chris Coyier ( @chriscoyier ) on CodePen .
PS:个人水平太菜,对这种ghost element方法不懂,只是从原文搬过来,具体介绍请查看原文。
块状元素的垂直居中
在大多数页面布局中,高度是不知道的,比如当页面宽度发生变化时, text reflow 会使高度发生变化,当图片宽度调整时也会改变高度,等等情况
但是,如果知道了高度,就可以用下面的居中方法。
在固定高度的情况下
使用方法:
.parent { position: relative;}.child { position: absolute; top: 50%; height: 100px; margin-top: -50px;}
实现的原理:
实现效果:
See the Pen Center Block with Fixed Height by Chris Coyier ( @chriscoyier ) on CodePen .
在不知道/不固定高度的情况下
这种情况下可以通过 transform: translateY() 方法推动块状元素一半的高度来实现居中.
使用方法:
.parent { position: relative;}.child { position: absolute; top: 50%; transform: translateY(-50%);}
关于 transform: translate() 方法的补充:
translate 表示移动,该属性值含 3 种情况:translate(x,y) 水平方向和垂直方向同时移动(也就是 X 轴和 Y 轴同时移动,即斜一定角度移动);translateX(x) 仅水平方向移动(X 轴移动);translateY(Y) 仅垂直方向移动(Y 轴移动),举个例子:
transform:translateY(20px); // 表示由基点处沿垂直方向向下移动 20px
实现效果:
See the Pen Center Block with Unknown Height by Chris Coyier ( @chriscoyier ) on CodePen .
当然,也可以用flexbox实现:
.parent { display: flex; flex-direction: column; justify-content: center;}
实现效果:
See the Pen Center Block with Unknown Height with Flexbox by Chris Coyier ( @chriscoyier ) on CodePen .
水平垂直居中
固定宽高的居中方法
利用 负margin 技术实现
.parent { position: relative;}.child { width: 300px; height: 100px; padding: 20px; position: absolute; top: 50%; left: 50%; margin: -70px 0 0 -170px;}
实现效果:
See the Pen Center Block with Fixed Height and Width by Chris Coyier ( @chriscoyier ) on CodePen .
不固定/不确定高度的实现方法
可以通过两个方向都使用 transform: translate; 来实现
使用方式:
.parent { position: relative;}.child { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);}
实现效果:
See the Pen Center Block with Unknown Height and Width by Chris Coyier ( @chriscoyier ) on CodePen .

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









この記事では、HTML< Progress>について説明します。要素、その目的、スタイリング、および< meter>との違い要素。主な焦点は、< Progress>を使用することです。タスクの完了と< Meter> statiの場合

この記事では、HTML< Datalist>について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

記事では、HTML5クロスブラウザーの互換性を確保するためのベストプラクティスについて説明し、機能検出、プログレッシブエンハンスメント、およびテスト方法に焦点を当てています。

この記事では、html< meter>について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化< Meter> < Progress>およびex

この記事では、ブラウザのユーザー入力を直接検証するために、必要、パターン、MIN、MAX、および長さの制限などのHTML5フォーム検証属性を使用して説明します。

この記事では、モバイルデバイスのレスポンシブWebデザインに不可欠なViewportメタタグについて説明します。適切な使用により、最適なコンテンツのスケーリングとユーザーの相互作用が保証され、誤用が設計とアクセシビリティの問題につながる可能性があることを説明しています。

この記事では、< iframe>外部コンテンツをWebページ、その一般的な用途、セキュリティリスク、およびオブジェクトタグやAPIなどの代替案に埋め込む際のタグの目的。

GiteEpages静的Webサイトの展開が失敗しました:404エラーのトラブルシューティングと解像度Giteeを使用する
