Flexbox レイアウト mode_html/css_WEB-ITnose についての私の理解
CSS3 レイアウト モードの Flexbox は、フレキシブル ボックス モデルとも呼ばれ、ボックス モデルに最大限の柔軟性を提供するために使用されます。まず例を示します。以前は、このように水平方向と垂直方向の中央に配置される div ボックスを実装しました。オブジェクトの高さと幅がわかっている場合、中央の要素が絶対パーセントで配置され、マージン オフセットによって実装されます。
<style> .container{ width: 600px; height: 400px; border: 1px solid #000; position: relative; } .box{ width: 200px; height: 100px; border: 1px solid #000; position: absolute; left: 50%; top: 50%; margin-left: -100px; margin-top:-50px; }</style><div class="container"> <div class="box"></div></div>
<style> .container{ width: 600px; height: 400px; border: 1px solid #000; display: flex; justify-content:center; align-items:center; } .box{ width: 200px; //宽度可以为任意 height: 100px; //高度可以为任意 border: 1px solid #000; }</style><div class="container"> <div class="box"></div></div>
まず、この図を分析してみましょう。最初の子ノードから、Flexbox はコンテナと Flex プロジェクトで構成されていることがわかります。コンテナは親要素で、プロジェクトは子要素です。それらの間の関係の一部は次のように表現できます:
この図は、後続の属性分析で使用できます。
フレックス コンテナ
display:flex
フレックスボックス レイアウトを使用する場合、最初に親コンテナの表示値をフレックス (ブロック レベル) またはインラインで配置する必要があります。フレックス (インライン) クラス)。
この値が使用されると、スケーラブル コンテナはコンテンツの新しいスケーラブル フォーマット コンテキスト (FFC) を作成します。そのコンテキスト表示効果は、BFC ルート要素と同じです (BFC 機能: フロートは中断されません)。スケーラブル コンテナ、およびフレックス コンテナの境界はそのコンテンツの境界と重なりません)。
フレックス コンテナはブロック コンテナではないため、ブロック レイアウトを制御するために設計された一部のプロパティ、特に複数列 (列)、float、clear、vertical-align などの属性は flex レイアウトには適用できません。
flex-direction
[flex-direction] 属性は、上の図のスケーラブル コンテナ内の
主軸 の方向を制御するために使用され、また、スケーラブルなアイテムの方向。
- flex-direction:row; もデフォルト値です。つまり、主軸の方向は通常の方向と同じで、左から右に配置されます。
- flex-direction:row-reverse; 右から左に配置された行の反対方向。
- flex-direction:column; 上から下に配置します。
- flex-direction:column-reverse; 下から上に配置します。 上記はltrの書き方のみで、rtlの場合はその逆になります。
flex-warp
[flex-wrap] 属性は、フレックス コンテナーを単一行か複数行かによって、横軸の方向 (新しい行の積み重ね方向) も決まります。
- flex-wrap:nowrap; フレックス コンテナは 1 行で表示されます (デフォルト値)。
- flex-wrap:wrap;フレックス項目の各行の順序は上から下への順です。
- flex-wrap:wrap-reverse; フレックス コンテナは複数行で表示されますが、フレックス アイテムの各行の順序は下から上に配置されます。
flex-flow
[flex-flow] 属性は flex-direction です。 (主軸方向) および フレックスラップ (交差軸方向) の 2 つのプロパティは、フレックス コンテナーの主軸と側軸を決定します。
- flex-flow:[flex-direction][flex-wrap]; デフォルト値は row nowrap です:
- Web ページの効果は次のとおりです:
- ここでは、さまざまな組み合わせを自分で試すことができます。
justify-content
[justify-content] は、行上のすべてのフレックス項目がスケーラブルではない、またはスケーラブルであるがその値に達している場合に、主軸上のフレックス項目の配置を定義するために使用されます。この属性は、最大長に達した場合にのみ余分なスペースを割り当てます。このプロパティは、項目が行からオーバーフローした場合の項目の配置をある程度制御することもできます。
- justify-content:flex-start;伸缩项目向主轴的起始位置开始对齐,后面的每元素紧挨着前一个元素对齐。
- justify-content:flex-end;伸缩项目向主轴的结束位置对齐,前面的每一个元素紧挨着后一个元素对齐。
- justify-content:center;伸缩项目相互对齐并在主轴上面处于居中,并且第一个元素到主轴起点的距离等于最后一个元素到主轴终点的位置。以上3中都是“捆绑”在一个分别靠左、靠右、居中对齐。
- justify-content:space-between;伸缩项目平均的分配在主轴上面,并且第一个元素和主轴的起点紧挨,最后一个元素和主轴上终点紧挨,中间剩下的伸缩项目在确保两两间隔相等的情况下进行平分。
- justify-content:space-around;伸缩项目平均的分布在主轴上面,并且第一个元素到主轴起点距离和最后一个元素到主轴终点的距离相等,且等于中间元素两两的间距的一半。完美的平均分配,这个布局在阿里系中很常见。
还是看demo理解起来快一点:
align-items
[align-items]用来定义伸缩项目在侧轴的对齐方式,这类似于[justify-content]属性,但是是另一个方向。(flex-directon和flex-wrap是一对,justify-content和align-items是一对,前者分别定义主轴和侧轴的方向,后者分别定义主轴和侧轴中项目的对齐方式)。
- align-items:flex-start;伸缩项目在侧轴起点边的外边距紧靠住该行在侧轴起点的边。
- align-items:flex-end;伸缩项目在侧轴终点边的外边距靠住该行在侧轴终点的边。
- align-items:center;伸缩项目的外边距在侧轴上居中放置。
- align-items:baseline;如果伸缩项目的行内轴与侧轴为同一条,则该值与[flex-start]等效。 其它情况下,该值将参与基线对齐。
- align-items:stretch;伸缩项目拉伸填充整个伸缩容器。此值会使项目的外边距盒的尺寸在遵照「min/max-width/height」属性的限制下尽可能接近所在行的尺寸。
下面demo只展示center和stretch的栗子,其他几个可以参考flex-start和flex-end那样。
align-content
[align-content]属性可以用来调准伸缩行在伸缩容器里的对齐方式,这与调准伸缩项目在主轴上对齐方式的[justify-content]属性类似。只不过这里元素是以一行为单位。请注意本属性在只有一行的伸缩容器上没有效果。当使用flex-wrap:wrap时候多行效果就出来了。
align-content: flex-start || flex-end || center || space-between || space-around || stretch;
- align-content: stretch;默认值,各行将会伸展以占用剩余的空间。
- 其他可以参考[justify-content]用法。
具体图片来至w3.org官方文档;
太麻烦。写不下去了,摔。
Flex项目
终于写到关于伸缩项目的相关属性了,主要是3个,order,flex(flex-grow,flex-shrink,flex-basis的组合),align-self;用来比较多的是前两个。
order
有一种用法比较多,想设置一组中有两个元素一个排第一,另外一个排最后,主需要将第一个的order:-1;另一个为order:0;这样就好了。
譬如我们想控制一个container中有4个box,想box4为一个显示,box1为最后一个显示。只需要 这样
<style>.container{ display: flex; } .box1{ order:1; } .box4{ order:-1; }</style><div class="container"> <div class="box1">1</div> <div class="box2">2</div> <div class="box3">3</div> <div class="box4">4</div></div>
显示效果就这样了:
flex
[flex]属性可以用来指定可伸缩长度的部件,是flex-grow(扩展比例),flow-shrink(收缩比例),flex-basis(伸缩基准值)这个三个属性的缩写写法,建议大家采用缩写的方式而不是单独来使用这3个属性。
flex:none | [ <'flex-grow'> ?<'flew-shrink'> || <'flow-basis'>]// flex-grow是必须得flex-shrink和flow-basis是可选的
- flex-grow:;其中number作为扩展比例,没有单位,初始值是0,主要用来决定伸缩容器剩余空间按比例应扩展多少空间。
- flex-grow:;其中number作为收缩比例,没有单位,初始值是1,也就是剩余空间是负值的时候此伸缩项目相对于伸缩容器里其他伸缩项目能收缩的空间比例,在收缩的时候收缩比率会以[flex-basis]伸缩基准值加权。
- flex-basis:|auto;默认是auto也就是根据可伸缩比率计算出剩余空间的分布之前,伸缩项目主轴长度的起始数值。若在「flex」缩写省略了此部件,则「flex-basis」的指定值是长度零。
flex-basis用图来表示就是这样:
align-self
[align-self]用来在单独的伸缩项目上覆写默认的对齐方式,这个属性是用来覆盖伸缩容器属性align-items对每一行的对齐方式。也就是说在默认的情况下这两个值是相等的。
align-self: auto | flex-start | flex-end | center | baseline | stretch
我的看法
讲了这么多他们的使用,我们来看一看flexbox布局的兼容性。
具体大家可以见这个网站:caniuse
在PC端其实很乐观了,基本上主流的浏览器都已经兼容了flex的使用,但是到了移动端就不是那么好了,特别是国内浏览器,考虑到uc浏览器占了大头,但是uc从图中看到只兼容flex最老的一个版本,也就是2009年的版本,即display:box;很多现在flex的优秀特性到了它上面都不兼容了,所以建议大家在使用的时候,假如2009版本可以满足开发要求的话,还是去使用2009版本,这样风险更小。
但是假如想兼容多个浏览器,可以采用优雅降级的方式来使用,这里推荐一个scss的sass-flex-mixin,这样就可以使用最新的写法,并且兼容大部分浏览器了。
相信flexbox布局在以后的移动端会用得越来越多的。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









HTMLは、簡単に学習しやすく、結果をすばやく見ることができるため、初心者に適しています。 1)HTMLの学習曲線はスムーズで簡単に開始できます。 2)基本タグをマスターして、Webページの作成を開始します。 3)柔軟性が高く、CSSおよびJavaScriptと組み合わせて使用できます。 4)豊富な学習リソースと最新のツールは、学習プロセスをサポートしています。

HTMLはWeb構造を定義し、CSSはスタイルとレイアウトを担当し、JavaScriptは動的な相互作用を提供します。 3人はWeb開発で職務を遂行し、共同でカラフルなWebサイトを構築します。

Anexampleapalofastartingtaginhtmlis、それはaperginsaparagraph.startingtagsaresentionentientiontheyinitiateelements、definetheirtypes、およびarecrucialforurturingwebpagesandcontingthomedomを構築します。

webdevelopmentReliesOnhtml、css、andjavascript:1)htmlStructuresContent、2)cssStylesit、および3)Javascriptaddsinteractivity、形成、

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

Y軸位置Webアノテーション機能の適応アルゴリズムこの記事では、単語文書と同様の注釈関数、特に注釈間の間隔を扱う方法を実装する方法を探ります...

画像をクリックした後、散乱と周囲の画像を拡大する効果を実現するには、多くのWebデザインがインタラクティブな効果を実現する必要があります。特定の画像をクリックして周囲を作成してください...

Vueアプリケーションを開発するときに、ルーターフォルダーの下にindex.jsファイルにvuerouterを登録する必要性があるため、ルーティング構成で問題が発生することがよくあります。特別...
