對flex深入研究一點

flex頂層設計

1.在任何流動的方向上(包括上下左右)都能進行良好的布局

2.可以以逆序 或者 以任意順序排列布局

3.可以線性的沿著主軸一字排開 或者 沿著側軸換行排列

4.可以彈性的在任意的容器中伸縮大小

5.可以使子元素們在容器主軸方向上 或者 在容器側軸方向上 進行對齊

主軸和側軸

什么是主軸

什么是側軸

他們是如何切換的

首先每一根軸都包括 三個東西:維度、方向、尺寸

  • 所謂的維度實際上就是意思就是子元素 橫著排還是豎著排(x?軸 或?y?軸)
  • 方向 即排列子元素的順序 順序還是逆序
  • 尺寸 即width[height] :?每一個子元素在主軸方向所占的位置的總和?如果主軸是水平的,那么尺寸就是父元素內所有itemouterWidth總和,如果主軸是垂直的,那么尺寸就是父元素的outerHeight

為了方便?flex-direction + flex-wrap?合并成了一個屬性?flex-flow
主側軸的切換十分簡單,當主軸設定的時候,它的垂直面,就默認被設定成了側軸
flex-flow:?row-reverse wrap-reverse

  • 子元素是橫著排列的,主軸是水平的橫軸,側軸是豎直的縱軸
  • 子元素是逆序并沿著主軸排列的,從右到左
  • 子元素是換行的
  • 子元素是逆序并沿著側軸排列的,從下到上

FFC (flex formatting context)

Flexbox 布局新定義了格式化上下文,類似 BFC(block formatting context)。有多類似呢? 就是除了布局和一些細節不同以外的一切規則都和 BFC 是相同的

注意?: 我所指的Flexbox 是指設置了?display: flex;?或?display: inline-flex;的盒子。不是指單單設置了?display: flex;?的盒子。

例如,設置了?display: flex;?或?display: inline-flex的元素,和BFC一樣,不會被浮動的元素遮蓋,不會垂直外邊距坍塌等等。

而對于設置了?display: inline-flex?的盒子來說,我們可以類比?display: inline-box;行理解。即 一個被行列化后的 Flexbox。它不會獨占一行,但是可以設置寬和高。

但需要注意的是以下幾點細節,Flexbox 布局 和 Block 布局是有細微區別的

  • Flexbox 不支持?::first-line?和?::first-letter?這兩種偽元素
  • vertical-align?對 Flexbox 中的子元素 是沒有效果的
  • float?和?clear?屬性對 Flexbox 中的子元素是沒有效果的,也不會使子元素脫離文檔流(但是對Flexbox 是有效果的!)
  • 多欄布局(column-*)?在 Flexbox 中也是失效的,就是說我們不能使用多欄布局在Flexbox 排列其下的子元素(魚和熊掌不可得兼嘛)
  • Flexbox 下的子元素不會繼承父級容器的寬

flex item(flex 子元素)

CSS解析器會把 定義了?display: flex;?和?display: inline-flex;?的 Flexbox 下的子元素外部裝進一個看不見的盒子里,我們通過排列這些盒子來達到排序、布局、 伸縮的目的。

規范中把這種盒子 稱為?flex item,而子元素中包括了 標簽節點 以及 文本節點。標簽節點很容易理解,需要注意的是文本節點。

默認情況下,flex?會將?連續的文本節點?裝進 flex-item 之中,使文本可以和標簽節點一起排序和定位。

值得注意的是,空格也是文本節點,所以?white-space?會影響Flexbox 中的布局:

flex-item-size 如何計算的

item-size(尺寸)為主軸方向上item的?content?再加上自身的margin?、?border?和?padding?就是這個?item?的尺寸。

1. flex-basis 的優先級比 width[height]: 非auto; 高

如果子元素沒有內容和默認固定寬高,且設置了flex-basisflex-item contentflex-basis來決定,無論width[height]?設置了多少。

(可理解為?flex-basis?比?width[height]: 非auto;的優先級高)

flex-basis的優先級比width[height]高,無論width[height]設置多少,flex-item content都以flex-basis來決定

2.元素存在默認寬高

如果子元素有默認固定寬高(例如input?標簽)、并且設置了?flex-basis,那么它的?content以 固定寬高為下限,如果flex-basis?超過了固定寬高,那么flex-basis則成為其?content,如果flex-basis比固定寬高小,那么以固定寬高為?content

3.元素存在 min-width[height] 或者 max-width[height]

如果flex-item?有min-width[min-height]?的限制,那么flex-item content按照?min-width?值為下限,如果?flex-basis?的值大于?min-width[min-height]?那么flex-item content以?flex-basis?計算。

如果flex-basis?的值小于?min-width[min-height]?那么flex-item contentmin-width[min-height]

如果?min-width[min-height]?的值已經超出了容器的尺寸,那么即使設置了?flex-shrink。 CSS解析器也不會進行將這個item的 content shrink,而是堅持保留它的min-width[min-height]

4.width[height]: auto; 優先級等于 flex-basis。

前面提到,如果給item同時設置了width[height]?和?flex-basis的話。flex-item content以flex-basis來決定。但是實際上默認的?width[height]: auto;?優先級是等于?flex-basis的。

CSS解析器對比兩者的值,兩者誰大取誰 作為item的基本尺寸,如果一個item沒有內容,flex-item content就會以flex-basis來決定。

但是如果item有了內容,且內容撐開的尺寸比flex-basis大,那么flex-item content就會以width[height]: auto;?來決定,且無法被 shrink。反之,如果比flex-basis小,flex-item content就會以flex-basis來決定

idth: auto;?內容長度比?flex-basis?大,則 flex-item content以內容長度來決定,且無法shrink

如果?flex-basis?的長度大于文字內容長度,那么flex-item content以?flex-basis?

Flexbox 布局很棒還是需要深入理解的

?

轉載于:https://www.cnblogs.com/zhouyideboke/p/11327640.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247194.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247194.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247194.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

那些你可能還不知道的新發明

The Wello WaterWheel 對世界上六分之一的人來說,取水是個苦活:步行數小時,排隊等待,負重運送。 而花費在這個基本需求上的時間讓許多兒童不得不輟學,讓女人不能負起責任來處理家務或者工作以取得收入。在很多欠發達地…

AntD中Form的input正則校驗:不能輸入空格

什么是正則表達式? 在編寫處理字符串的程序或網頁時,經常有查找符合某些復雜規則的字符串的需要。正則表達式就是用于描述這些規則的工具。換句話說,正則表達式就是記錄文本規則的代碼。 正則test() 方法 定義和用法 test() 方法用于檢測一…

引用數據類型分類

引用類既是自己定義的一個類,后面應用非常廣泛 類的定義格式 創建java文件,與類名相同 public class 類名{ 數據類型 屬性名稱1; 數據類型 屬性名稱2; … } publicclass Phone { /* * 屬性 */ String brand;// 品牌型號 String …

關于英文郵件一些tips

需要寫的英文郵件多了,就覺得很吃力,尤其是當需要經常寫給同一個人時。希望郵件的開頭、結尾、一些客套的話能有不同的表達~~ 郵件的開頭:感謝讀者是郵件開場白的好辦法。感謝您的讀者能讓對方感到高興,特別是之后你有事相求的情…

react之react-spring動效庫

react-spring具有基于鉤子和基于組件的API,這里將專門針對所有動畫使用具有基本狀態的鉤子. framer-motion也很好用,但是體積2M多,太大了勸退 react-spring才6KB. react-spring npm搜索 老官網react-spring 官網Getting started | React Spring 做了個橫向遍…

Java生鮮電商平臺-電商中海量搜索ElasticSearch架構設計實戰與源碼解析

Java生鮮電商平臺-電商中海量搜索ElasticSearch架構設計實戰與源碼解析 生鮮電商搜索引擎的特點 眾所周知,標準的搜索引擎主要分成三個大的部分,第一步是爬蟲系統,第二步是數據分析,第三步才是檢索結果。首先,電商的搜…

并行批處理多個文件 matlab

%初始化matlab并行運行環境 % Initialize Matlab Parallel Computing Environment CoreNum2; %設定機器CPU核心數量&#xff0c;我的機器是雙核&#xff0c;所以CoreNum2 if matlabpool(size)<0 %判斷并行計算環境是否已然啟動 matlabpool(open,local,CoreNum); %若尚未啟動…

答應我不要問TCP三次握手四次揮手

衍生頭疼問題如下。 請畫出三次握手和四次揮手的示意圖為什么連接的時候是三次握手&#xff1f;什么是半連接隊列&#xff1f;ISN(Initial Sequence Number)是固定的嗎&#xff1f;三次握手過程中可以攜帶數據嗎&#xff1f;如果第三次握手丟失了&#xff0c;客戶端服務端會如…

專業術語常用名詞縮寫中英文對照

A:Actuator 執行器A:Amplifier 放大器A:Attendance員工考勤A:Attenuation衰減AA:Antenna amplifier 開線放大器AA:Architectural Acoustics建筑聲學AC:Analogue Controller 模擬控制器ACD:Automatic Call Distribution 自動分配話務ACS:Access Control System出入控制系統AD:Ad…

推薦!國外程序員整理的機器學習資源大全

本列表選編了一些機器學習領域牛B的框架、庫以及軟件&#xff08;按編程語言排序&#xff09;。 C 計算機視覺 CCV —基于C語言/提供緩存/核心的機器視覺庫&#xff0c;新穎的機器視覺庫OpenCV—它提供C, C, Python, Java 以及 MATLAB接口&#xff0c;并支持Windows, Linux,…

做任務一定要看測試用例

做任務的時候一定要一開始就看測試用例。雖然有的任務自己很熟&#xff0c;但是如果不時時關注測試用例的話&#xff0c;還是容易走偏&#xff0c;到后頭再去修改的話&#xff0c;會浪費不少時間。 轉載于:https://www.cnblogs.com/superhuake/archive/2011/09/09/2172008.html…

深度學習鼻祖杰夫·辛頓及巨頭們的人才搶奪戰

摘要&#xff1a;深度學習已經誕生了數十年時間&#xff0c;但直到近幾年才受到各大科技公司的重視&#xff0c;被認為是硅谷科技企業的未來&#xff0c;今天為大家介紹的是深度學習的開山鼻祖Geoffrey Hinton。在過去的三十年&#xff0c;深度學習運動一度被認為是學術界的一個…

EM算法(Expectation Maximization Algorithm)

文章目錄 1. 前言 2.基礎數學知識2.1.凸函數2.2.Jensen不等式 3.EM算法所解決問題的例子 4.EM算法4.1.模型說明 4.2.EM算法推導 4.3.EM算法收斂性證明 4.4. EM算法E步說明 5.小結 6.主要參考文獻1. 前言 這是本人寫的第一篇博客(2013年4月5日發在cnblogs上,現在遷移過來)&#…

Julia語言:讓高性能科學計算人人可用

摘要&#xff1a;一群科學家對現有計算工具感到不滿&#xff1a;他們想要一套開源系統&#xff0c;有C的快速&#xff0c;Ruby的動態&#xff0c;Python的通用&#xff0c;R般在統計分析上得心應手&#xff0c;Perl的處理字符串處理&#xff0c;Matlab的線性代數運算能力……易…

View Animation

轉載一篇關于view animation的文章 http://blog.csdn.net/nerohoop/article/details/7245909 補充&#xff1a;當啟用animation來改變值的時候&#xff0c;值是立刻就改變了的&#xff0c;然后才開始動畫。 轉載于:https://www.cnblogs.com/mystory/archive/2012/12/18/2824029…

編程能力的四種境界

人類心理學研究中的一個基礎支撐科目就是分析人的潛意識和意識。 弗洛伊德是最早的一位能夠清楚的認定和描述我們的心理活動“領域”的人。 在他這著名的一生的早期&#xff0c;他就指出我們的意識里分“潛意識”&#xff0c;“前意識”&#xff0c;“意識”。 如 果我們想能清…

ファイルアップロード関連のjQueryプラグイン10攻略

ファイルアップロード関連のjQueryプラグイン&#xff11;&#xff10;ファイルアップロードといってもSWFを使ったりAJAXを使ったりと方法が色々あって、いろんなやり方ができるjQueryプラグインです。望みの挙動に近いものを選んでカスタマイズすれば作りたいものが最速で作れ…

HTTP報文(轉)

HTTP報文http://www.cnblogs.com/kissdodog/archive/2013/04/01/2993228.html之前寫過一篇HTML報文&#xff0c;但是感覺寫完之后還是不懂&#xff0c;最近終于有時間開始看《HTTP權威指南》&#xff0c;看完之后覺得還是比之前的理解更加深入了&#xff0c;提取HTTP報文出來做…

C#基礎-應用程序域

文章導讀同一臺計算上的應用程序是通過進程來隔離的&#xff0c;每個應用程序都是加載到不同的進程中&#xff0c;從而達到應用程序的互不影響。操作系統【OS】通過進程控制塊【PCB】感知進程的存在&#xff0c;分析【PCB】的數據結構可以發現&#xff0c;【PCB】維護進程運行的…

Java生鮮電商平臺-微服務入門與服務的拆分架構實戰

Java生鮮電商平臺-微服務入門與服務的拆分架構實戰 剛開始進入軟件行業時還是單體應用的時代&#xff0c;前后端分離的概念都還沒普及&#xff0c;開發的時候需要花大量的時間在“強大”的JSP上面&#xff0c;那時候SOA已經算是新技術了。現在&#xff0c;微服務已經大行其道&a…