CSS常见的布局方式

1.弹性布局(flex)

总体宽度及其中所有栏的值都以单位编写。这应使布局能够使用浏览器的指定基本字体大小缩放。 栏宽度将变得更宽, 能以任何大小显示更舒适、更可读的行长度。

弹性布局的基本概念

  • 容器: 需要添加弹性布局的父元素;
  • 项目: 弹性布局容器中的每一个子元素,称为项目;
  • 主轴: 在弹性布局中,我们会通过属性规定水平/垂直方向为主轴;
  • 交叉轴: 与主轴垂直的另一方向,称为交叉轴

弹性布局的使用

  • 给父容器添加display: flex/inline-flex;属性,即可使容器内容采用弹性布局显示,而不遵循常规文档流的显示方式;

  • 容器添加弹性布局后,仅仅是容器内容(项目)采用弹性布局,而容器自身在文档流中的定位方式依然遵循常规文档流;

  • display:flex; 容器添加弹性布局后,显示为块级元素;

  • display:inline-flex; 容器添加弹性布局后,显示为行级元素;

  • 设为 Flex布局后,子元素的float:clear和vertical-align属性将失效。但是position属性,依然生效。

display: flex;使用的12大属性

作用于父容器的6大属性

① flex-direction属性决定主轴的方向(即项目的排列方向)

  • row(默认值): 主轴为水平方向,起点在左端;
  • row-reverse: 主轴在水平方向,起点在右端 ;
  • column:主轴为垂直方向,起点在上沿。
  • column-reverse:主轴为垂直方向,起点在下沿。

② flex-wrap属性定义,如果一条轴线排不下,如何换行。

  • nowrap(默认):不换行。当容器宽度不够时,每个项目会被挤压宽度;
  • wrap: 换行,并且第一行在容器最上方;
  • wrap-reverse: 换行,并且第一行在容器最下方。

③ flex-flow 是flex-direction和flex-wrap的缩写形式,默认值为:flex-flow: row wrap;

④ justify-content属性定义了项目在主轴上的对齐方式。\

  • flex-start(默认值): 项目位于主轴起点。
  • flex-end:项目位于主轴终点。
  • center: 居中
  • space-between:两端对齐,项目之间的间隔都相等。(开头和最后的项目,与父容器边缘没有间隔)
  • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。(开头和最后的项目,与父容器边缘有一定的间隔)

⑤ align-items属性定义项目在交叉轴上如何对齐。

  • flex-start:交叉轴的起点对齐。
  • flex-end:交叉轴的终点对齐。
  • center:交叉轴的中点对齐。
  • baseline: 项目的第一行文字的基线对齐。(文字的行高、字体大小会影响每行的基线)
  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

⑥ align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。 (当项目换为多行时,可使用align-content取代align-items)

  • flex-start:与交叉轴的起点对齐。
  • flex-end:与交叉轴的终点对齐。
  • center:与交叉轴的中点对齐。
  • space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
  • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
  • stretch(默认值):轴线占满整个交叉轴。

作用于项目的6大属性

① order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。

② flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。

③ flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。

④ flex-basis定义项目占据的主轴空间。 (如果主轴为水平,则设置这个属性,相当于设置项目的宽度。 原width将会失效。)

⑤ flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。 此属性有两个快捷设置:auto=(1 1 auto)/none=(0 0 auto)

⑥ align-self:定义单个项目自身在交叉轴上的排列方式,可以覆盖掉容器上的align-items属性。 属性值:与align-items相同,默认值为auto,表示继承父容器的align-items属性值。

2.定位布局

总体宽度及其中所有栏的值都以像素单位编写,布局位于用户浏览器的中心。 CSS定位布局,是通过position属性设置的,position属性可以有如下五个取值:

  • static:静态定位(元素默认的定位方式)
  • relative :相对定位(相对于元素自身位置定位的,也就是说,某个元素使用相对定位之后,它是以没有使用相对定位之前显示的位置为参考点,上下左右移动多少距离)
  • fixed :固定定位(相对于浏览器窗口进行定位的,当页面发生滚动的时候,fixed固定定位不会被影响,固定定位始终是固定在一个位置)
  • absolute :绝对定位(相对于浏览器屏幕左上角为参考点进行定位的,准确点说,是相对于浏览器内容可见区域的左上角为原点)
  • sticky :粘性定位(static静态定位fixed固定定位的结合体,最开始默认是static静态定位,当相对于父元素满足定位条件的时候,sticky粘性定位就会由static静态定位转变为fixed固定定位)

给元素设置【position】属性之后,设置元素的定位方式,然后再通过【top、left、right、bottom】四个属性设置定位的位置。

注意:如果设置了position属性,但是没有设置【top、left、right、bottom】属性,那么position属性不会生效。

3.流体布局

总体宽度及其中所有栏的值都以百分比编写,百分比通过用户浏览器窗口的大小计算。最基本的布局方式,元素从上到下,从左到右一行一行排列。由于是默认方式,其优点是简单且易于实现,适用于绝大多数普通页面的布局,缺点是不够灵活和美化程度较低。

4.混合布局

混合布局组合两种其他类型的布局,弹性和流体。页面的总宽度为 100%,,但侧栏值设置为em单位。

相关推荐
大圣编程9 分钟前
Python中continue语句的用法是什么?
开发语言·前端·python
yuhaiqiang10 分钟前
随手 vibecoding 的浏览器插件已经 6000 多次下载,聊聊他的产品设计
前端·后端·面试
之歆1 小时前
Vue商品详情与放大镜组件
前端·javascript·vue.js
再吃一根胡萝卜2 小时前
如何把小米 MiMo 接入 CodeBuddy,打造私有 Agent
前端
负责的蛋挞3 小时前
异步HttpModule的实现方式
java·服务器·前端
丹宇码农5 小时前
把 HLS 字幕玩出花:zwPlayer 如何让 M3U8 视频支持全文搜索、翻译与码率自适应
前端·javascript·音视频·hls·视频播放器
2501_943782355 小时前
【共创季稿事节】猜数字游戏:二分法思维与交互式反馈
前端·游戏·microsoft·harmonyos·鸿蒙·鸿蒙系统
GV191rLvq6 小时前
基于Socket实现的最简单的Web服务器【ASP.NET原理分析】
服务器·前端·asp.net
吠品6 小时前
LangChain 里 tool_call_id 为空?一次 MCP 工具集成的排查记录
前端