写在前面:

我是「沸羊羊_」,昵称来自于姓名的缩写 fyy ,之前呕心沥血经营的博客因手残意外注销,现经营此账号。
本人是个小菜,正向着全栈工程师的方向努力着,文章可能并不高产,也很基础,但每写一篇都在用心总结,请大佬勿喷。
如果您对编程有兴趣,请关注我的动态,一起学习研究。
感谢每位读者!

文章目录

  • Flex简介
  • 其他布局
    • table布局
    • float布局
    • absolute布局
    • grid布局
  • Flex布局
    • 容器属性
      • 元素结构
      • 使用flex布局
      • 改变主轴方向 - flex-direction属性
      • 改变换行方式 - flex-wrap属性
      • flex-flow属性(flex-directive和flex-wrap简写)
      • 主轴对齐方式 - justify-content
      • 交叉轴对齐方式 - align-items
      • 多根轴线对齐方式 - align-content
    • 子元素属性
      • 子元素属性 -- order
      • 子元素属性 -- flex-grow
      • 子元素属性 -- flex-shrink
      • 子元素属性 -- flex-basis
      • 子元素属性 -- flex
      • 子元素属性 -- align-self
  • 最后

Flex简介

页面布局的传统解决方案是基于盒状模型,使用 display属性+position属性+float属性,但对于特殊布局非常不方便。直到2009年,W3C提出了解决方案-----Flex布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,意味着,现在可以很安全的使用这项功能。

Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。

任何一个容器都可以指定为Flex布局。

注意,设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效。

其他布局

table布局

在实际的项目开发过程中,不建议用table进行布局。

缺点:

  • table 比其他html标签占更多的字节。造成下载时间延迟,占用服务器更多的流量资源(代码冗余)
  • table 会阻挡浏览其渲染引擎的渲染顺序,会延迟页面的生成速度,让用户等待时间更久。
  • 灵活性差,一旦设计确定,后期很难通过CSS让它展现新的面貌。
  • 不利于搜索引擎抓取信息,直接影响到网站的排名

优点:

  • 兼容性好
  • 容易上手

float布局

float 属性定义元素在哪个方向浮动。

缺点:

  • 脱离文档流,需要清除浮动,高度塌陷(float的破坏性主要是指它会使父容器的高度塌陷,也就是父元素在高度计算的时候会忽略浮动的元素)。

优点:

  • 兼容性好,比较简单。

absolute布局

relative属性:脱离文档流,但保留占位符,其偏移位置是相对于本身在正常文档流中时的位置

脱离文档流是说设置了relative属性之后,元素不在z-index:0;的正常文档流中,其z-index的值>0,但保留占位符,就是在正常文档流中位置保留着,后继元素不能占位,然后相对于本身正常位置进行偏移。

缺点:

脱离文档流,会导致后续元素全部脱离文档流,可用行差。

grid布局

Grid 布局是 CSS 中最强大的布局系统。与 flexbox 的一维布局系统不同,CSS Grid 布局是一个二维布局系统,意味着它可以同时处理列和行。

Flex布局

容器属性

元素结构

效果:

<template><div class="body"><div class="container"><div class="one">one</div><div class="two">two</div><div class="three">three</div></div></div>
</template><style scoped>
.body {margin: 0;padding: 0;
}
.container {width: 300px;background: #999;margin: 50px auto;
}
.one {width: 100px;height: 50px;background-color: #375;
}
.two {width: 100px;height: 50px;background-color: #854;
}
.three {width: 100px;height: 50px;background-color: #489;
}
</style>

使用flex布局

display:flex

因为flex布局默认主轴方向为 row ,以行为主轴,所以内容在主轴的起点和终点两根轴线之间。


改变主轴方向 - flex-direction属性

主轴方向: flex-direction: column;


把 主轴方向改为 column后,以列为主轴,行为交叉轴,所以内容在主轴的两根轴线之间。

主轴方向:flex-direction: column-reverse;

以列为主轴,将排列方式反转,以原点为起点。


改变换行方式 - flex-wrap属性

换行:flex-wrap:wrap;

换行:flex-wrap:wrap-reverse;


flex-flow属性(flex-directive和flex-wrap简写)

以行为主轴,换行:flex-flow:row wrap;

以行为主轴,不换行:flex-flow:row nowrap;

以列为主轴,换行:flex-flow: column wrap;

以列为主轴,不换行:flex-flow: column nowrap;


主轴对齐方式 - justify-content

行为主轴,左对齐(默认值): justify-content: flex-start;

行为主轴,右对齐: justify-content: flex-end;

行为主轴,居中: justify-content: center;

行为主轴,两端对齐,元素之间间隔相等: justify-content: space-between;

行为主轴,元素边框两侧间隔相等,元素之间间隔比元素边框间隔大一倍: justify-content: space-around;

列为主轴,左对齐(默认值): flex-direction: column; justify-content: flex-start;

列为主轴,右对齐: flex-direction: column; justify-content: flex-end;

列为主轴,居中: flex-direction: column; justify-content: center;

列为主轴,两端对齐,元素之间间隔相等: flex-direction: column; justify-content: space-between;

列为主轴,元素边框两侧间隔相等,元素之间间隔比元素边框间隔大一倍: flex-direction: column; justify-content: space-around;


交叉轴对齐方式 - align-items

列为交叉轴,左对齐(默认值): align-items: flex-start;

列为交叉轴,右对齐: align-items: flex-end;

列为交叉轴,居中: align-items: center;

列为交叉轴,以元素第一行文字基线对齐: align-items: baseline;

列为交叉轴,取消元素高度将占满整个容器高度(默认值): align-items: stretch;

行为交叉轴,左对齐(默认值): flex-direction: column; align-items: flex-start;

行为交叉轴,右对齐: flex-direction: column; align-items: flex-end;

行为交叉轴,居中: flex-direction: column; align-items: center;

行为交叉轴,以元素第一行文字基线对齐: flex-direction: column; align-items: baseline;

行为交叉轴,取消元素高度(默认值): flex-direction: column; align-items: stretch;

多根轴线对齐方式 - align-content

注意:容器内必须有多行元素,align-content 属性才能渲染出效果。

子元素属性

子元素属性 – order

order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。

.one {order: 2;
}
.two {order: 1;
}
.three {order: 1;
}

子元素属性 – flex-grow

flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。

如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

.one {flex-grow: 1;
}
.two {flex-grow: 2;
}
.three {flex-grow: 1;
}

子元素属性 – flex-shrink

flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。数值越大,相对比例越小。

如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。

负值对该属性无效。

// case 1
.one {flex-shrink: 3;
}
.two {}
.three {}

// case 2
.one {flex-shrink: 0;
}
.two {}
.three {}

子元素属性 – flex-basis

flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。

它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。

.one {flex-basis: 500px;
}
.two {}
.three {}

子元素属性 – flex

flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。

.one {flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}

该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。

建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。

子元素属性 – align-self

align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

//子元素容器
.container {display: flex;align-items: center;
}
.one {align-self: flex-start;
}
.two {}
.three {}

该属性可能取6个值,除了auto,其他都与align-items属性完全一致。

最后

以上为小编学习总结记录,如有错误,请大佬指出,不胜感激。

Flex布局-从了解到使用只需5min相关推荐

  1. flex 单独一行_Flex布局从了解到使用只需5min

    作者:沸羊羊_ https://blog.csdn.net/weixin_42653522/article/details/106940004 Flex简介 页面布局的传统解决方案是基于盒状模型,使用 ...

  2. 你不能只会flex居中布局,精制动画讲解所有flex布局方式,通俗易懂教程

    flex布局相信很多人都已经有不少了解,其优势和作用被越来越多的开发者所喜爱,网上也有很多关于关于flex的介绍和教程.但是根据笔者的面试经验发现,很多人尤其是初中级开发者对flex布局都仅仅停留下c ...

  3. 设置flex-shrink:0. flex布局只占位,不占空间

    问题: 这个汉堡按钮把文字给压住了 解决方法: 在汉堡结构前面放一个空的 div元素进行占位 问题: 这个汉堡按钮把文字给压住了 解决方法: 在汉堡结构前面放一个空的 div元素进行占位 因为咱们添加 ...

  4. 你不能只会flex居中布局,精制动画讲解所有flex布局方式!通俗易懂纯干货教程!...

    flex布局相信很多人都已经有不少了解,其优势和作用被越来越多的开发者所喜爱,网上也有很多关于关于flex的介绍和教程.但是根据笔者的面试经验发现,很多人尤其是初中级开发者对flex布局都仅仅停留下c ...

  5. 彻底弄懂flex布局

    目前在不考虑IE以及低端安卓机(4.3-)的兼容下,已经可以放心使用flex进行布局了.什么是flex布局以及它的好处,这里就不再赘述. 在这篇文章里,想说说flex布局的属性语法及其细节.那么网上也 ...

  6. 使用 Flex 布局与其他普通布局的简单对比

    最近使用 flex 布局来做各种居中真的带来了不少方便,现在来总结一下平时的普通布局是怎样使用 flex 布局来实现一样的效果. 一.左右 1:1 布局 布局: <div class=" ...

  7. 学习flex布局(弹性布局)

    Flex是Flexible Box的缩写,意为弹性布局.是W3C早期提出的一个新的布局方案.可以便捷的实现页面布局,目前较高版本的主流浏览器都能兼容,兼容情况如下: Flex在移动端开发上已是主流,比 ...

  8. JavaScript 5/30:Flex Panel Gallery即FLEX布局的图片库

    JavaScript30 为Wes Bos推出的一项为期30天的挑战,旨在帮助人们用纯JavaScript来实现效果,初学者若想在JS方面快速精进,不妨一试.本题为第五题. 实现效果 点击任意一张图片 ...

  9. CSS3 建立弹性盒布局 Flex布局

    弹性盒布局模型中引入了一些新的属性,只要设置好相应属性,盒子就具有弹性,在改变浏览器窗口大小时,盒子大小也会自动发生变化.并且,盒子的大小由浏览器自动计算,使页面布局更加灵活.更加简单,可以很轻松创建 ...

最新文章

  1. 2、安装ICS(Internet Component Suite)控件
  2. spring boot里面的三种配置文件。
  3. UOJ.311.[UNR#2]积劳成疾(DP)
  4. Spring-AOP @AspectJ切点函数之@within()和@target
  5. android执行main函数,AndroidStudio执行main方法报错
  6. 打破双亲委派机制有什么用_被打破的双亲委托机制
  7. (C#基本语法)2.类型
  8. 程序员编程艺术:第五章、寻找满足和为定值的两个或多个数
  9. 比亚迪汉鸿蒙系统测评_深度:预判比亚迪汉EV电驱动系统技术状态
  10. LINUX下安装svn客户端
  11. 下载徐小明新浪博客全部博文链接
  12. 【Zigbee】进阶篇(2) Zigbee协议栈中OSAL的执行流程
  13. java通过JNI调用DLL文件
  14. actviti 工作流核心技术和实战-学习笔记(一)什么是工作流
  15. C# 通过api 下载sharepoint中的文件
  16. RCWL-0516微波雷达感应开关
  17. openmp crunching
  18. OpenCASCADE:OCCT应用框架OCAF之XML支持
  19. STM32G030C8T6读写flash
  20. BIMC中国最权威的电子商务托管运营商

热门文章

  1. ios12最后一个正式版_ios12正式版哪里下载
  2. java 热词推荐搜索实现,Flink 热词统计(1): 基础功能实现
  3. 视频插帧各类损失函数汇总
  4. html5游戏开发马赛克对比,canvas实现图片马赛克的示例代码
  5. 限时分享:汇聚全平台资源,八个黑科技资源渠道
  6. oracle 将excel数据导入多个表,5种从Excel数据导入Oracle方法
  7. HBuilderX中使用模拟器
  8. 【课件制作软件】Focusky教程 | 如何编辑图表?
  9. 照片恢复哪个软件好终极评定结果
  10. web网页浏览器唤起wpf,winform exe桌面程序,并跳转到指定页面