[css]通过网站实例学习以最简单的方式构造三元素布局

news2024/11/16 21:49:12

二元素布局

在学习三元素布局之前,让我们先简单了解一下只有两个元素的布局吧
两个元素的相对关系非常简单,不是上下就是左右

纵向布局

基于标准流和块级元素的基础布局,每个div独占一行。另外如图,如果子元素添加 “margin: 0 auto;” 属性可以实现水平居中(默认body为父容器)。
在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			:root {
				background: gray;
			}
			div {
				width: 100px;
				height: 100px;
			}
			.first {
				background: red;
				/*margin: 0 auto;*/
			}
			.second {
				background: blue;
				/*margin: 0 auto;*/
			}
		</style>
	</head>
	<body>
		<div class="first"></div>
		<div class="second"></div>
	</body>
</html>

横向布局

为了解决块级元素无法横向布局的问题,float属性出现了,它可以让你的块级元素脱离标准文档流,按行排列。下图将两个div都设置了 “float: left;” 属性。
注意:此时如果父容器没有设置高度的话会出现高度坍塌,详情知识请自行搜索 “css之bfc” 。
注意2:如果只设置一个div的 “float: left;” 会造成遮盖问题(因为两个div不在一个流里了)
在这里插入图片描述
当然也可以设置一个向左、一个向右浮动
在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			body {
				background: gray;
				width: 100vw;
				height: 100vh;
			}
			div {
				width: 100px;
				height: 100px;
			}
			.first {
				float: left;
				background: red;
			}
			.second {
				float: left;
				/*向右漂流*/
				/*float: right;*/
				background: blue;
			}
		</style>
	</head>
	<body>
		<div class="first"></div>
		<div class="second"></div>
	</body>
</html>

三元素布局

b站直播布局实例

这是B站直播网站实例,可以从中发现几个三元素布局呢?下面我们将以方向来命名进行研究学习,如:左上下。

请添加图片描述

左右-下 布局

在这里插入图片描述
这个布局需要引入新的属性 “clean: both;” 它的意思是,该元素左右都不能有浮动元素。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			body {
				background: gray;
				width: 40vw;
				height: 100vh;
			}
			div {
				width: 100px;
				height: 100px;
			}
			.first {
				float: left;
				background: red;
			}
			.second {
				float: right;
				background: blue;
			}
			.third {
				clear: both;
				margin: auto;
				background: yellow;
			}
		</style>
	</head>
	<body>
		<div class="first"></div>
		<div class="second"></div>
		<div class="third"></div>
	</body>
</html>

因为first块和second块占领了第一行,所以third块自动另换了一行。
在这里插入图片描述
想要b站实例效果只用再给元素添上宽度就行了。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			body {
				background: gray;
				width: 40vw;
				height: 100vh;
			}
			div {
				width: 100px;
				height: 100px;
			}
			.first {
				float: left;
				width: 50%;
				background: red;
			}
			.second {
				float: right;
				width: 50%;
				background: blue;
			}
			.third {
				clear: both;
				width: 100%;
				background: yellow;
			}
		</style>
	</head>
	<body>
		<div class="first"></div>
		<div class="second"></div>
		<div class="third"></div>
	</body>
</html>

在这里插入图片描述

左-上下 布局

在这里插入图片描述同样,灵活利用 “clean: right;” 属性,设置第三个div的右侧不能有浮动元素。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			body {
				background: gray;
				width: 40vw;
				height: 100vh;
			}
			div {
				width: 100px;
				height: 100px;
			}
			.first {
				float: left;
				background: red;
				height: 200px;
			}
			.second {
				float: right;
				background: blue;
			}
			.third {
				clear: right;
				float: right;
				background: yellow;
			}
		</style>
	</head>
	<body>
		<div class="first"></div>
		<div class="second"></div>
		<div class="third"></div>
	</body>
</html>

在这里插入图片描述

注意:变为浮动元素后,设置 "width: 100%"只会根据父元素变化;设置 "width: auto"失效
因此只能手动设置宽度为固定值或者放弃将右侧元素设为浮动元素。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			body {
				background: gray;
				width: 40vw;
				height: 100vh;
			}
			div {
				width: 100px;
				height: 100px;
			}
			.first {
				float: left;
				background: red;
				height: 200px;
			}
			.second {
				background: blue;
				width: auto;
			}
			.third {
				background: yellow;
				width: auto;
			}
		</style>
	</head>
	<body>
		<div class="first"></div>
		<div class="second"></div>
		<div class="third"></div>
	</body>
</html>

在这里插入图片描述

这里蓝块和黄块左侧都被红块遮挡了,真实布局中记得设置margin。

上下-右 布局

在这里插入图片描述显然,这里出现了更加复杂的情况,我们不仅要将上一次中的红div放到右边,还需要将剩下的div右对齐。

方案一

利用float元素超过长度自动换行的特性,将前置元素长度设置大些:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			body {
				background: gray;
				width: 40vw;
				height: 100vh;
			}
			div {
				width: 100px;
				height: 100px;
			}
			.first {
				float: right;
				background: red;
				height: 200px;
			}
			.second {
				float: right;
				background: blue;
				width: 200px;
			}
			.third {
				float: right;
				background: yellow;
			}
		</style>
	</head>
	<body>
		<div class="first"></div>
		<div class="second"></div>
		<div class="third"></div>
	</body>
</html>

在这里插入图片描述

这里黄色div放到第一行会超出父容器,因此自动换行了

方案二

给div容器设置足够长,让div容器内的元素向右排列,同样需要注意阻挡问题。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			body {
				background: gray;
				width: 40vw;
				height: 100vh;
			}
			div {
				width: 100px;
				height: 100px;
			}
			.first {
				float: right;
				background: red;
				height: 200px;
			}
			.second {
				background: blue;
				width: 100%;
			}
			.third {
				background: yellow;
				width: 100%;
			}
			/* 给div子元素设置右对齐 */
			/* .second > * , .third > * {
				float: right;
			} */
		</style>
	</head>
	<body>
		<div class="first"></div>
		<div class="second"></div>
		<div class="third"></div>
	</body>
</html>

在这里插入图片描述

后言

无疑,三元素布局和二元素布局就是所有布局的基础(只用二元素布局会出现非常多的div嵌套,维护困难)。当然三元素布局的实现方法也不只有利用float一种,活用margin或者relative也能实现三元素布局,但是这样后期维护会非常的困难(牵一发而动全身)。因此float也不失为一种好的快速布局方法。

在大型项目中或许使用flex布局或者grid布局有更好的可读性和易维护性。可是对于小型项目的快速开发,无疑活用float属性能增加效率并使代码更加简洁(少套几个div)。

另外虽然文中提到标准流和浮动流,但实际这两种流还是在同一层级。因为虽然标准流排布会无视浮动流的存在,但浮动流却会考虑标准流而改变布局形式。所以摆放顺序是至关重要的。

先放div.left再放div,div会被遮盖
先放div再放div.left,div.left会自动换行,div不会被遮盖

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

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

相关文章

Anaconda配置Python科学计算库SciPy的方法

本文介绍在Anaconda环境中&#xff0c;安装Python语言SciPy模块的方法。 SciPy是基于Python的科学计算库&#xff0c;用于解决科学、工程和技术计算中的各种问题。它建立在NumPy库的基础之上&#xff0c;提供了大量高效、易于使用的功能&#xff0c;包括统计分析、信号处理、优…

用一个例子告诉你 怎样在spark中创建累加器

目录 1.说明 1.1 什么是累加器 1.2 累加器的功能 2. 使用累加器 3. 累加器和reduce、fold算子的区别 1.说明 1.1 什么是累加器 累加器是Spark提供的一个共享变量(Shared Variables) 默认情况下&#xff0c;如果Executor节点上使用到了Driver端定义的变量(通过算子传…

Redis常用命令及数据类型参数

1. 针对于string SET key value / GET key SET k1 v1 GET k1 // v1String是二进制安全的&#xff0c;是可变长度的&#xff0c; 底层类似于ArrayList 是可扩容的&#xff0c;最大存储内存为 512MB。 2. 判断key中是否存在某个内容 EXISTS key SET k1 v1 EXISTS k1 // …

Noah-MP陆面过程模型建模方法与站点、区域模拟

陆表过程的主要研究内容以及陆面模型在生态水文研究中的地位和作用 熟悉模型的发展历程&#xff0c;常见模型及各自特点&#xff1b; Noah-MP模型的原理 Noah-MP模型所需的系统环境与编译环境的搭建方法您都了解吗&#xff1f;&#xff1f; linux系统操作环境您熟悉吗&…

Linux驱动中的fasync(异步通知)和fsync

一、fsync用来同步设备的写入操作&#xff0c;考虑把一块设局写入到硬盘的操作&#xff0c;如果使用write函数&#xff0c;函数返回后只能保证数据被写入到驱动程序或者内核管理的数据缓存中&#xff0c;而无法保证数据被真正写入到硬盘的存储块里。但是fync可以做到这一点&…

查找、排序、二叉树的算法,统统记录于此。

文章目录一、查找1. 无序表的顺序查找2. 折半查找3. 分块查找4. 二叉排序树BST5. 哈希表查找二、排序1. 不带哨兵的直接插入排序2. 带哨兵的直接插入排序3. 带哨兵、折半查找的直接插入排序4. 希尔排序5. 冒泡排序6. 快速排序7. 选择排序8. 堆排序9. 归并排序二叉树1. 递归先序…

八,iperf3源代码分析:状态机及状态转换过程--->运行正向TCP单向测试时的客户端代码

本文目录一、测试用命令二、iperf3客户端状态机中各个状态解析状态机迁移图运行正向TCP单向测试时的客户端的状态列表三、iperf3客户端状态机迁移分析A-初始化测试对象&#xff08;NA--->初始化状态&#xff09;:B-建立控制连接&#xff0c;等待服务端PARAM_EXCHANGE的指令&…

西电机试数据结构核心算法与习题代码汇总(机考真题+核心算法)

文章目录前言一、链表问题1.1 反转链表1.1.1 题目1.1.2 代码1.2 多项式加减法1.2.1 题目1.2.2 代码二、队列和栈2.1 学生退学2.1.1 问题2.1.2 代码三、矩阵和串题目3.1 矩阵对角线求和3.1.1 问题3.1.2 代码四、排序问题4.1 多元素排序4.1.1 问题4.1.2 代码五、二叉树5.1 相同二…

synchronize优化偏向锁

偏向锁 轻量级锁在没有竞争时&#xff08;只有自己一个线程&#xff09;&#xff0c;仍然会尝试CAS替换mark word&#xff1b; 会造成一定的性能的损耗&#xff1b; JDK6之中引入了偏向锁进行优化&#xff0c;第一次使用时线程ID注入到Mark word中&#xff0c;之后重入不再进…

旅游预约APP开发具有什么优势和功能

旅游活动目前正在作为广大用户休闲娱乐的一个首选内容&#xff0c;不仅是公司团建活动可以选择旅游&#xff0c;而且一些节假日也可以集结自己的亲朋好友来一次快乐有趣的旅游活动&#xff0c;随着当代人对于旅游的需求呈现上升的趋势&#xff0c;也让旅游预约APP开发开始流行并…

大家都在用哪些研发流程管理软件?

全球知名的10款流程管理软件分享&#xff1a;1.IT/研发项目流程管理&#xff1a;PingCode&#xff1b;2.通用项目流程管理&#xff1a;Worktile&#xff1b;3.销售流程管理&#xff1a;Salesforce Workflow&#xff1b;4.合同流程管理&#xff1a;Agiloft&#xff1b;5.IBM Bus…

20230308 APDL Lsdyna结构学习笔记

可以用鼠标右键进行结构的旋转视图。 一、编辑材料 输入参数分别为: 密度; 弹性模量; 泊松比; 屈服应力; 切线模量 由于模型是分块建立的,这里需要把模型进行粘接 点击booleans(布尔工具) 点击Glue、areas,结构物是由面单元构成的

ReactDOM.render函数内部做了啥

ReactDOM.render函数是整个 React 应用程序首次渲染的入口函数&#xff0c;它的参数是什么&#xff0c;返回值是什么&#xff0c;函数内部做了什么&#xff1f; ReactDOM.render(<App />, document.getElementById("root")); 前序 首先看下首次渲染时候&…

二叉树OJ题目详解

根据二叉树创建字符串 采用前序遍历的方式&#xff0c;将二叉树转换成一个由括号和数字组成的字符串。 再访问每一个节点时&#xff0c;需要分情况讨论。 如果这个节点的左子树不为空&#xff0c;那么字符串应加上括号和左子树的内容&#xff0c;然后判断右子树是否为空&#x…

VBA小模板,跨表统计的2种写法

目标 1 统计一个excel 文件里&#xff0c;多个sheet里的内容2 有的统计需求是&#xff0c;每个表只单表统计&#xff0c;只是进行批量操作3 有的需求是&#xff0c;多个表得某些行列累加等造出来得文件 2 实现方法1 &#xff08;可能只适合VBAEXCEL&#xff0c;不太干净的写法…

一文带你了解,前端模块化那些事儿

文章目录前端模块化省流&#xff1a;chatGPT 总结一、参考资料二、发展历史1.无模块化引出的问题:横向拓展2.IIFE3.Commonjs(cjs)4.AMD引出的问题&#xff1a;5.CMD6.UMD7.ESM往期精彩文章前端模块化 省流&#xff1a;chatGPT 总结 该文章主要讲述了前端模块化的发展历史和各个…

css伪类和伪元素的区别

文章目录什么是css伪类和伪元素css伪类和伪元素有什么用&#xff1f;css伪类的具体使用常见的伪类伪元素的具体使用常见的伪元素什么是css伪类和伪元素 伪类和为元素是两个完全不同且重要的概念&#xff0c;它们的作用是给元素添加一些特殊的效果或样式 伪类用于选择某个元素的…

Kalman Filter in SLAM (6) ——Error-state Kalman Filter (EsKF, 误差状态卡尔曼滤波)

文章目录0.前言1. IMU的误差状态空间方程2. 误差状态观测方程3. 误差状态卡尔曼滤波4. 误差状态卡尔曼滤波方程细节问题0.前言 这里先说一句&#xff1a;什么误差状态卡尔曼&#xff1f;完全就是在扯淡&#xff01; 回想上面我们推导的IMU的误差状态空间方程&#xff0c;其实…

乐山持点科技:抖客推广准入及准出管理规则

抖音小店平台新增《抖客推广准入及准出管理规则》&#xff0c;本次抖音规则具体如下&#xff1a;第一章 概述1.1 目的及依据为维护精选联盟平台经营秩序&#xff0c;保障精选联盟抖客、商家、消费者等各方的合法权益;根据《巨量百应平台服务协议》、《“精选联盟”服务协议(推广…

【GNN/深度学习】常用的图数据集(资源包)

【GNN/深度学习】常用的图数据集&#xff08;图结构&#xff09; 文章目录【GNN/深度学习】常用的图数据集&#xff08;图结构&#xff09;1. 介绍2. 图数据集2.1 Cora2.2 Citeseer2.3 Pubmed2.4 DBLP2.5 ACM2.6 AMAP & AMAC2.7 WIKI2.8 COCS2.9 BAT2.10 EAT2.11 UAT2.12 C…