3、flex弹性盒布局(flex:1?、水平垂直居中、三栏布局)

一、flex布局

任何一个容器都可以指定为 Flex 布局。块元素,行内元素即可。

div{
  display: flex;
}
span{
  display: inline-flex;
}

注意,设为 Flex 布局以后,子元素的floatclearvertical-align属性将失效。 

二、flex属性

父容器属性

1.justify-content 主轴对齐方式

2. align-items 侧轴对齐方式 

 (弹性盒子在侧轴没有尺寸才能拉伸)

3. flex-direction 修改主轴方向

4.flex-wrap换行

5.align-content 行的对齐方式 

对单行弹性盒子不生效

项目属性:

flex:1?代表什么?

flex-grow:1;flex-shrink:1; flex-basis:0%;

表示子项目将会占用容器中所有可用的剩余空间,实现均匀分布。

  • flex-grow:1。代表项目将占用容器的剩余空间,并按比例进行分配。默认为0代表不会增长
  • flex-shrink:1。代表项目将在空间不足时按比例缩小。默认为1.
  • flex-basis:0%。代表初始大小为0。默认auto代表项目根据内容决定大小

三、实现未知宽高元素水平垂直居中

(1)flex布局

父盒子开启flex弹性布局,设置justify-content: center;align-items: center;

    <style>
        .container{
            display: flex;
            /* 主轴对齐方式 */
            justify-content: center;
            /* 侧轴对齐方式 */
            align-items: center;
            width: 100%;
            height: 300px;
            background-color: yellow;
        }
        .item{
            width: 100px;
            height: 100px;
            background-color: green;
        }
    </style>

(2)绝对定位+位移+transform

子绝父相。子向右下移动父元素的一半,再利用transform.

top: 50%;left: 50%;  transform: translate(-50%,-50%);

transform: translate(-50%, -50%);:

translate 函数用于移动元素。负值表示向左(对于X轴)和向上(对于Y轴)移动。
translate(-50%, -50%) 将元素向左移动其自身宽度的50%,并向上移动其自身高度的50%。
由于元素已经通过 top 和 left 属性定位到了其父元素的中心线(水平和垂直),这个 transform 调用实际上是将元素的中心移动到这些中心线上,从而实现了真正的水平垂直居中。

.container{
            position: relative;
            width: 100%;
            height: 500px;
            background-color: yellow;
        }
        .item{
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%,-50%);
            width: 100px;
            height: 100px;
            background-color: green;
        }

(3)绝对定位+margin 

 子绝父相。设置子的top left bottom right都相等,margin设置为auto

.container{
            position: relative;
            width: 500px;
            height: 500px;
            background-color: yellow;
        }
        .item{
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            margin: auto;
            width: 100px;
            height: 100px;
            background-color: green;
        }

 (4)text-align 

父盒子设置行高等于高,tex-talign:center.使得其水平居中

子盒子开启display:inline-block,设置vertical-align:middle.使得行内块元素垂直居中。

  .container{
            line-height: 500px;
            text-align: center;
            width: 500px;
            height: 500px;
            background-color: yellow;
        }
        .item{
            display: inline-block;
            /* vertical-align用于行内元素的垂直对齐方式 */
            vertical-align: middle;
            width: 100px;
            height: 100px;
            background-color: green;
        }

 四、三栏布局

(1)flex布局

body中按照左中右排列顺序。

父盒子dispaly:flex,左右设置固定大小宽高,中间盒子flex1

<style>
        .container{
            display: flex;
        }
        .left{
            width: 200px;
            height: 200px;
            background-color: yellow;
        }
        .middle{
            flex: 1;
           /*  height: 200px;*/
            background-color: green;
        }
        .right{
            width: 200px;
            height: 200px;
            background-color: blue;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="left"></div>
        <div class="middle"></div>
        <div class="right"></div>
    </div>
</body>

(2)圣杯布局

1.按照中左右顺序排列。

2.首先给这三个div都给一个float: left,让它们均左浮动。设置左右固定大小,中间宽度100%。这时左边盒子和右边盒子都在第一行。

3.设置左盒子的margin-left: -100%,把左盒子拉上来,调整左盒子的浮动位置到中间盒子的左侧。再设置右盒子的margin-left: - 右盒子宽度px,把右盒子拉上来,调整右盒子的浮动位置到中间盒子的右侧。把两个盒子拉到第一行。

4.此时的布局基本出来了,但是中间盒子的左右两侧会被左右两个盒子覆盖掉,此时我们要通过相对定位来避免覆盖。给左右盒子position: relative,再分别设置它们的left和right移动他们,并且控制父元素的padding来为左右两边留白。

margin-left:-100%:往左边移动父元素宽度的100%

margin-left:-200px :往左边移动负数  -宽度,能把第二行的拉到第一行最右边。

    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .container{
            padding-left: 300px;
            padding-right: 200px;
            height: 200px;
        }
        .middle{
            float: left;
            width: 100%;
            height: 200px;
            background-color: green;
        }
        .left{
            float: left;
            width: 300px;
            height: 200px;
            background-color: yellow;
            /* 左移 */
            margin-left: -100%;
            position: relative;
            left: -300px;
        }
        .right{
            float: left;
            width: 200px;
            height: 200px;
            background-color: blue;
            margin-left: -200px;
            position: relative;
            right: -200px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="middle"></div>
        <div class="left"></div>
        <div class="right"></div>
    </div>

 (3)双飞翼布局

1.按照中左右顺序排列。

2.首先给这三个div都给一个float: left,让它们均左浮动。设置左右固定大小,中间宽度100%。这时左边盒子和右边盒子都在第一行。

3.设置左盒子的margin-left: -100%,把左盒子拉上来,调整左盒子的浮动位置到中间盒子的左侧。再设置右盒子的margin-left: - 右盒子宽度px,把右盒子拉上来,调整右盒子的浮动位置到中间盒子的右侧。把两个盒子拉到第一行。

4.在双飞翼布局中,避免左右盒子被覆盖是通过设置中间盒子内部的inner-middle的左右margin来实现的。

    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .middle{
            float: left;
            width: 100%;
            height: 200px;
            background-color: green;
        }
        .inner-middle{
            margin-left: 300px;
            margin-right: 200px;
        }
        .left{
            float: left;
            width: 300px;
            height: 200px;
            background-color: yellow;
            /* 左移 */
            margin-left: -100%;
        }
        .right{
            float: left;
            width: 200px;
            height: 200px;
            background-color: blue;
            margin-left: -200px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="middle">
            <div class="inner-middle"></div>
        </div>
        <div class="left"></div>
        <div class="right"></div>
    </div>
</body>

(4)float浮动

排列顺序:左右中。

左右设置固定大小和左右浮动,中间自适应overflow:hidden。(或者中间设置对应方向的margin值。

<style>
        .left{
            float: left;
            width: 200px;
            height: 200px;
            background-color: yellow;
        }
        .center{
            overflow: hidden;
            height: 200px;
            background-color: green;
        }
        .right{
            float: right;
            width: 200px;
            height: 200px;
            background-color: blue;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="left"></div>
        <div class="right"></div>
        <div class="center"></div>
    </div>

圣杯布局对比双飞翼布局

双飞翼布局好处

(1)主要的内容先加载的优化。

(2)兼容目前所有的主流浏览器,包括IE6在内。

(3)实现不同的布局方式,可以通过调整相关CSS属性即可实现。

对比

(1)都是左右栏定宽,中间栏自适应的三栏布局,中间栏都放到文档流前面,保证先行渲染。

(2)解决方案基本相似:都是三栏全部设置左浮动float:left,然后分别解决中间栏内容被覆盖的问题。

(3)解决中间栏内容被覆盖问题时,圣杯布局设置父元素的padding,双飞翼布局在中间栏嵌套一个div,内容放到新的div中,并设置margin,实际上,双飞翼布局就是圣杯布局的改进方案。

 (5)绝对定位布局 position+margin

排列顺序:左右中

子绝父相。左右两栏固定大小,设置绝对定位,设置右栏的位置利用top right。中间设置对应方向的marginleft right值。

    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .container{
            position: relative;
        }
        .left{
            position: absolute;
            width: 300px;
            height: 200px;
            background-color: yellow;
        }
        .right{
            position: absolute;
            top: 0;
            right: 0;
            width: 200px;
            height: 200px;
            background-color: blue;
        }
        .middle{
            height: 200px;
            margin-left: 300px;
            margin-right: 200px;
            background-color: green;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="left"></div>
        <div class="right"></div>
        <div class="middle"></div>
    </div>
</body>

 (6)Grid网格布局

排列顺序:左中右

.container{
            display: grid;
            width: 100%;
            /* 行高 */
            grid-template-rows: 100px;
            /* 列属性  左 中 右*/
            grid-template-columns: 300px auto 200px;
        }

    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .container{
            display: grid;
            width: 100%;
            /* 行高 */
            grid-template-rows: 100px;
            /* 列属性 */
            grid-template-columns: 300px auto 200px;
        }
 
        .left{
            background-color: yellow;
        }
        .middle{
            background-color: green;
        }
        .right{
            background-color: blue;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="left"></div>
        <div class="middle"></div>
        <div class="right"></div>
    </div>
</body>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WordPress子比内容同步插件

1.支持分类替换 将主站同步过来的文章分类进行替换 2.支持本地化文章图片 &#xff08;使用储存桶可能会导致无法保存图片&#xff09; 3.支持自定义文章作者&#xff08;选择多个作者则同步到的文章作者将会随机分配&#xff09; 4.支持将同步过来的文章自定义文章状态&…

ThinkBook 14 G6+ IMH(21LD)原厂Win11系统oem镜像下载

lenovo联想笔记本电脑原装出厂Windows11系统安装包&#xff0c; 恢复开箱状态自带预装系统&#xff0c;含恢复重置还原功能 链接&#xff1a;https://pan.baidu.com/s/1WIPNagHrC0wqYC3HIcua9A?pwdhzqg 提取码&#xff1a;hzqg 联想原装出厂系统自带所有驱动、出厂主题壁…

基于Win11下的Wireshark的安装和使用

Wireshark的安装和使用 前言一、Wireshark是什么简介 二、下载Wireshark下载过程查看自己电脑配置 三、安装Wireshark安装过程安装组件创建快捷方式winPacpNpcap 打开检验 四、使用Wireshark实施抓包捕获数据包 五、基于Wireshark使用显示过滤器简介使用方法注意ICMP的请求和应…

dibbler-DHCPv6 的开源框架(C++ 实现)2

前置 在 dibbler-DHCPv6 的开源框架&#xff08;C 实现&#xff09;1 说了 dibbler 的安装和编译、使用。在这里说一下 server 的源码分析。 一、主函数文件 dibbler/Port-linux/dibbler-server.cpp 代码路径&#xff1a; 二、主要函数解释 1. 加载配置文件和设置 DUID …

【Python Cookbook】S01E12 根据字段将记录分组

目录 问题解决方案讨论 问题 如果有一系列的字典或对象实例&#xff0c;我们想根据某个特定的字段来分组迭代数据。 解决方案 假设有如下字典列表&#xff1a; rows [{address: 5412 N CLARK, date: 07/01/2012},{address: 5148 N CLARK, date: 07/04/2012},{address: 580…

----JAVA 继承----

引言 再java中你能创造出很多的类&#xff0c;但如果这些类中的成员再另一个类中也要使用&#xff0c;那么就要用到继承来实现指定类中成员的使用了 那么也就可以写出这样的代码 再类Cat中使用了类Animal的成员&#xff0c;这里我们称Cat叫子类&#xff0c;Animal叫父类 概念…

上位机图像处理和嵌入式模块部署(f407 mcu中tf卡读写和fatfs挂载)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 很早之前&#xff0c;个人对tf卡并不是很重视&#xff0c;觉得它就是一个存储工具而已。后来在移植v3s芯片的时候&#xff0c;才发现很多的soc其实…

蓝奏管理器iapp源码V3

蓝奏登录注册&#xff0c;简单管理文件夹等都没问题&#xff0c;就是上传接口需要有能力的人抓包进行修复一下&#xff08;我留了之前还能正常使用的接口&#xff0c;也是蓝奏官方的&#xff0c;所以参照一下就行。&#xff09;&#xff0c;这个应该也不是什么大问题&#xff0…

IDEA 学习之 命令行太长问题

现象 Error running App Command line is too long. In order to reduce its length classpath file can be used. Would you like to enable classpath file mode for all run configurations of your project?解决办法 办法一 .idea\workspace.xml ——> <compone…

【图自动编码器】基础介绍 及 基于PyTorch的图自动编码器实例代码 | MLP应用于节点级别和图级别的任务实例(附实例代码+数据集)

世界以痛吻我,我要报之以歌。——泰戈尔 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌟[3] 2022年度博客之星人工智能领域TOP4🌟 🏅[4] 阿里云社区特邀专家博主🏅

秋招突击——算法打卡——5/31——复习{采药问题、(状态压缩DP)小国王}——新做:{盛最多水的容器、整数转罗马数字}

文章目录 复习背包模型——采药问题状态压缩DP——小国王思路分析实现代码参考 新作盛最多的水个人实现思路分析实现代码 参考分析思路分析实现思路 整数转罗马数字个人实现思路分析实现代码 参考实现思路分析实现代码 总结 复习 背包模型——采药问题 原题链接这里回忆的时候…

回溯算法之简单组合

哦吼&#xff01;今天结束了二叉树&#xff0c;开始回溯算法 其实也需要用到迭代&#xff0c;哈哈哈哈&#xff0c;但是这个暴力穷举真的好爽。 先记一下回溯算法的基本框架吧 老规矩&#xff1a; 还是有结束条件 但是后面就不太一样了 这里就是for循环&#xff0c;循环n…

系统思考的魅力

“不管你信不信&#xff0c;你的系统正是为了现在这个结果而设计的。”—爱德华兹戴明 在长期的组织辅导中&#xff0c;最开始我常听到管理者们说&#xff1a;“这是某某的问题”&#xff0c;或者“某某真不行”。我想这也正显示出系统思考的真正魅力&#xff0c;当大家开始用…

小波相干性显著性检验(MATLAB R2018A)

交叉小波常被用于检测不同信号之间的相关性&#xff0c;其在时频域建立了不同信号之间的联系。对于两个时域信号&#xff0c;其交叉小波变换和交叉小波尺度谱如下&#xff1a; 以轴承振动信号为例&#xff0c;利用正常轴承与故障轴承的振动信号、故障轴承和故障轴承的振动信号分…

使用conda环境安装pythonocc-core

conda环境安装pythonocc库 基本环境 操作系统:Ubuntu 22.04 conda 23.11.0 安装pythonocc-core conda create --name pyocc python3.10 conda activate pyocc conda install -c conda-forge pythonocc-core7.8.1也可参考下面的官方地址 pythonocc-core 官方git地址 conda官…

Golang | Leetcode Golang题解之第128题最长连续序列

题目&#xff1a; 题解&#xff1a; func longestConsecutive(nums []int) int {numSet : map[int]bool{}for _, num : range nums {numSet[num] true}longestStreak : 0for num : range numSet {if !numSet[num-1] {currentNum : numcurrentStreak : 1for numSet[currentNum…

第4章:车辆的横向优化控制

4.1 车辆动力学模型 注1&#xff1a;运动学模型和动力学模型最大的不同点在于 运动学模型是在我们不考虑车辆的受力情况下建立的&#xff08;回顾我们推导出运动学模型的过程&#xff0c;我们没有使用到任何车辆所受的外力作为公式中的已知量&#xff0c;而是直接通过 “ 车速…

力扣173题:二叉搜索树迭代器(含模拟面试)

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 关注微信公众号 数据分析螺丝钉 免费领取价值万元的python/java/商业…

OBS实现多路并发推流

OBS实现多路并发推流 解决方案速览相关依赖下载安装多路推流 解决方案速览 利用OBS进行本地直播画面的构建。 使用Multiple RTMP outputs plugin进行多路并发推流。 相关依赖下载安装 OBS软件 # OBS官网 https://obsproject.com/zh-cnMultiple RTMP outputs plugin # 插件官网…

【TB作品】MSP430 G2553 单片机口袋板,流水灯,按键改变花型

功能 按键修改流水灯的花型&#xff0c;一共四种花型。 效果 部分代码 while (1){PinIN();I2C_IODect(); /*按键检测处理 */delay_ms(20);time;if (time > 6){time 0;if (mode 0){index;if (index > 7){index 0;}PinOUT(0, 1); /* 指定0号管脚输出为0 */PinOUT(1, 1)…