CSS 之 Flex布局
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布局相关推荐
- CSS的Flex布局的学习
CSS的Flex布局的学习 哔哩哔哩链接:https://www.bilibili.com/video/BV1iE411y7hb?p=131 Flex(弹性盒.伸缩盒)是CSS中的又一种布局手段,它主 ...
- css使用flex布局实现骰子1~6
css使用flex布局实现骰子1~6 效果 Html <body><div class='div1 border'><span></span></ ...
- 通过游戏来学习CSS的Flex布局
在复习Flex 布局的时候发现的了几个有趣的小游戏,在这里分享并记录几个有难度的答案 1. Flexbox Froggy 通过调整CSS样式来使各种青蛙回到对应的荷叶上,游戏默认难度为Beginner ...
- css之flex布局
flex布局是css3中的重要布局方式,称为"弹性布局",每次想到它主要是遇到元素垂直居中.元素宽高自适应的问题,这些问题在flex中都能过简单设置就解决,它更像是原生APP中的布 ...
- 详解CSS的Flex布局
本文由云+社区发表 Flex是Flexible Box 的缩写,意为"弹性布局",是CSS3的一种布局模式.通过Flex布局,可以很优雅地解决很多CSS布局的问题.下面会分别介绍容 ...
- 网页HTML5制作flex布局骰子,css利用flex布局画骰子的六个面
主要是利用flex的一些特性来写的,掌握好flex基础,写出筛子的几个页面不是问题. 推荐去我写的一个博客中有flex的小练习 线上练习flex布局 html css .shaizi { width: ...
- CSS(二)——Flex布局 边框 渐变 过渡 动画
学习CSS第二周的总结 一. Flex布局 容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis).主轴的开始位置(与边框的交叉点)叫做main start,结束位 ...
- 常用CSS与Flex布局、媒体查询、JS事件控制css、VUE对象语法、Gride布局(待补全) CSS权重 页面适配笔记本缩放
css属性就是要用的多用的熟 知道的多 就像一本工具书 除了基础原理 剩下的就是知识面了 极力推荐MDN用过的人都说好~ 页面适配笔记本等自带缩放的场景 let t = window.devicePi ...
- css中flex布局
一.Flex布局是什么? Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为Flex布局. .box{displ ...
最新文章
- 在双系统电脑再安装一个ubuntu18.04
- HashMap.values().addAll()异常
- SAP ABAP STOP,EXIT,CHECK,RETURN
- 解释afterPropertiesSet
- 为什么 PHP 中 this 和 self 访问变量的写法不一样?
- 设置SSH免密码自动登录(使用别名)
- 静态代码检查工具简介
- Java基础---学Java怎么能不了解多线程---Lambda表达式
- Testing - Codereview Checklist
- 如何删除动态数组的指定元素 - 回复 Splendour 的部分问题
- 计算机加域后数据库无法登录,客户端多台计算机登录域失败,显示如下
- 怎么给视频打马赛克?视频剪辑时快速添加马赛克的方法
- mysql utf8占几个字节_utf-8的中文是一个字符占几个字节
- Dubbo-Adaptive实现解析
- 软件测试行业中ta表示什么意思,软件测试架构师(TA)的职位特点
- 指令下载Google网盘数据遇到的无法连接问题
- vue出现client:172 [WDS] Disconnected!
- 远程协作从“特殊”到“常态”,你可能需要的会议平板测评
- 专利修改:ps换填充色
- 华为magic ui就是鸿蒙系统,Magic UI系统是什么?Magic UI和EMUI的区别