CSS阶段五:flex伸缩盒模型,自适应布局

flex/inlineflex 伸缩盒模型(快速布局利器)

该元素即成为伸缩容器(flex container

伸缩容器的子元素自动升级为伸缩项目(flex item

display = flex;

特点:

  • 伸缩项目默认在一行排列。

  • 子元素自动升级为块元素。

  • 所有伸缩项目默认在主轴的 start 处排列。

  • 主轴默认从左到右

  • 侧轴默认从上到下

  • 伸缩项目也可以再次设置为flex,即flex可以互相嵌套。

伸缩容器样式

justify-content

设置主轴排列样式

可选值:

  • flex-start (默认值)
  • flex-end 此时所有的伸缩项目在伸缩容器主轴的end处排列
  • center 所有的伸缩项目位于伸缩容器主轴的中间处
  • space-between 此时伸缩项目沿着伸缩容器的主轴均匀分布
  • space-around 伸缩项目沿着伸缩容器的主轴均匀分布,但是剩余空间会包裹着每个伸缩项目

align-items

设置侧轴对齐方式

  • stretch 每个伸缩项目会沿侧轴被拉伸
  • flex-start 所有伸缩项目位于伸缩容器侧轴start处
  • center 所有伸缩项目位于伸缩容器侧轴中部
  • flex-end 所有伸缩项目位于伸缩容器侧轴end处
  • baseline 主轴中伸缩项目基线最大的那个伸缩项目的基线作为所有伸缩项目的对齐基线

flex-direction

主轴方向

  • row(默认方向)
  • row-reverse 主轴方向从右到左,侧轴方向从上到下
  • column 主轴从上到下,侧轴从右到左
  • column -reverse 主轴从下到上,侧轴从右到左

flex-wrap

伸缩项目在主轴空间不足时是否被压缩

  • nowrap (默认值) 每个伸缩项目都会被按比例被压缩。

      一、需要压缩的宽度
      200 + 200 + 200 – 400 = 200
      二、“总压缩基数”
      200*1 + 200* 1 + 200*1 = 600
      三、每个伸缩项目实际压缩率
      200*1/ 600 =  0.3333
      200*1/ 600 = 0.3333
      200*1/ 600 = 0.3333
      四、每个伸缩项目实际需要压缩空间
      200 * 0.3333 =  66.6
      200 * 0.3333 =  66.6
      200 * 0.3333 =  66.6
      五、每个伸缩项目实际的宽度
      200 – 66.6 = 133.4
      200 – 66.6 = 133.4
      200 – 66.6 = 133.4
    
  • wrap 主轴空间不足时,伸缩项目不会被压缩,自动换行,保持原来的大小。

  • wrap-reverse 让伸缩项目自动换行,保持原来的大小。但此时伸缩项目在主轴flex-start和侧轴flex-end处开始排列

align-content

主轴空间不足时,子项目在侧轴分布样式

  • stretch 伸缩项目会沿侧轴被拉伸
  • flex-start 伸缩项目位于伸缩容器侧轴start处
  • center 伸缩项目位于伸缩容器侧轴中部
  • flex-end 伸缩项目位于伸缩容器侧轴end处
  • space-between 项目位于各行之间留有空白的容器内
  • space-around 项目位于各行之前、之间、之后都留有空白的容器内。

flex-flow

可以设置 flex-flow 来实现 flex-direction 和 flex-wrap 简写。

flex-flow : column wrap 

单个伸缩项目样式

flex-basis

设置元素高度,使用flex-basis为元素指定宽度,效果与width相同

align-self

单个伸缩项目,伸缩容器侧轴的位置

  • stretch 伸缩项目会沿侧轴被拉伸
  • flex-start 伸缩项目位于伸缩容器侧轴start处
  • center 伸缩项目位于伸缩容器侧轴中部
  • flex-end 伸缩项目位于伸缩容器侧轴end处
  • baseline 主轴中伸缩项目基线最大的那个伸缩项目的基线作为所有伸缩项目的对齐基线

order

重新设置伸缩项目在主轴方向的排列顺序,

  • 0 --- 默认值,沿着主轴从start -> end
  • 大于0 重新按order设置的数字排序(start -> end)数值越大越靠后

flex-grow

设置每个伸缩项目如何分配主轴空间,伸缩项目会按比例分配空间大小

  • n 伸缩项目会按照数值比例来分配主轴空间

flex-shrink

设置压缩率,主轴空间不足时伸缩项目会按照压缩率被压缩,默认1

  • n 会按照设置的数值按照比例进行压缩,设置为0是表示项目不会被压缩

自适应布局

左边自适应右边固定宽度

 /*
        需求:
        左侧自适应(随着浏览器窗口宽度的变化而变化)
        右侧固定宽度

        1.两列都需要设置浮动
        2.第一列设置 100% 宽度,同时设置右侧外边距为负,绝对值 = 第二列的宽度
        3.第一列的内容需要一个正常文档流的块元素承载,设置右侧外边距 = 第二列的宽度
    */


    .col-1 {
        width: 100%;
        height: 210px;
        background-color: blue;
        font-size: 72px;
        margin-right: -200px;
        float: left;
    }

    .col-2 {
        width: 200px;
        height: 200px;
        background-color: orange;
        margin-top: 0px;

        float: left;
    }

    .col-left{
        margin-right: 200px;
    }

右边自适应左边固定

    需求:
    右侧自适应(随着浏览器窗口宽度的变化而变化)
    左侧固定宽度

    1.第一列设置固定的宽度,设置左浮动。
    2.第二列使用overflow: hidden 开启BFC,重新计算元素的宽度,(切记不要设置固定,使用浏览器默认值)
    */
.col-1 {
    width: 200px;
    height: 200px;
    background-color: blue;
    float: left;
}
.col-2 {
   /* width:200px;*/
    height: 210px;
    background-color: orange;
    overflow: hidden;
}

两边固定中间自适应

需求:两边固定,中间自适应

    .layout {
        height: 200px;
        background-color: orange;
    }
    .col-left{
        width: 100%;
        float: left;
        height: 200px;
        background-color: pink;
        margin-right: -200px;
    }
    .col-right{
        float: left;
        width: 200px;
        height: 200px;
        background-color: #254282;
    }
    .content{
        margin-right: 200px;
    }

    .col-left-1{
        width: 200px;
        height: 200px;
        float: left;
        background-color: #ff0000;
    }

    .col-left-2{
        height: 210px;
        background-color: #bbbbbb;
        overflow: hidden;
    }

多列等宽

制作多列等宽自适应布局

    1.父元素  display:  table; width: 100%
    2.布局元素(子元素 ) display: table-cell;
    3.子元素之间的空隙,通过一个正常的div分割即可。
    4.如果存在多行,需要在包裹一个 display: table-row(<tr>)

我们推荐在局部布局中使用!不推荐整体布局!

.table-box{
        display: table;
        width: 100%;
    }
    .box {
        height: 200px;
        width: 33.3333333%;
        display: table-cell;
    }
    .box1{
        background-color: red;
    }
    .box2{
        background-color: blue;
    }
    .box3{
        background-color: gold;
    }

    .white-space{
        height: 200px;
        width: 5px;
        background-color: #fff;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容