使用css彈性盒子模型


提示: 當期內容不充實, 修改后再來看吧

以下稱:彈性子元素: 子元素, 彈性容器: 容器

彈性盒子的屬性

1. css彈性盒子模型規定了彈性元素如何在彈性容器內展示

2. 彈性元素默認顯示在彈性容器的同一行內(既:彈性盒子默認包含一行)

3. flex-direction: 規定子元素在容器內的排列順序:

  row: 水平: 左對齊

  row-reverse: 水平 逆序右對齊

  column: 垂直: 上對齊  

  column-reverse: 垂直 逆序下對齊

4. justify-content: 規定子元素在容器內水平方向上的對齊方式

  flex-start: 默認 左對齊

  flex-end: 右對齊

  center: 居中對齊

  space-between: 均勻分布對齊 貼合容器!!!

  space-around: 均勻分布對齊 均勻距離容器!!!

5. align-items規定子元素在容器內縱軸上的對齊方式

  flex-start: 彈性盒子元素的側軸(縱軸)起始位置的邊界緊靠住該行的側軸起始邊界。

  flex-end: 彈性盒子元素的側軸(縱軸)起始位置的邊界緊靠住該行的側軸結束邊界。

  center: 彈性盒子元素在該行的側軸(縱軸)上居中對齊

  baseline: 如彈性盒子元素的行內軸與側軸為同一條,則該值與'flex-start'等效。其它情況下,

        該值將參與基線對齊

  stretch: 如果指定側軸大小的屬性值為'auto',則其值會使項目的邊距盒的尺寸盡可能接近所在行的尺寸,

      但同時會遵照'min/max-width/height'屬性的限制

 

6. flex-wrap: 規定子元素在容器內換行方式 (wrap: 外套,包裝的意思。nowrap不要外套,就一行,wrap:        要外套, 允許換行,包着子元素)

  nowrap: 默認 不換行

  wrap: 換行

  wrap-reverse: 換行 逆序

7. align-content: 規定子元素在容器中垂直方向上的對齊方式, 和justify-content相反

        (前提: 容器內允許換行,既存在多行子元素)

  flex-start: 默認 上對齊

  flex-end: 下對齊

  center: 居中對齊

  space-between: 均勻分布對齊 貼合容器上下!!!

  space-around: 均勻分布對齊 均勻距離容器左右!!!

 

默認特性:

  1. 彈性元素間默認沒有間隙

   2. 彈性容器默認不改變彈性項目寬度

   3. 彈性布局默認左對齊

   4. flex-grow: 1, 則該項目默認拉伸占據該行剩余寬度。 默認值為0, 不拉伸。

   5. 彈性布局默認改變項目的高度, 如果沒有指定項目的高度, 則默認充滿項目高。(若彈性b元素改變了容器寬度, 則彈性a元素也將被拉伸)

   6. align-self指定了單個彈性元素在縱軸上的對其方式, 如果一個個設置該屬性太麻煩, 則可以設置容器的align-items, 所有單個元素的align-self將會繼承這個值。

 

 彈性子元素屬性


1. order: 規定子元素在容器中的排列順序, 用數值表示,越小越靠前, 可謂負數

2. margin: 自動獲取盒子內水平和垂直方向的剩余空間,並設置最完美的距離。

  注: 設置margin:auto可是使子元素在容器內完美居中, 解決了多年來的元素居中問題

3. align-self設置元素自身在容器內縱軸方向上的對齊方式

  flex-start: 默認 上對齊

  flex-end: 下對齊

  center: 居中對齊

  basline: 如彈性盒子元素的行內軸與側軸為同一條,則該值與'flex-start'等效。其它情況下,該值將參與基線對齊

  strench: 拉伸自身和容器高度相同

 4. flex: 規定子元素在容器內如何占據空間,類似於bootstrap的柵格布局,相當於百分比的意思

  數值: 例如有三個子元素 flex值分別為2 1 1 , 則相當於witdh: 50% 25% 25%

       注意: 請使用默認值: auto: 自動拉伸;  none:不拉伸 

 

 

demo: 做一個類似淘寶移動端商品列表項(自如網面試題題):

需求: 

 

HTML:

<div class="container">
  <div class="left">
    <div class="lcontent">
      content
    </div>
  </div>
  <div class="right">
    <p class="title">
    titltitletitletitletitlee titltitletitletitletitlee titltitletitletitletitlee
    </p>
    <p class="content">
      content
    </p>
    <p class="time">
      2018-08-21 10:30
    </p>
  </div>
</div>

 

CSS:

.container {
  display: flex;
  display: -webkit-flex;
  border: 1px solid #ddd;
  width: 100%;
  height: auto;
  
  flex-direction: row;
  justify-content: space-between;
  -webkit-justify-content: space-around;
  align-content: space-around;
  -webkit-align-content: space-around;
}

.container .left, 
.container .right{
  // flex: 1;
  width: 40%;
  margin: 10;
}

.container .left {
  display: flex;
  border: 1px solid #eee;
  background-color: #eee;
  border-radius: 15px;
}

.container .left .lcontent {
  margin: auto;
}


.container .right .title {
  font-weight: bolder;
}

.container .right .content {
  color: #ddd;
  font-size: 14px;
}


.container .right .time {
  
  font-size: 12px;
}

  效果:

* flex-basis和flex-grow的demo

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM