CSS 浮动布局

浮动的设计初衷

float: left/right/both;

浮动是网页布局最古老的方式。

浮动一开始并不是为了网页布局而设计,它的初衷是将一个元素拉到一侧,这样文档流就能够包围它

常见的用途是文本环绕图片:

在这里插入图片描述

浮动元素会被移出正常文档流,并被拉到容器边缘

清除浮动的原因及方法

浮动元素的高度不会追加到父元素上

如果浮动的元素比容器高,那么就可能发生容器折叠现象:

在这里插入图片描述

这时,我们就需要清除浮动。

清除浮动不太优雅的方式:在容器末尾添加一个空 div,设置 clear: both,清除两边浮动,使得容器会向下扩展包含它。

<div style="clear: both;"></div>

既然是添加一个 div 元素,不如使用伪元素 ::after 来实现。

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

这个 clearfix 类是添加到包含浮动元素的元素上,而不是浮动元素本身。

使用 display: block 的原因:默认情况下,伪元素是内联元素,而不是块级元素。为了确保伪元素占据一整行并且在浮动元素之后换行,我们需要将其设置为块级元素。更重要的是,clear 属性只对块级元素生效。

设置 content: " " 的原因:解决一些旧版浏览器的 Bug。


清除浮动后的另一个问题:浮动元素的外边距不会折叠到清除浮动后的容器外部,但是非浮动元素会

对此,解决该问题的clearfix的修改版如下:

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

为什么使用 display:table 而不是 display: block :外边距无法通过单元格元素折叠。


浮动陷阱:浏览器会将浮动元素尽可能地放在靠上的地方

如果众多的浮动元素高度不一致,最后导致布局会千变万化。哪怕是 1px 的高度差距也会导致浮动陷阱。

解决方法:给每一行的第一个元素清除左浮动

假设每行有 m 个元素:

.floatElement::nth-child(mn+1){clear: left
}

浮动布局示例解析:古诗欣赏

初始源代码如下:

index.html

<div class="container"><header><h1>古诗欣赏</h1></header><main class="main clearfix"><h3>五言绝句</h3><div><div class="media"><img class="media-image" src="相思.png"><div class="media-body"><h4>相思·王维</h4><p>红豆生南国,春来发几枝。愿君多采撷,此物最相思。</p></div></div><div class="media"><img class="media-image" src="听筝.png"><div class="media-body"><h4>听筝·李端</h4><p>鸣筝金粟柱,素手玉房前。欲得周郎顾,时时误拂弦。</p></div></div><div class="media"><img class="media-image" src="江雪.png"><div class="media-body"><h4>江雪·柳宗元</h4><p>千山鸟飞绝,万径人踪灭。孤舟蓑笠翁,独钓寒江雪。</p></div></div><div class="media"><img class="media-image" src="春晓.png"><div class="media-body"><h4>春晓·孟浩然</h4><p>春眠不觉晓,处处闻啼鸟。夜来风雨声,花落知多少。</p></div></div></div></main>
</div>

style.css

:root {box-sizing: border-box; /* 修改盒模型 */
}*,
::before,
::after {box-sizing: inherit; /* 继承 box-sizing */
}body {background-color: aliceblue;font-family: Arial, Helvetica, sans-serif;
}/* 猫头鹰选择器 */body * + *{margin-top: 1.5em;
}header{padding: 1em 2em;background-color: antiquewhite;border-radius: .5em;margin-bottom: 2em;
}.main{padding: 0 1.5em;background-color: white;border-radius: .5em;
}.container{max-width: 800px; /* 自动适配宽度 */margin: 0 auto; /* 双容器模式 水平居中 */
}.media{float: left;margin: 0 1.5em 1.5em 0; /* 重置 margin */width: calc(50% - 1.5em); /* 从宽度里减去 1.5em */padding: 1.5em;background-color:rgb(238, 245, 247);border-radius: .5em;
}.media-image{width: 60px;height: 60px;
}/* 清除浮动 *//* .clearfix::after{display: block;content: " ";clear: both;
} *//* 清除浮动修改版 */.clearfix::after,
.clearfix::before{display: table;content: " ";
}.clearfix::after{clear: both;
}/* 解决浮动陷阱 */.media:nth-child(odd){clear: left;
}

效果图:

在这里插入图片描述

实现图片被文字环绕

.media-image{width: 100px;height: 100px;float: left; /* 左浮动 */
}.media-body{margin-top: 0; /* 覆盖猫头鹰选择器 */
}.media-body h4{margin-top: 0; /* 覆盖用户代理样式表 */
}

效果:

在这里插入图片描述

实现图片在左文字在右

在这里插入图片描述

如上,图片被包含在了相邻的同级元素 media-body 中。

如果想实现图片在左文字在右,可以为文字创建一个块级格式上下文(block formatting context,BFC)。

BFC 将内部与外部隔绝开,内外互不影响。

创建 BFC 的方式:

  1. float 不为 none。
  2. overflow 不为 visible。
  3. display 为 inline-block、table-cell、table-caption、flex、inline-flex、grid、inline-grid。
  4. position 为 absolute 或 fixed。

网页的根元素就是一个顶级的 BFC。

CSS 修改如下:

.media-image{width: 60px;height: 60px;float: left;margin-right: 1.5em; /* 图片与文字间增加一定间距 */
}.media-body{margin-top: 0; /* 覆盖猫头鹰选择器 */overflow: auto; /* 创建 BFC */
}

效果图:

在这里插入图片描述

注意:使用浮动或 display: inline-block创建BFC的元素的宽度会变为 100%

基于浮动实现网格系统

在这里插入图片描述

大部分的 CSS 框架都实现了自己的网格系统:在一个行容器内放置若干列容器,列的宽度由列容器的类决定

<div class="row"><div class="column-1"></div><div class="column-1"></div><div class="column-1"></div><div class="column-1"></div><div class="column-1"></div><div class="column-1"></div><div class="column-3"></div><div class="column-3"></div>
</div>

使用网格系统可以提高代码的可复用性。

网格系统不参与行列元素的视觉样式,只负责设置宽度和定位。在行列内的元素就不必再考虑宽度和定位了。

/* 网格系统 */.row::after{display: block;content: " ";clear: both;
}[class*="column-"]{float: left;padding: 0 0.75em; /* 左右设置内边距 */margin-top: 0; /* 去掉顶部外边距 */
}.column-1{width: 8.333%;
}
.column-2{width: 16.6667%;
}
.column-3{width: 25%;
}
.column-4{width: 33.3333%;
}
.column-5{width: 41.6667%;
}
.column-6{width: 50%;
}
.column-7{width: 58.333%;
}
.column-8{width: 66.6667%;
}
.column-9{width: 75%;
}
.column-10{width: 83.333%;
}
.column-11{width: 91.6667%;
}
.column-12{width:100%;
}

完整 CSS:

:root {box-sizing: border-box; /* 修改盒模型 */
}*,
::before,
::after {box-sizing: inherit; /* 继承 box-sizing */
}body {background-color: aliceblue;font-family: Arial, Helvetica, sans-serif;
}/* 猫头鹰选择器 */body * + *{margin-top: 1.5em;
}header{padding: 1em 2em;background-color: antiquewhite;border-radius: .5em;margin-bottom: 2em;
}.main{padding: 0 1.5em 1.5em;background-color: white;border-radius: .5em;
}.container{max-width: 800px; /* 自动适配宽度 */margin: 0 auto; /* 双容器模式 水平居中 */
}/* 媒体对象的样式 */.media{padding: 1.5em;background-color:rgb(238, 245, 247);border-radius: .5em;
}.media-image{width: 60px;height: 60px;float: left;margin-right: 1.5em;
}.media-body{margin-top: 0; /* 覆盖猫头鹰选择器 */overflow: auto; /* 创建 BFC */
}.media-body h4{margin-top: 0; /* 覆盖用户代理样式表 */
}/* 清除浮动 *//* .clearfix::after{display: block;content: " ";clear: both;
} *//* 清除浮动修改版 */.clearfix::after,
.clearfix::before{display: table;content: " ";
}.clearfix::after{clear: both;
}/* 网格系统 */.row::after{display: block;content: " ";clear: both;
}[class*="column-"]{float: left;padding: 0 0.75em; /* 左右设置内边距 */margin-top: 0; /* 去掉顶部外边距 */
}.column-1{width: 8.333%;
}
.column-2{width: 16.6667%;
}
.column-3{width: 25%;
}
.column-4{width: 33.3333%;
}
.column-5{width: 41.6667%;
}
.column-6{width: 50%;
}
.column-7{width: 58.333%;
}
.column-8{width: 66.6667%;
}
.column-9{width: 75%;
}
.column-10{width: 83.333%;
}
.column-11{width: 91.6667%;
}
.column-12{width:100%;
}

效果图如下:

在这里插入图片描述

与前面的相比,这个导致了内容出现了错位,没有对齐标题。

使用负 margin 拉伸行元素解决该问题:

/* 网格系统 */.row{margin-left: -0.75em;margin-right: -0.75em;
}...
...

效果图:

在这里插入图片描述

最终代码。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《动手学深度学习 Pytorch版》 7.1 深度卷积神经网络(AlexNet)

7.1.1 学习表征 深度卷积神经网络的突破出现在2012年。突破可归因于以下两个关键因素&#xff1a; 缺少的成分&#xff1a;数据 数据集紧缺的情况在 2010 年前后兴起的大数据浪潮中得到改善。ImageNet 挑战赛中&#xff0c;ImageNet数据集由斯坦福大学教授李飞飞小组的研究人…

Golang 协程池 Ants 实现原理,附详细的图文说明和代码

Golang 协程池 Ants 实现原理&#xff0c;附详细的图文说明和代码。 1 前置知识点 1.1 sync.Locker sync.Locker 是 go 标准库 sync 下定义的锁接口&#xff1a; // A Locker represents an object that can be locked and unlocked. type Locker interface {Lock()Unlock() …

stm32之串口/蓝牙控制led灯

该文章记录学习stm32串口遇到的一些问题&#xff0c;完整代码地址。 一、项目描述 通过串口或蓝牙发送指令来控制led灯。 open ------> led 亮close ------> led 灭其它 -------> 反馈给串口或蓝牙错误指令 二、项目用到的模块 stm32 串口1,PA9(TX), PA10(RX)HC…

udp的简单整理

最近思考udp处理的一些细节&#xff0c;根据公开课&#xff0c;反复思考&#xff0c;终于有所理解&#xff0c;做整理备用。 0&#xff1a;简单汇总 1&#xff1a;udp是基于报文传输的&#xff0c;接收方收取数据时要一次性读完。 2&#xff1a;借助udp进行发包&#xff0c;…

JavaWeb-JavaScript

JavaWeb-JavaScript 什么是JavaScript Web标准 Web标准也称为网页标准&#xff0c;由一系列的标准组成&#xff0c;大部分由W3C ( World Wide Web Consortium&#xff0c;万维网联盟&#xff09;负责制定。三个组成部分&#xff1a; HTML&#xff1a;负责网页的结构&#xf…

32 随机链表的复制

随机链表的复制 题解1 哈希表题解2 回溯哈希哈希思路精简 题解3 优化迭代 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点…

OR54 字符串中找出连续最长的数字串

目录 一、题目 二、解答 &#xff08;一&#xff09;问题一&#xff1a;在记录完一组连续字符串后&#xff0c;没有注意判别紧随其后的非数字字符 &#xff08;二&#xff09;问题二&#xff1a;越界访问 &#xff08;三&#xff09;正确 一、题目 字符串中找出连续最长的…

设计模式再探——原型模式

目录 一、背景介绍二、思路&方案三、过程1.原型模式简介2.原型模式的类图3.原型模式代码4.原型模式深度剖析5.原型模式与spring 四、总结五、升华 一、背景介绍 最近在做业务实现的时候&#xff0c;为了通过提升机器来降低开发人员的难度和要求&#xff0c;于是在架构设计…

数据标准化

1、均值方差标准化(Z-Score标准化) 计算过程&#xff1a; 对每个属性/每列分别进行一下操作&#xff0c;将数据按属性/按列减去其均值&#xff0c;并除以其方差&#xff0c;最终使每个属性/每列的所有数据都聚集在均值为0&#xff0c;方差为1附近。 公式&#xff1a;(x-mean(x…

电子信息工程专业课复习知识点总结:(五)通信原理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 第一章通信系统概述——通信系统的构成、各部分性质、性能指标1.通信系统的组成&#xff1f;2.通信系统的分类&#xff1f;3.调制、解调是什么&#xff1f;有什么用…

【数据结构--排序】堆排序

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

在北京多有钱能称为富

背景 首先声明&#xff0c;此讨论仅限个人的观点&#xff0c;因为我本身不富嘛&#xff0c;所以想法应该非常局限。 举个栗子 富二代问我朋友&#xff0c;100~1000w之间&#xff0c;推荐一款车&#xff1f; 一开始听到这个问题的时候&#xff0c;有被唬住&#xff0c;觉得预…

XXE 漏洞及案例实战

文章目录 XXE 漏洞1. 基础概念1.1 XML基础概念1.2 XML与HTML的主要差异1.3 xml示例 2. 演示案例2.1 pikachu靶场XML2.1.1 文件读取2.1.2 内网探针或者攻击内网应用&#xff08;触发漏洞地址&#xff09;2.1.4 RCE2.1.5 引入外部实体DTD2.1.6 无回显读取文件 3. XXE 绕过3.1 dat…

Nitrux 3.0 正式发布并全面上市

导读乌里-埃雷拉&#xff08;Uri Herrera&#xff09;近日宣布 Nitrux 3.0 正式发布并全面上市&#xff0c;它是基于 Debian、无 systemd、不可变的 GNU/Linux 发行版的最新安装媒体&#xff0c;利用了 KDE 软件。 Nitrux 3.0 由带有 Liquorix 味道的 Linux 6.4.12 内核提供支持…

QT-day4

画一个时钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPaintEvent> #include <QDebug> #include <QPainter> #include <QTimer> #include <QTime>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } Q…

记一次逆向某医院挂号软件的经历

背景 最近家里娃需要挂专家号的儿保&#xff0c;奈何专家号实在过于抢手&#xff0c;身为程序员的我也没有其他的社会资源渠道可以去弄个号&#xff0c;只能发挥自己的技术力量来解决这个问题了。 出师不利 首先把应用安装到我已经 Root 过的 Pixel 3 上面&#xff0c;点击应…

关于Pandas数据分析

pandas的数据加载与预处理 数据清洗&#xff1a;洗掉脏数据 整理分析&#xff1a;字不如表 数据展现&#xff1a;表不如图 环境搭建 pythonjupyter anaconda Jupyter Notebook Jupyter Notebook可以在网页页面中直接编写代码和运行代码, 代码的运行结果也会直接在代码块下显示…

【 Ubuntu】systemd服务创建、启用、状态查询、自启等

要在 Ubuntu 启动后执行一个守护脚本&#xff0c;您可以使用 Shell 脚本编写一个 systemd 服务单元。systemd 是 Ubuntu 中常用的服务管理工具&#xff0c;可以在系统启动时自动启动和管理服务。 下面是一个示例的守护脚本和 systemd 服务单元的步骤&#xff1a; 创建守护脚本…

Spring之依赖注入源码解析

基于Autowired的依赖注入底层原理 基于Resource注解底层工作流程图&#xff1a; 1 Spring中到底有几种依赖注入的方式&#xff1f; 首先分两种&#xff1a; 手动注入 自动注入 1.1 手动注入 在XML中定义Bean时&#xff0c;就是手动注入&#xff0c;因为是程序员手动给某…

LeetCode 75-02:字符串的最大公因子

前置知识&#xff1a;使用欧几里得算法求出最大公约数 func gcdOfStrings(str1 string, str2 string) string {if str1str2 ! str2str1 {return ""}return str1[:gcd(len(str1), len(str2))] }func gcd(a, b int)int{if b 0{return a}return gcd(b, a%b) }