1. 程式人生 > 其它 >二分查詢法02:二分查詢法的變種

二分查詢法02:二分查詢法的變種

目錄

flex佈局

簡單樣例:

<div class="container">
  <div class="div">我是一個div</div>
  <div class="div">我是一個很多字div</div>
  <div class="div">我是一個更多字而且第三個div</div>
</div>
<style>
.container{
  display: flex;
}
.div{
  border: 1px solid red;
  flex: 1;
}

</style>

針對塊元素和行內元素有兩種取值:

.container {
    display: flex | inline-flex;       //可以有兩種取值
}

flex容器屬性

flex-direction [row | row-reverse | column | column-reverse]

決定主軸的方向(即專案的排列方向)

flex-wrap [nowrap | wrap | wrap-reverse]

決定容器內專案是否可換行;預設情況下,專案都排在主軸線上不換行

nowrap (預設值)不換行,即當主軸尺寸固定時,當空間不足時,專案尺寸會隨之調整而並不會擠到下一行

flex-flow

flex-direction 和 flex-wrap 的簡寫形式,兩個屬性的組合,例如: row nowrap;

justify-content [flex-start | flex-end | center | space-between | space-around]

定義專案在主軸的對齊方式

分別是:(預設值)左對齊,右對齊,居中,兩端對齊(專案間的間隔相等,邊緣無間隔),每個專案兩側的間隔相等(最左和最右邊緣有間隔,專案之間間隔比專案與邊緣的間隔大一倍)

align-items [flex-start | flex-end | center | baseline | stretch]

定義了專案在交叉軸上的對齊方式(不同的專案在大小/交叉軸方向長度不同時的對齊方式)

預設值為 stretch ,即如果專案未設定高度或者設為 auto,將佔滿整個容器的高度;flex-start:交叉軸的起點對齊;flex-end:交叉軸的終點對齊;center:交叉軸的中點對齊;baseline: 專案的第一行文字的基線對齊

align-content [flex-start | flex-end | center | space-between | space-around | stretch]

定義多根軸線的對齊方式,如果專案只有一根軸線,那麼該屬性將不起作用

說明:當我們 flex-wrap 設定為 wrap 的時候,容器可能會出現多條軸線,這時候就需要去設定多條軸線之間的對齊方式;以水平主軸為例,並且會換行:

stretch:平分容器的垂直方向上的空間,如果沒有設定高度將會撐開整個容器;flex-start:多個主軸線全部在交叉軸上的起點對齊;flex-end:軸線全部在交叉軸上的終點對齊;center:軸線全部在交叉軸上的中間對齊;space-between:軸線兩端對齊,之間的間隔相等,即剩餘空間等分成間隙;space-around:每個軸線兩側的間隔相等,所以軸線之間的間隔比軸線與邊緣的間隔大一倍圖示

專案/元素的屬性

order屬性

.item {
    order: <integer>;
}

定義專案的排列順序

flex-grow

定義專案的放大比例

如果所有專案的flex-grow屬性都為1,則它們將等分剩餘空間(如果有的話);如果一個專案的flex-grow屬性為2,其他專案都為1,則前者佔據的剩餘空間將比其他項多一倍(劃分剩餘空間)

flex-shrink

定義專案的縮小比例

預設值: 1,即如果空間不足,該專案將縮小,負值對該屬性無效

如果所有專案的 flex-shrink 屬性都為 1,當空間不足時,都將等比例縮小。 如果一個專案的 flex-shrink 屬性為 0,其他專案都為 1,則空間不足時,前者不縮小(當空間不足時的縮小比例)

flex-basis

定義在分配多餘空間之前,專案佔據的主軸空間(瀏覽器根據這個屬性,計算主軸是否有多餘空間)

它的預設值為auto,即專案的本來大小,item 的寬高取決於 width 或 height 的值;當主軸為水平方向的時候,當設定了 flex-basis,專案的寬度設定值會失效,flex-basis 需要跟 flex-growflex-shrink配合使用才能發揮效果。(當 flex-basis值為 0 %時,是把該專案視為零尺寸的,並且來計算剩餘空間)

flex

flex-grow flex-shrink flex-basis多個屬性的簡寫;預設值0 1 auto

該屬性有兩個快捷值:auto (1 1 auto) 和 none (0 0 auto)

預設值和特殊情況屬性值

點選檢視程式碼
  1. 當 flex 取值為一個非負數字, 即為flex-grow屬性值,後兩個預設取1和0%:
.item {flex: 1;}
.item {
    flex-grow: 1;
    flex-shrink: 1;
    flex-basis: 0%;
}
  1. 當flex取值為一個長度或百分比,則視為flex-basis值,flex-grow取1,flex-shrink取1:
.item-1 {flex: 0%;}
.item-1 {
    flex-grow: 1;
    flex-shrink: 1;
    flex-basis: 0%;
}

.item-2 {flex: 24px;}
.item-2 {
    flex-grow: 1;
    flex-shrink: 1;
    flex-basis: 24px;
}
  1. 當flex取值為兩個非負數字,則分別視為flex-grow和flex-shrink的值,flex-basis 取0%:
.item {flex: 2 3;}
.item {
    flex-grow: 2;
    flex-shrink: 3;
    flex-basis: 0%;
}

align-self [auto | flex-start | flex-end | center | baseline | stretch]

允許單個專案有與其他專案不一樣的對齊方式

單個專案覆蓋 父元素的align-items 定義的屬性 ,預設值為auto,表示繼承父元素的 align-items屬性,如果沒有父元素,則等同於 stretch

這個跟 align-items 屬性時一樣的,只不過 align-self是對單個專案生效,而 align-items 則是對容器下的所有專案生效的

問題和實現

  1. flex:1flex:auto的區別

flex:1等價於:

flex-grow:1
flex-shrink:1
flex-basis:0%   /*視為零尺寸,來計算剩餘空間並放大*/

flex:auto等價於:

flex-grow:0
flex-shrink:1
flex-basis:auto /*分配空間前,初始的專案大小為本身大小*/
  1. https://zhuanlan.zhihu.com/p/60482225