首页 > 其他分享 >CSS Flexbox 布局

CSS Flexbox 布局

时间:2022-09-20 08:33:48浏览次数:58  
标签:box 容器 元素 flex 布局 Flexbox 项目 CSS 属性

CSS 弹性盒子 Flexbox 布局

Flexbox(弹性盒子)是 CSS3 中引入的一种强大且兼容性好的布局方法。使用 flexbox,可以很容易地处理好页面上的元素布局,并创建可以自动缩小和放大的动态用户界面。

flex 盒子模式

只要在一个元素的 CSS 中添加 display: flex;,就可以使用其它 flex 属性来构建响应式页面了。

#box-container {
 display: flex;
}

行,列 Row Culomn

给元素添加 display: flex 属性可以让它变成 flex 容器, 然后可以让元素的项目排列成行或列。 只要给父元素添加 flex-direction 属性,并把属性值设置为 row 或 column,即可横向排列或纵向排列它的所有子元素。 创建一行将使子项水平对齐,创建一列将使子项垂直对齐。

flex-direction 的其他可选值还有 row-reversecolumn-reverse

注意: flex-direction 的默认值为 row

#box-container {
 display: flex;
 flex-direction: row;
 /* flex-direction: column */
}

父元素对齐 Align

子元素排列的方向被称为 main axis(主轴)。 对于行,主轴水平贯穿每一个项目; 对于列,主轴垂直贯穿每一个项目。

对于如何沿主轴线排放 flex 项目,有几种选择。 很常用的一种是 justify-content: center;:即 flex 子元素在 flex 容器中居中排列。 其他选择包括:

  • flex-start:从 flex 容器的起始位置开始排列项目。 对行来说是把项目移至左边, 对于列是把项目移至顶部。 如未设置 justify-content 的值,那么这就是默认值。

  • flex-end:从 flex 容器的终止位置开始排列项目。 对行来说是把项目移至右边, 对于列是把项目移至底部。

  • space-between:项目间保留一定间距地沿主轴居中排列。 第一个和最后一个项目被放置在容器边沿。 例如,在行中第一个项目会紧贴着容器左边,最后一个项目会紧贴着容器右边,然后其他项目均匀排布。

  • space-around:与space-between相似,但头尾两个项目不会紧贴容器边缘,所有项目之间的空间均匀排布。

  • space-evenly:头尾两个项目不会紧贴容器边缘,所有项目之间的空间均匀排布。

#box-container {
 justify-content: center;
}

Flex 容器中,与主轴垂直的叫做 cross axis(交叉轴)。 行的交叉轴是垂直的,列的交叉轴是水平的。

CSS 中的 align-items 属性用来定义 flex 子元素沿交叉轴的对齐方式。 对行来说,定义的是元素的上下对齐方式; 对列来说,是定义元素的左右对齐方式。

align-items 的可选值包括:

  • flex-start:从 flex 容器的起始位置开始对齐项目。 对行来说,把项目移至容器顶部; 对列来说,是把项目移至容器左边。

  • flex-end:从 flex 容器的终止位置开始对齐项目。 对行来说,把项目移至容器底部; 对列来说,把项目移至容器右边。

  • center:把项目居中放置。 对行来说,垂直居中(项目距离顶部和底部的距离相等); 对列来说,水平居中(项目距离左边和右边的距离相等)。

  • stretch:拉伸项目,填满 flex 容器。 例如,排成行的项目从容器顶部拉伸到底部。 如未设置align-items的值,那么这就是默认值。

  • baseline:沿基线对齐。 基线是文本相关的概念,可以认为它是字母排列的下端基准线。

#box-container {
 align-items: center;
}

换行 Wrap

CSS flexbox 有一个把 flex 子元素拆分为多行(或多列)的特性。

默认情况下,flex 容器会调整项目大小,把它们都塞到一起。 对于行来说,所有项目都会在一条直线上。

不过,使用 flex-wrap 属性可以使项目换行展示。 这意味着多出来的子元素会被移到新的行或列。 换行发生的断点由子元素和容器的大小决定。

换行方向的可选值有这些:

  • nowrap:默认值,不换行。

  • wrap:如果排列以行为基准,就将行从上往下排列;如果排列以列为基准,就将列从左往右排列。

  • wrap-reverse:如果排列以行为基准,就将行从下往上排列;如果排列以列为基准,就将列从右往左排列。

#box-container {
 flex-wrap: wrap;
}

收缩 Shrink

上面提到的属性都是应用于 flex 容器(flex 子元素的父元素)的。 除此之外,flex 子元素也有很多实用属性。

首先介绍的是 flex-shrink 属性。 使用之后,如果 flex 容器太小,则子元素会自动缩小。 当容器的宽度小于里面所有子元素的宽度之和时,所有子元素都会自动压缩。

子元素的 flex-shrink 接受数值作为属性值。 数值越大,则该元素与其他元素相比会被压缩得更厉害。 比如,一个项目的 flex-shrink 属性值为 1,另一个项目的 flex-shrink 属性值为 3,那么后者相比前者会受到 3 倍压缩。

#box-1 {
 flex-shrink: 1;
}
#box-2 {
 flex-shrink: 2;
}

扩大 Grow

flex-shrink 相对的是 flex-growflex-grow会在容器太大时对子元素作出调整。

如果一个项目的 flex-grow 属性值为 1,另一个项目的 flex-grow 属性值为 3,那么值为 3 的一个会较另一个扩大 3 倍。

#box-1 {
 flex-grow: 1;
}
#box-2 {
 flex-grow: 2;
}

初始大小 Basis

flex-basis 属性定义了在使用 CSS 的 flex-shrinkflex-grow 属性对元素进行调整前,元素的初始大小。

flex-basis 属性的单位与其他表示尺寸的属性的单位一致(pxem% 等)。 如果值为 auto,则项目的尺寸随内容调整。

#box-1 {
 flex-basis: 10em;
}
#box-2 {
 flex-basis: 20em;
}

简写 Shorthand

上面几个 flex 属性有一个简写方式。 flex-growflex-shrinkflex-basis 属性可以在 flex中一并设置。

例如,flex: 1 0 10px; 会把项目属性设为 flex-grow: 1;flex-shrink: 0; 以及 flex-basis: 10px;

属性的默认设置是 flex: 0 1 auto;

#box-1 {
flex: 2 2 150px;
}
#box-2 {
flex: 1 1 150px;
}

重新排列 Rearrange

order 属性告诉 CSS flex 容器里子元素的顺序。 默认情况下,项目排列顺序与源 HTML 文件中顺序相同。 这个属性接受数字作为参数,可以使用负数。

#box-1 {
order: 2;
}
#box-2 {
order: 1;
}

子元素对齐方式 Align

align-self。 这个属性允许调整单个子元素自己的对齐方式,而不会影响到全部子元素。 因为 floatclearvertical-align 等调整对齐方式的属性都不能应用于 flex 子元素,所以这个属性显得十分有用。

align-self 可设置的值与 align-items 的一样,并且它会覆盖 align-items 所设置的值。

#box-1 {
align-self: center;
}
#box-2 {
align-self: flex-end;
}
 

标签:box,容器,元素,flex,布局,Flexbox,项目,CSS,属性
From: https://www.cnblogs.com/risejl/p/16709792.html

相关文章

  • CSS的复习笔记
    css:-层叠样式表-网页实际上是一个多层的结构,通过css可以分别为网页的每一个层来设置样式而最终我们能看到只是网页的最上边一层-总之一句话,css用来设置网页中元素的样式。......
  • css 启动页 loading动画
      <divclass="loader"><divclass="text">Loading...</div><divclass="horizontal"><divclass="circlesup"><divclass="circle"></div><div......
  • CSS3-千峰
    CSS3-千峰.child>li{}---只作用在儿子标签,孙子标签无影响.child+li{}---这个标签后的第一个li.child~li{}---这个标签后的所有li[class]{}div[class]{}div[class=b......
  • #css#如何使用hover,实现父对子的样式改变?
    思路及做法:鼠标移动到父盒子的时候,里面所有的子盒子的样式都发生变化的,只需要直接在hover后面加上空格,并且加上子盒子的类名,里面再写其他样式.父盒子的类名:hover......
  • css font-size设置小于12px失效(转)
    原文:https://blog.csdn.net/weixin_38629529/article/details/1198664951、描述不知道你有没有遇到这样的情况,设置了font-size为10px,打开控制台审查元素也显示的是10px,但......
  • 【自动化测试】xpath、css使用及区别
    CSS和XPATH的功能对比对比项定位方式CSSXPATH常规属性id#id_keyword//*[@id=‘id关键字‘]常规属性class.class_name//*[@class=‘class属性名‘]......
  • 【css】-- flex:1的作用
    flex:1实质上是 flex-grow:1;flex-shrink:1;flex-basis:0;flex默认值为01auto该属性有两个快捷值:auto (11auto)和none(00auto)一、flex-growflex-grow......
  • Android最强布局——ConstraintLayout约束布局
    ConstraintLayout首先,现附上官方文档:ConstraintLayout官方文档约束布局ConstraintLayout是一个ViewGroup,可以在Api9以上的Android系统使用它,它的出现主要是为了解决布局......
  • CSS 中的 :is() 和 :where() 是什么?它们是相同的还是不同的?
    什么是:是()和:where()在CSS中?它们是相同的还是不同的?这:是()伪类函数将选择器列表作为其参数,并选择可以由该列表中的选择器之一选择的任何元素。:is()以上等价于以......
  • CSS 笔记
    CSSCSS,或CascadingStyleSheets(层叠样式表或级联样式表),用来给浏览器添加样式。引入CSS的方式Import内联InlineStyle使用style属性来引入CSS<h1style="col......