Flex布局部分属性困惑解析

开始

最近研究一个框架,刚好里面也实现了flex布局的算法,虽然平时也用到flex做一些简单的布局,但是深入到算法实现的时候,发现自己对flex某些概念倒是没那么清晰,立马谷歌把几个flex涉及的属性都好好理清一下,权当一个自我梳理。

main-axis和cross-axis

main其实跟flex-direction这个属性相当有关系,关系如下图:

根据flex-direction的值不同,main-axis方向相应也不同。
既然有方向这个概念,这个时候justify-content属性(justify-content主要负责调整main-axis上元素的布局),在取值为flex-start和flex-end时就要注意了。
而cross-axis是垂直于main-axis的。

  • 当flex-direction取值为row或者row-reverse时cross-axis方向是由下往上。
  • 当flex-direction取值为column或者column-reverse时cross-axis方向是由左往右。

align-items和align-content

首先align-item和align-content都是应用在cross-axis上的元素。
flex布局默认情况下元素是不会换行的,这个时候就是align-items起作用的时候,但是当有多行的情况时,align-items的表现就有点令人失望了。例如你期待是这样一个网格的布局:

但是实际会是这样的效果:

这个网格怎么看都怪怪的有木有。
这个时候就是align-content属性大显神威的时候了,align-content主要应用在存在多行的场景下,但是只有单行的时候,它就失去作用了。

flex-basis

flex-basis可以说是一个并太起眼的属性但是确有很大的意义。
flex-basis的作用,主要在与flex计算剩余空间时起作用,如果你设置flex-basis为一个明确的大小,在计算剩余空间时会先去减去这一部分,然后根据剩余空间为正或为负去应用flex-grow或flex-shrink进行缩放。
当flex-basis是默认值auto时,flex-basis等同于元素的自身宽度(例如你设置了width就是该设置的值,如果width也为auto,那就等同于元素内容的宽度)。
当flex-basis为0时,就等同于完全依赖于flex-grow的比例和剩余空间的大小去分配。

额外点

计算剩余空间时,padding, margin, border和flex-basis是事先扣除,再根据flex-grow去分配空间的。
justify-content为space-around时,元素和父元素的间隙是元素与元素间的间隙的一半。

原文地址:https://www.cnblogs.com/10yearsmanong/p/12207786.html

时间: 2024-10-11 14:15:27

Flex布局部分属性困惑解析的相关文章

flex布局justify-content属性和align-items属性设置

前言: flex最常用的就是justify-content和align-items了,这里把这两个属性介绍下,大家更多关于flex布局可以查看阮一峰的日志,写的非常清楚! 阮一峰flex布局的日志:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html 1.justify-content(在父元素设置)     设置弹性盒子元素在主轴(横轴)的对齐方式. 取值: justify-content: flex-start | flex-end

CSS3弹性伸缩布局(下)——flex布局

新版本 新版本的flex布局模型是2012年9月提出的工作草案,这个草案是由W3C推出的最新语法,这个版本立志于指定标准,让新式的浏览器全面兼容,在未来的浏览器更新换代中实现统一. 目前几乎大部分的浏览器都支持了.浏览器支持情况可以点击这里查看,下图为支持flex的情况 //HTML代码部分<div> <p>我是吴广林我是吴广林我是吴广林我是吴广林我是吴广林我是吴广林我是吴广林我是吴广林我是吴广林我是吴广林我是吴广林我是吴广林</p> <p>我是吴广林我是吴

网页布局——Flex布局

早期时候我们左网站布局的使用表格(table),然后使用浮动(float). 定位(position)和内联块(inline-block),但所有这些方法本质上来讲都是hacks,存留了很多需要实现的重要功能问题(例如,垂直居中). display:flex和display:box都可用于弹性布局,不同的是display:box是2009年的命名,已经过时,用的时候需要加上前缀:display:flex是2012年之后的命名.在实际的测试中display:flex不能完全的替代display:b

实现响应式:flex布局+媒体查询@media

注意: 1. 这个案例,是我写vue项目修改的,所以思路同样适用于vue框架项目.2. 建议先把代码直接复制过去,先看一下效果. 3. 涉及到知识点,flex布局的属性配合使用 , @media媒体查询的语法 4.  给ul设置 flex-wrap: wrap , 一定要允许li可以换行,我在这个坑里,躺了好几分钟.5.  我写的时候,也花了不少时间,学的人应该更耐心些. <!DOCTYPE html> <html lang="en"> <head>

CSS3 Flex布局 Flexbox的属性详解

原文:A Visual Guide to CSS3 Flexbox Properties Flex布局官方称为CSS Flexble Box布局模型是CSS3为了提高元素在容器中的对齐.方向.顺序,甚至它们是动态的或者不确定大小的新布局模型.Flex容器的主要特征是能够调整其子元素在不同的屏幕大小中能够用最适合的方法填充合适的空间. 很多的设计师和开发者发现Flex布局很容易使用,它定位元素简单因此很多复杂的布局能够用很少的代码实现,引领更简单的开发过程.Flex布局的算法是基于方向的,不同于基

flex 布局下关于容器内成员 flex属性的理解

flex布局分为容器的设置和容器内成员的设置,容器的设置是管理成员的排列方式,也就是管理排列的方向和对齐的位置.成员的设置则是关于成员的大小和显示的位置(order). 弹性布局,弹性布局,自然要提现他的弹性,所谓弹性也就是对空间的分配.成员设置中的flex属性,就是对于额外空间的管理. flex可以设置三个值,第一个值必选,后两个可选. flex的第一个值 可以用flex-grow单独设置,代表含义是对额外空间的占据量,所谓额外空间就是这一行多余的空间,有多余的空间这一属性才有用.默认值是0,

flex布局以及相关属性

容器的属性: 父元素设置display:flex:子元素即可使用flex布局. flex-direction 决定项目排列方向: .box { flex-direction: row | row-reverse | column | column-reverse; } row(默认值):主轴为水平方向,起点在左端. row-reverse:主轴为水平方向,起点在右端. column:主轴为垂直方向,起点在上沿. column-reverse:主轴为垂直方向,起点在下沿. flex-wrap 一条

布局display属性(一)--【Flex】

一.Flex 布局是什么? Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为 Flex 布局. .box{ display: flex; } 行内元素也可以使用 Flex 布局. .box{ display: inline-flex; } Webkit 内核的浏览器,必须加上-webkit前缀. .box{ display: -webkit-flex; /* Safari */ display: flex; }

flex布局,一排,多排,项目属性

flex布局 阮一峰 display:flex;横排 行内元素也可以使用Flex布局. Webkit内核的浏览器,必须加上-webkit前缀. 注意,设为Flex布局以后,子元素的float.clear和vertical-align属性将失效. 容器默认存在两根轴: 水平的主轴(main axis)和垂直的交叉轴(cross axis). 主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end: 交叉轴的开始位置叫做cross start,结束位置叫做cross