CSS 之 Flex布局

文章目录

  • CSS 之 Flex布局
    • 1、Flex布局 vs 网格布局 (1D vs 2D)
    • 2、Flex属性
      • 1)flex-direction属性 & 排列方向
      • 2)flex控制横纵轴 & 排列顺序(单/双项目)
        • a)理解justify-content & align-items
        • b)理解justify-content :space-between
        • c)for循环排列卡片
    • 3、Flex响应式布局

1、Flex布局 vs 网格布局 (1D vs 2D)

个人理解Flex是一维的布局(弹性框),栅格布局是二维布局(网格);两者相比,Flex布局通过定义了一些排版规则,来弥补一维布局存在的不足,可以用来实现网格二维布局同样的效果,实现起来较为灵活

1、CSS3之新特性grid栅格布局:【行row和列column】都自己控制,完全基于CSS控制(未来的主流趋势,最新的浏览器才兼容)

2、float模拟栅格布局:核心控制【列】的一维布局【使用整体:目前市面上最流行的模拟栅格布局,大部分框架都是基于此】

2、flex布局:核心是控制【行的内部布局】形成的一维布局【适合局部:目前市面上最流行的局部布局,大部分框架都开始支持】

参考:https://blog.csdn.net/weixin_43343144/article/details/89046779;flex实现网格效果_网格还是Flex?

2、Flex属性

1)flex-direction属性 & 排列方向

flex的flex-direction属性,通过row,column可以调整排列方向,如果不设置每个元素的width,height,则自适应调整。

这里举个简单例子

先对flex的css样式进行二次封装

// flex 横向排列
.flex_row {display: flex !important;flex-direction: row !important;// flex: 1;
}//flex 纵向排列
.flex_column {display: flex !important;flex-direction: column !important;
}// 均为分布
.flex_between {justify-content: space-between !important;
}

下面是简单的flex布局

<!-- 培训管理详情内容 -->
<div class="card_bg1 flex_row">   //下面第一级div均为按行排列<div class="flex_column">   //下面的第一级div均为按列排列<div class="card_bg1">xxxxxxxxxxxxxxxxxx</div><div class="card_bg1">xxxxxxxxxxxxxxxxxx</div><div class="card_bg1">xxxxxxxxxxxxxxxxxx</div></div><div class="card_bg1">xxxxxxxxxxxxxxxxxx</div><div class="card_bg1">xxxxxxxxxxxxxxxxxx</div>
</div>

效果图如下

2)flex控制横纵轴 & 排列顺序(单/双项目)

a)理解justify-content & align-items

对于单项目(可以遍历循环按照某个顺序进行排列绘制多个单项目

单项目:
justify-content: flex-start/center/flex-end;  //控制x轴
align-items: flex-start/center/flex-end;  //控制y轴

对于双项目

双项目:
justify-content: space-between   //均匀分布(分别左右对齐)

为了方便css的flex样式的使用,可以将其进行二次封装成class

//二次封装成类
// 从左排列
.flex_j_start {justify-content: flex-start !important;
}
// 从右排列
.flex_j_end {justify-content: flex-end !important;
}//处于x轴上方方向位置
.flex_a_start {align-items: flex-start !important;
}//处于x轴下方方向位置
.flex_a_end {align-items: flex-end !important;
}
b)理解justify-content :space-between

该属性的作用是使得所有元素均匀分布,且各元素间距相同

参考Flex 布局教程:实例篇

.box {display: flex;flex-direction: column;justify-content: space-between;align-items: center;
}

.box {display: flex;flex-direction: column;justify-content: space-between;
}

接下来看看space-between在实际中是怎么使用的

例子1:

<!-- 培训详情主题栏 --><div class="card_bg flex_row"><!-- 培训详情按钮组 --><el-form :inline="true" class="wrap_form"><!-- 按钮组 --><div class="Button_group"><el-form-item><el-button class="btn_style icon-short-btn" @click="pageBack()"><svg-iconicon-class="arrow-left"/>返回</el-button></el-form-item></div><div class="font_style"> 培训详情 </div><!-- 搜索组 --><div class="Search_group"><el-form-item><el-button class="icon-short-btn"><svg-iconicon-class="edit"@click="editBtn(scope.row)"style="color:white;"/>编辑</el-button></el-form-item></div></el-form></div>

其中wrap_form封装了justify-content: space-between;属性,效果如下:

如果不使用flex_between,则效果如下:

例子2:

如果不止两个元素,如下面这个页面:4个元素在盒子内均匀分布

如果去掉flex_between,则紧贴在一起了

c)for循环排列卡片

该例子通过for循环绘制卡片(会循环输出v-for所在的div),主要用到的flex样式flex_row 按行排列,flex_warp满行换行,flex_j_start从左排列。

        <!-- 卡片视图 --><div class="wrap_card_person flex_row flex_warp flex_j_start"><divv-for="item in trainManage_obj.trainingManagePersonals":key="item.id"class="dir_car"><div class="car_name flex_row"><img :src="item.photo" @error="handleError($event)" /><div class="car_name_div flex_column"><h3>{{item.user_name}}</h3><p class="serviceLife flex_column"><span>职位:</span>{{item.position}}</p></div></div><ul class="car_information flex_row flex_between"><li class="flex_column"><span>联系方式:</span>{{item.contact}}</li></ul><div class="car_remark"><h3>备注</h3><p>{{item.remark}}</p></div><div class="car_type"><span></span></div></div></div>

其中flex_row flex_warp flex_a_content flex_j_start flex_between是对css的flex布局样式的二次封装类,而wrap_card_person是自定义卡片的css样式,主要设置每张图片的width,height

// 多列布局防止换行
.flex_a_content {align-content: flex-start !important;
}// 从左排列
.flex_j_start {justify-content: flex-start !important;  //!important表示样式优先级最高
}// 当width,height达到100%时,会自动换行,而不是去压缩div的width,height
.flex_warp {flex-wrap: wrap !important;
}// flex 横向排列
.flex_row {display: flex !important;flex-direction: row !important;// flex: 1;
}// 均为分布
.flex_between {justify-content: space-between !important;
}.wrap_card_person {height: 100%;width: 100%;overflow-y: auto;.dir_car {border: 2px solid #131415;width: calc(100% / 4);  //每行4个卡片,相比于设置px,css的calc()可以自适应调整布局height: calc(100% / 3);...}
}

效果图如下

参考

  • Flex 布局教程:实例篇
  • 2分钟掌握flexbox 布局 - 知乎
  • Flex 布局语法教程

3、Flex响应式布局

非响应式布局存在的问题:

Flex由于是一维的布局(横坐标,纵坐标且单方向),如果要实现非均分布局(没办法使用justify-content: space-between),则可以用padding/margin来撑开,参考 解决flex布局中 space-between方法的排版问题。但是这会存在问题,当笔记本屏幕分辨率不同时,页面的布局会有所不同;当使用缩放时,页面布局也会跟着变化

要想实现Flex响应式布局,就要用到css的**width: calc(100% / 2)**来实现,页面效果如下:

参考

  • CSS3中width属性的width: calc(100% - 20px); 使用问题
  • flex布局 响应式布局

CSS 之 Flex布局相关推荐

  1. CSS的Flex布局的学习

    CSS的Flex布局的学习 哔哩哔哩链接:https://www.bilibili.com/video/BV1iE411y7hb?p=131 Flex(弹性盒.伸缩盒)是CSS中的又一种布局手段,它主 ...

  2. css使用flex布局实现骰子1~6

    css使用flex布局实现骰子1~6 效果 Html <body><div class='div1 border'><span></span></ ...

  3. 通过游戏来学习CSS的Flex布局

    在复习Flex 布局的时候发现的了几个有趣的小游戏,在这里分享并记录几个有难度的答案 1. Flexbox Froggy 通过调整CSS样式来使各种青蛙回到对应的荷叶上,游戏默认难度为Beginner ...

  4. css之flex布局

    flex布局是css3中的重要布局方式,称为"弹性布局",每次想到它主要是遇到元素垂直居中.元素宽高自适应的问题,这些问题在flex中都能过简单设置就解决,它更像是原生APP中的布 ...

  5. 详解CSS的Flex布局

    本文由云+社区发表 Flex是Flexible Box 的缩写,意为"弹性布局",是CSS3的一种布局模式.通过Flex布局,可以很优雅地解决很多CSS布局的问题.下面会分别介绍容 ...

  6. 网页HTML5制作flex布局骰子,css利用flex布局画骰子的六个面

    主要是利用flex的一些特性来写的,掌握好flex基础,写出筛子的几个页面不是问题. 推荐去我写的一个博客中有flex的小练习 线上练习flex布局 html css .shaizi { width: ...

  7. CSS(二)——Flex布局 边框 渐变 过渡 动画

    学习CSS第二周的总结 一. Flex布局 容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis).主轴的开始位置(与边框的交叉点)叫做main start,结束位 ...

  8. 常用CSS与Flex布局、媒体查询、JS事件控制css、VUE对象语法、Gride布局(待补全) CSS权重 页面适配笔记本缩放

    css属性就是要用的多用的熟 知道的多 就像一本工具书 除了基础原理 剩下的就是知识面了 极力推荐MDN用过的人都说好~ 页面适配笔记本等自带缩放的场景 let t = window.devicePi ...

  9. css中flex布局

    一.Flex布局是什么? Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为Flex布局. .box{displ ...

最新文章

  1. 在双系统电脑再安装一个ubuntu18.04
  2. HashMap.values().addAll()异常
  3. SAP ABAP STOP,EXIT,CHECK,RETURN
  4. 解释afterPropertiesSet
  5. 为什么 PHP 中 this 和 self 访问变量的写法不一样?
  6. 设置SSH免密码自动登录(使用别名)
  7. 静态代码检查工具简介
  8. Java基础---学Java怎么能不了解多线程---Lambda表达式
  9. Testing - Codereview Checklist
  10. 如何删除动态数组的指定元素 - 回复 Splendour 的部分问题
  11. 计算机加域后数据库无法登录,客户端多台计算机登录域失败,显示如下
  12. 怎么给视频打马赛克?视频剪辑时快速添加马赛克的方法
  13. mysql utf8占几个字节_utf-8的中文是一个字符占几个字节
  14. Dubbo-Adaptive实现解析
  15. 软件测试行业中ta表示什么意思,软件测试架构师(TA)的职位特点
  16. 指令下载Google网盘数据遇到的无法连接问题
  17. vue出现client:172 [WDS] Disconnected!
  18. 远程协作从“特殊”到“常态”,你可能需要的会议平板测评
  19. 专利修改:ps换填充色
  20. 华为magic ui就是鸿蒙系统,Magic UI系统是什么?Magic UI和EMUI的区别

热门文章

  1. 关于使用Vivado在仿真时报错的问题
  2. python实现电话号码映射
  3. python 写脚本 获取qq好友地理位置_Python获取统计自己的qq群成员信息的方法
  4. 贝叶斯决策理论(一):两种基本决策规则
  5. 实验课第四次随堂测试
  6. msn名字大集合(转)
  7. 《Java语言程序设计》 课程分析与总结(上)---我为什么这样设计考试试卷?
  8. Chrome浏览器配置阿里云DNS方法
  9. 硬件行业知识体系概要
  10. 耳机四根线的图解_耳机线材编法汇总