当前位置: 首页 > Web前端 > CSS

前端基本功-响应式布局(flex)

时间:2023-03-31 13:03:53 CSS

本文主要记录自己遇到的一些flex布局案例。简要回顾常见的flex属性。6个常用的容器属性。flex-flow属性是flex-direction属性和flex-wrap属性form的缩写,默认值为rownowrap。flex-direction属性决定了主轴的方向(即项目排列的方向)。默认情况下,flex-wrap项目排列在一条线上(也称为“轴”)。flex-wrap属性定义了轴线不适合时如何换行。justify-content属性定义项目如何在主轴上对齐。align-items属性定义项目如何在交叉轴上对齐。align-content属性定义了多个轴的对齐方式。如果项目只有一个轴,则此属性无效。6个常用的元素属性flex属性是flex-grow、flex-shrink和flex-basis的缩写,默认值为01auto。最后两个属性是可选的。(如果所有item的flex-grow属性都为1,则平分剩余空间(如果有的话)。如果一个item的flex-grow属性为2,其他都为1,则前者占用的剩余空间为将是其他项目的两倍。)flex:1相当于flex-grow:1flex-grow属性定义项目的缩放比例,默认为0,即如果有剩余空间,它不会放大。flex-shrink属性定义了item的缩小比例,默认为1,即如果空间不足,item会缩小。(如果所有item的flex-shrink属性都为1,当空间不足时,它们会按比例缩小。如果一个item的flex-shrink属性为0,其他item为1,则前者不会收缩thereisinsufficientspace.负值对该属性没有影响。)flex-basis属性定义了一个item在分配多余空间之前在主轴(mainsize)上占据了多少空间。浏览器根据这个属性计算主轴是否有多余空间。它的默认值为auto,即项目的原始大小。(可以设置为与width或height属性相同的值(如350px),则项目将占据固定的空间。)order属性定义了项目排列的顺序。值越小,排名越高,默认为0。align-self属性允许单个项与其他项有不同的对齐方式,可以覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性。如果没有父元素,相当于stretch。更详细的基础知识,我贴几个我收藏的链接。软弹性布局就是这么简单!30分钟学会Flex布局demo:Flexbox演示站1.上中下布局,中间自适应header:height=100pxconent:height=autofooter:height=100px

.flexContainer{display:flex;高度:100%;//指定高度flex-direction:column;//布局从上到下排列}.header,.footer{font-size:18px;显示:弹性;//这是justify-content:center;//文本级别居中align-items:center;//文本垂直居中}.header{height:100px;背景:#665aa4;}.main{flex-grow:1;//不知道flex:1和text-align:center的区别;背景:#3dc95d;}.footer{高度:100px;background:#fc430b;}2.多个元素的宽度可以平分给parents,可以配置一行显示的最大元素个数conent:height=auto1
2
3
4567//styl,我就不给大家手动转成css了。mainflex1text-align:centerbackground:#3dc95d.main-bodydisplay:flex//keyflex-wrap:wrap//key.main-itemflex-grow:1//关键的基础知识介绍完了,下面定义元素的缩放比例,默认为0,即如果有剩余空间,则不放大min-width:30%//keywidth:30%andflex-basis:30%;(flex:0030%)有同样的效果,我是这样理解的max-width:100%//keymin-width而max-width只是让元素更灵敏margin:15pxheight:30pxborder:1pxredsolidbackground:#ccctext-align:centerfullyresponsive,可以改变浏览器窗口的宽度,也可以改变。main-item思路来源:记得工作中遇到的一个item...3.圣杯布局conent:height=autoheader:height=100pxfooter:height=100px.flexContainer{display:flex;高度:100vh;}.footer{宽度:50px;背景#CCC}.main{flex-grow:1;背景#3dc95d}.header{宽度150px;background#665aa4order:-1;//在最左边进行排序(main写在html中,方便优先加载主内容区)}4.每行等距并自动包裹列表项123456.container{显示:flex;证明内容:周围空间;//使主轴方向的多余空间均匀分布在两个item之间flex-wrap:wrap;//每行填满后子元素会自动换行}.item{width:30%;//(大多数情况下)和flex一样:0030%;最小宽度:400px;//每个子元素的最小宽度max-width:420px;//每个子元素的最大宽度min-height:360px;}使用justify-content:space-around,justify-content:centerorjustify-content:space-between后有问题,看下最后一张图的最后一行,我要怎么排列解决方案1//在列表末尾添加一串空标签,//我觉得数量最好是一行的最大容量-1//因为子元素的个数可能不确定//在css中定义如下://根据看你的实际情况,有时候可以不加布局,不影响布局。item:empty{height:0;最小高度:0px;//当然,记得重置这些元素border:none;//这些paddings:0......}//当然你也可以用类名.item,随便你换一个//.fix{//width:30.333333%;//height:0;//margin:0;//}缺点是多加一个空标签效果还是满意的方案二:.container{display:flex;弹性包装:包装;黑色round:red;}.item{box-sizing:border-box;宽度:30.333333%;边距:10px1.5%;背景:#eee;height:120px;}这个方法也可以实现响应式,但是如果你.item的子元素的宽度不能小于或大于某个固定宽度。换句话说,如果设置了min-width或max-width,一行就无法被均匀覆盖。这是我目前所知道的两种有用的方法,根据自己的实际情况选择,如果有想法,欢迎留言讨论5.每块用竖线分割,如图电压电平分布行业分类分布电源分布//stylus.pieItemwidth:33.333%min-width:400pxmax-width:50%box-sizing:border-box.pieDivheight:360px&:not(:nth-child(3n)).pieDiv::aftercontent:''width:1pxposition:absoluteheight:360pxtop50%right0transform:translate(0,-50%)background:#cccbackground:-webkit-gradient(radial,0180,0,0180,180,从(#ddd),到(rgba(0,0,0,0)))

猜你喜欢