当前位置: 首页 > news >正文

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

二元素布局

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

纵向布局

基于标准流和块级元素的基础布局,每个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.lryc.cn/news/35599.html

相关文章:

  • 【冲刺蓝桥杯的最后30天】day6
  • ssm框架之spring:浅聊IOC
  • pytest初识
  • 设计模式~责任链模式(Chain of Responsibility)-12
  • 【ElasticSearch】(一)—— 初识ES
  • MySQL 事务隔离
  • 基础06-JS中for-in和for-of有什么区别
  • AI视频智能分析EasyCVR视频融合平台录像计划模块搜索框细节优化
  • TCP和UDP对比
  • CVS Health 西维斯健康EDI需求
  • Anaconda配置Python科学计算库SciPy的方法
  • 数据库基本功之复杂查询的子查询
  • 脑机接口科普0019——大脑的分区及功能
  • 阿里云服务器使用教程:CentOS 7 安装JDK及Tomcat(以jdk1.8、tomcat9.0.37为例)
  • Ubuntu20.04下安装vm17+win10/11
  • Kalman Filter in SLAM (1) ——Data Fusion and Kalman Filter(数据融合和卡尔曼滤波)
  • 黑马程序最后
  • u盘系统文件删除后的五种恢复方法
  • 【玩转c++】List讲解和模拟底层实现
  • 【Python】特征编码
  • 前端开发者必备的Nginx知识
  • 在 KubeSphere 中开启新一代云原生数仓 Databend
  • 华为OD机试 - 最优资源分配(C 语言解题)【独家】
  • 求数组的中心索引
  • Ubuntu 搭建NextCloud私有云盘【内网穿透远程访问】
  • 如何使用vue创建一个完整的前端项目
  • http组成及状态及参数传递
  • USART_GetITStatus与 USART_GetFlagStatus的区别
  • Java 系列之 Springboot
  • 乐山持点科技:抖客推广准入及准出管理规则