前端笔记(四)Flex 布局

news2024/11/26 23:26:54

标准流

标准流也叫文档流,指的是标签在页面中默认的派不规则,例如:块元素独占一行,行内元素可以一行显示多个。

但是很多的网页布局都是块元素在一行中显示的,这时候就需要浮动和 Flex 布局,浮动只需要了解即可

浮动

可以让块元素水平排列
给块元素加上 float属性可以使得块元素往左边或者往右边浮动,使得两个块元素可以出现在一行里面。
浮动后的格子会脱离标准流的控制,不再占用标准流的范围。

浮动-产品区域布局

image.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            height: 0;
        }
        li {
            list-style: none;
        }
        .product {
            width: 1226px;
            height: 628px;
            background-color: greenyellow;
            margin: 50px auto;
        }
        .left {
            width: 234px;
            height: 628px;
            background-color: aqua;
            float: left;
        }
        .right {
            width: 978px;
            height: 628px;
            background-color: grey;
            float: right;
        }
        .right > li {
            width: 234px;
            height: 300px;
            margin-right: 14px;
            margin-bottom: 14px;
            background-color: orange;
            float: left;
        }
        .right > li:nth-child(4n) {
            margin-right: 0;
        }
    </style>
</head>
<body>
    <div class="product">
        <div class="left"></div>
        <div class="right">
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </div>
    </div>
</body>
</html>

清除浮动

浮动元素脱标的情况,如果父级没有高度,子级无法撑开父级的高度(可能导致页面布局的错乱 )
方法一:额外标签法

  • 在父元素内容的最后添加一个块级元素,设置 CSS 属性 clear:both

方法二:单伪元素法

.clearfix::after {
  content: "";
  display: block;
  clear: both;
}

方法三:双伪元素法

.clearfix::before,
.clearfix::after {
  content: "";
  display: table;
}
.clearfix::after {
  clear:both;
}

代码解释:
.clearfix::before.clearfix::after:分别使用伪元素 ::before 和 ::after。
content: "";:添加了一个空内容,这样伪元素才能生效并占据空间。
display: table;:将伪元素的 display 属性设置为 table,使其表现得像一个表格元素。
.clearfix::after:在第二个伪元素后,应用了 clear: both;,使其清除浮动。
方法四:overflow

  • 父元素添加属性:overflow:hidden

Flex 布局

Flex 布局又叫弹性布局,它使用 flexbox 使得容器有了弹性,更加适应设备的不同宽度,而不用再去依赖传统的块状布局和浮动定位,作为在 CSS3 中新增的规范,目前大部分的主流浏览器已经支持,是浏览器提倡的布局方式,
非常适合结构化布局,提供了空间分布和对其能力,它不会有浮动布局中的脱标、坍塌等现象,布局网页更简单更灵活。

Flex - 组成

设置方式:给父元素设置 display:flex,子元素可以自动挤压或者拉伸
组成部分:

  • 弹性容器:父级容器
  • 弹性盒子:当父级容器设置为 display:flex 的时候,子级自动变为 flexbox(弹性盒子)。
  • 主轴:默认在水平方向,是子级弹性盒子排列的轴,所以一开始设置的时候弹性盒子默认是水平排列的。
  • 侧轴 / 交叉轴:默在垂直方向,后面可以根据需要改变主轴和侧轴。

示意图:
image.png

Flex - 布局属性

这里展示一些 flex 布局有关的属性,后面会进行详细的讲解

属性描述
display: flex创建 flex 容器
justify-content主轴对齐方式
align-items侧轴对齐方式
align-self修改某个盒子的侧轴对齐方式
flex-direction修改主轴方向
flex弹性伸缩比
flex-wrap弹性盒子换行
align-content行对齐方式

主轴对齐方式(justify-content)

属性名:justify-content
可以改变主轴上的对齐方式

属性值效果
flex-start默认值,弹性盒子从起点依次排列
flex-end盒子从终点开始依次排列
center弹性盒子从主轴居中排列
space-between弹性盒子沿主轴均匀排列,空白间距在盒子中间
space-around弹性盒子沿主轴均匀排列,空白间距在盒子两侧
space-evenly弹性盒子演主轴均匀排列,弹性盒子与容器之间间距相等

需要重点关注的是后面的几个,这里先来演示一下 space-aroundspace-evenly 的区别:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            /* 设置 flex 布局 */
            display: flex;
            width: 500px;
            background-color: yellow;
    		// justify-content: space-evenly;
            justify-content: space-around;
            
        }
        li {
            list-style: none;
            width: 30px;
            height: 100px;
            background-color: red;
        }
    </style>
</head>
<body>
    <div>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </div>
</body>
</html>

around
image.png
evenly
image.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    .box {
        display: flex;
        /* justify-content: center;
        justify-content: space-around;
        justify-content: space-between; */
        justify-content: space-evenly;
        height: 300px;
        border: solid 2px black;
    }
    .box div {
        width: 200px;
        height: 200px;
        background-color: yellow;
    }
</style>
<body>
    <div class="box">
        <div>1</div>
        <div>2</div>
        <div>3</div>
    </div>
</body>
</html>

侧轴对齐方式(align-items / align-self)

属性名
align-items:当前弹性容器内所有盒子的侧轴对齐方式
align-self:单独控制某个弹性盒子的侧轴对齐方式
这两个属性值是相同的,只不过 align-self 属性是设置在子级的

属性值效果
stretch盒子沿侧轴被拉伸到铺满整个容器,如果没有设置盒子在侧轴方向尺寸则会默认拉伸
center弹性盒子沿侧轴居中排列
flex-start弹性盒子从起点开始依次排列
flex-end弹性盒子从终点开始依次排列

这里就不具体演示了,效果和描述的一样

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
    .box {
        display: flex;
        justify-content: space-evenly;
        height: 300px;
        align-items: flex-end;
    }
    .box div {
        width: 200px;
        height: 200px;
        background-color: yellow;
    }
    </style>
</head>
<body>
    <div class="box">
        <div>1</div>
        <div>2</div>
        <div>3</div>
    </div>
</body>
</html>

image.png
可以清晰的看到是从底部开始排列的

修改主轴方向(flex-direction)

主轴就是弹性盒子排列的轴,我们可以通过设置主轴方向来做到水平排列和数值排列

属性名:flex-direction

属性值效果
row水平方向,从左到右
column竖直方向,从上到下
row-reverse水平方向,从右到左
column-reverse垂直方向,从下到上

只需要记忆垂直方向从上向下的 column 即可,这时候主轴的方向就变为垂直了

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            display: flex;
            width: 300px;
            height: 600px;
            background-color: blue;
        }
        div li {
            list-style: none;
            width: 90px;
            height: 100px;
            background-color: yellow;
        }
    </style>
</head>
<body>
    <div>
        <li></li>
        <li></li>
        <li></li>
    </div>
</body>
</html>

看这段代码主轴是横轴,页面效果是这样的:
image.png
这时候我们加上 flex-direction:column 属性:
image.png主轴就变为竖直方向了。

弹性伸缩比

可以用来控制弹性盒子在主轴方向的尺寸,比如主轴为水平方向控制的就是这个盒子的宽度。
属性名:flex
属性值:整数数字,表示占用父级剩余尺寸的份数
默认的情况下每一个盒子是占一份的,剩余尺寸是原本的尺寸减去

内容宽度和高度: Flex 项目的内容决定了其在主轴上的大小。比如,文字、图像或者内部元素的宽度和高度。
盒子模型属性: padding、border、margin 等属性也会影响 Flex 项目在主轴方向上的实际大小。
设置的宽度和高度属性: 如果明确设置了 Flex 项目的宽度和高度属性,那么这些属性值也会决定项目在主轴上的尺寸。

比如下面这段代码我们给不同的盒子设置不同的值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            display: flex;
            width: 300px;
            height: 150px;
            background-color: blue;
            justify-content: space-between;
        }
        div li:nth-child(1) {
            flex: 2;
            margin: 10px;
            list-style: none;
            width: 90px;
            height: 100px;
            background-color: yellow;
        }
        div li:nth-child(2) {
            flex: 1;
            margin: 10px;
            list-style: none;
            width: 90px;
            height: 100px;
            background-color: yellow;
        }
        div li:nth-child(3) {
            flex: 1;
            margin: 10px;
            list-style: none;
            width: 90px;
            height: 100px;
            background-color: yellow;
        }
    </style>
</head>
<body>
    <div>
        <li></li>
        <li></li>
        <li></li>
    </div>
</body>
</html>

image.png

弹性换行

弹性盒子会自动挤压和拉伸,默认情况下,所有的盒子都在一行显示,如果盒子的宽度过大会被挤压到适合的大小
属性名:flex-wrap

属性值效果
wrap换行
nowarp不换行(默认情况)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .flex-container {
        display: flex;
        flex-wrap: wrap; /* 设置项目换行 */
        width: 300px; /* 设置容器宽度 */
        border: 2px solid #ccc;
        }

        .flex-item {
        width: 80px;
        height: 80px;
        background-color: #f0f0f0;
        margin: 5px;
        display: flex;
        justify-content: center;
        align-items: center;
        }

    </style>
</head>
<body>
    <div class="flex-container">
        <div class="flex-item">1</div>
        <div class="flex-item">2</div>
        <div class="flex-item">3</div>
        <div class="flex-item">4</div>
        <div class="flex-item">5</div>
        <div class="flex-item">6</div>
      </div>
      
</body>
</html>

显示效果:
image.png

行对齐方式

可以控制每行之间的对齐方式,需要设施flex-wrap: wrap
属性名:align-content

属性值效果
flex-start默认值,弹性盒子从起点依次排列
flex-end盒子从终点开始依次排列
center弹性盒子从主轴居中排列
space-between弹性盒子沿主轴均匀排列,空白间距在盒子中间
space-around弹性盒子沿主轴均匀排列,空白间距在盒子两侧
space-evenly弹性盒子演主轴均匀排列,弹性盒子与容器之间间距相等

和主轴的对齐方式相同

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
    .flex-container {
        display: flex;
        flex-wrap: wrap;
        height: 300px; /* 设置容器高度 */
        width: 300px;
        align-content: space-between; /* 设置轴线分布方式 */
        border: 2px solid #ccc;
    }

    .flex-item {
        width: 80px;
        height: 80px;
        background-color: #f0f0f0;
        margin: 5px;
        display: flex;
        justify-content: center;
        align-items: center;
    }

    </style>
</head>
<body>
    <div class="flex-container">
        <div class="flex-item">1</div>
        <div class="flex-item">2</div>
        <div class="flex-item">3</div>
        <div class="flex-item">4</div>
        <div class="flex-item">5</div>
        <div class="flex-item">6</div>
      </div>      
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1291838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java基础系列】JavaWeb入门

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【LeetCode】2629. 复合函数

复合函数 题目题解 题目 请你编写一个函数&#xff0c;它接收一个函数数组 [f1, f2, f3&#xff0c;…&#xff0c; fn] &#xff0c;并返回一个新的函数 fn &#xff0c;它是函数数组的 复合函数 。 [f(x)&#xff0c; g(x)&#xff0c; h(x)] 的 复合函数 为 fn(x) f(g(h(x…

MYSQL练题笔记-高级查询和连接-最后一个能进入巴士的人

一、题目相关内容 1&#xff09;相关的表和题目 2&#xff09;帮助理解题目的示例&#xff0c;提供返回结果的格式 二、自己初步的理解 一群人要上巴士但是巴士有体重限制&#xff0c;那只能有限个人才能上去 最后输出这个最后一个上去还不超重的人的名字 我认为首先要缩小…

Java+Swing: 登录和重置按钮的点击事件 整理6

1. 在Login类中给按钮添加事件 // 按钮添加鼠标点击事件loginButton.addActionListener();resetButton.addActionListener(); 2. 创建一个事件处理的类&#xff0c; 该类实现了ActionListener package com.handler;/*** Author&#xff1a;xiexu* Date&#xff1a;2023/12/7 13…

K8S 删除命令空间时 一直卡住怎么办?

当使用完一个命名空间后&#xff0c;想删除了又删除不掉&#xff0c;这个时候查看命名空间的状态一直是Terminating。使用强制删除&#xff0c;也是还是不行。&#xff08;找了好多办法都不行&#xff09; [rootk8s-master kubernetes-yaml]# kubectl delete ns mem-example Er…

3DMAX UV贴图修改插件安装卸载方法

3DMAX UV贴图修改插件安装卸载方法 3dMax贴图修改插件PolyUnwrapper是为纹理艺术家设计的一整套专业工具&#xff0c;尤其适用于建筑和游戏行业。 它包含许多功能&#xff0c;将大大帮助您改进UV展开的工作流程。 【主要功能特点】 -多重缝合。一次缝合多个壳 -自定义打包算…

MTTS | 多语言多人的VITS语音合成项目实现

----------------------------------&#x1f5e3;️ 语音合成 VITS相关系列直达 &#x1f5e3;️ ------------------------------------- &#x1fae7;VITS &#xff1a;TTS | 保姆级端到端的语音合成VITS论文详解及项目实现(超详细图文代码) &#x1fae7;MB-iSTFT-VITS&am…

2024年江苏省职业院校技能大赛 信息安全管理与评估 第二阶段教师组 (样卷)

2024年江苏省职业院校技能大赛 信息安全管理与评估 第二阶段教师组 (样卷) 项目竞赛样题 本文件为信息安全管理与评估项目竞赛-第二阶段样题&#xff0c;内容包括&#xff1a;网络安全事件响应、数字取证调查、应用程序安全。 本次比赛时间为180分钟。 介绍 GeekSec专注技能竞…

Java聊天程序(一对一)简单版

我们首先要完成服务端&#xff0c;不然出错&#xff0c;运行也要先运行服务端&#xff0c;如果不先连接服务端&#xff0c;就不监听&#xff0c;那客户端不知道连接谁 服务端 import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.Actio…

常见数据同步工具之实时同步

实时数据同步是现代数据处理中非常重要的一环。在常见的数据同步工具中&#xff0c;Flume、Flink CDC和DataX都是非常受欢迎的选择。它们各自有自己的工作原理、优势和劣势。 Flume主要用于日志传输&#xff0c;简单易用但对特定数据源可能有限&#xff1b;Flink CDC基于CDC技术…

jQuery ajax读取本地json文件 三级联动下拉框

步骤 1&#xff1a;创建本地JSON文件 {"departments": [{"name": "会计学院","code": "052"},{"name": "金融学院","code": "053"},{"name": "财税学院",&qu…

基于若依的ruoyi-nbcio流程管理系统支持支持定时边界事件和定时捕获事件

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 1、定时边界事件 <template><div class"panel-tab__content"><!--目前只处理定…

【Java系列】详解多线程(一)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Java系列专栏】 本专栏旨在分享学习Java的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 一、背景引入二、线程…

解决git提交完代码后切换到自己分支pull拉错远程分支

&#x1f979;MD 我是猪&#xff01;拉代码的时候净想着干饭了&#xff0c;一下给拉错了&#x1f624; &#x1f338;方法一&#xff1a;打印日志&#xff0c;然后回退版本 &#x1f338;方法二&#xff1a; 舍弃本地修改 git checkout .直接把冲突的文件提交到自己的分支&a…

Linux内核上游提交完整流程及示例

参考博客文章&#xff1a; 向linux内核提交代码 - 知乎 一、下载Linux内核源码 通过git下载Linux内核源码&#xff0c;具体命令如下&#xff1a; git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 实际命令及结果如下&#xff1a; penghaoDin…

【华为网络-配置-025】- 同 VLAN 下不同网段通信(启用 Sub 地址)

要求&#xff1a; 1、各接口配置 VLAN 后配置 Sub 地址使 PC1 与 PC3 通信。 一、sub 地址配置 [LSW1]vlan 10 [LSW1]port-group group-member GigabitEthernet 0/0/1 to GigabitEthernet 0/0/2 [LSW1-port-group]port link-type access [LSW1-port-group]port default vla…

掌握接口测试全流程,让你成为专业接口测试大师!

扫盲内容 1.为什么要做接口测试&#xff1f; 2.怎样做接口测试&#xff1f; 3.接口测测试点是什么&#xff1f; 4.接口测试都要掌握哪些知识&#xff1f; 5.其他相关知识&#xff1f; 一.为什么要做接口测试&#xff1f; ①.越底层发现bug&#xff0c;它的修复成本是越低…

Adobe XD学习攻略:成为设计大师的捷径!

Adobexd是什么软件&#xff1f;Adobexd是一站式UI/UX设计平台&#xff0c;结合设计和建立原型功能。用户可以使用Adobexd进行网页设计、移动应用程序设计和原型图绘制&#xff0c;也可以使用Adobexd软件更高效、更准确地完成静态编译和框架图到交互原型的转换。 然而&#xff…

ubuntu22.04 显卡驱动最简单的安装方法

1.拉取可选择安装的显卡驱动版本 sudo apt-get purge nvidia* #apt 的 update 和 upgrade 的区别 #apt update 命令只会获得系统上所有包的最新信息&#xff0c;并不会下载或者安装任何一个包。 #apt upgrade 命令来把这些包下载和升级到最新版本。 2.sudo apt update 3.安装…

如何批量给文件名加文字?

如何批量给文件名加文字&#xff1f;在我们的日常生活和工作中&#xff0c;经常会面临大量文件需要分类整理&#xff0c;并且可能需要在文件名后面添加一串文字作为备注。如果只是少量文件&#xff0c;我们可以手动逐个添加备注&#xff0c;但如果涉及上千甚至上万个文件&#…