前端(六)浮动流

news2024/12/15 11:51:09

浮动流

文章目录

  • 浮动流
  • 一、标准流
  • 二、浮动流

一、标准流

所谓网页布局就是网页排版的方式,css中有三种网页布局的方式:标准流、浮动流和定位流。

标准流也称文档流,这是浏览器默认的排版方式。标准流中网页的元素会按从左往右、从上往下的顺序依次排列。
标准流中,块级元素会按从上往下的顺序以此排列,而行内元素和行内块级元素则是按从左往右的顺序排列,当一行排满一行会排入下一行中。

另外在网页布局时经常会出现一个问题,当我们固定了盒子的大小,然后缩小网页的尺寸时,盒子不会跟着网页缩小而缩小,因而页面的布局会发送扭曲。为了解决这个问题,我们可以使用百分比来设置盒子的大小,但是百分比设置大小时,盒子父元素的高度必须设置百分比,父元素默认的高度百分比是0,宽度百分比是100,不设置子元素将无法显示出来。如下方的代码中为了让红盒子顺利显示,它的父元素(html、body、蓝色div)都要设置height的百分比,少一个红盒子都无法显示。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>浮动流</title>
    <style>
        html{height: 100%;padding:0}
        body{height: 100%;padding:0}
    </style>
</head>
<body>
<div style="width: 20%;height: 20%;background-color: blue">
    <div style="width: 20%;height: 20%;background-color: red"></div>
</div>
</body>
</html>

在这里插入图片描述

二、浮动流

浮动流是一种半脱离文档流的排版方式,浮动流的元素有以下特点:

  • 不再区分行内、块级、行内块级元素,都可以水平移动
  • 无论是什么级的元素都可以设置宽高
  • 浮起的元素可以看成处于文档层的上方,如果一个元素浮起了,下面的元素会顶上去填充浮起元素原来的位置,并且浮起的元素会遮盖下方顶上来的元素

另外设置浮动流以后的元素,margin:0 auto会失效。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>浮动流</title>
</head>
<body>
<div style="width: 50px;height: 50px;background-color:blue ;float:left"></div>
<div style="width: 80px;height: 80px;background-color:green "></div>
</body>
</html>

在这里插入图片描述
浮动流float只能设置left或者right,没有center这个值,也就是说元素浮起以后要么向左靠,要么向右靠,不能保持在中间位置。
如果想让两个元素处在同一行,有两种方法,一种是把它们设置为浮动流,另外一种是设置元素为行内块级元素,display:inline-block。

浮动流被称为半脱离文档流的原因是元素浮起以后垂直位置依然要依靠浮起以前的位置来确定,如果是全脱离则元素在水平与垂直方向都可以自由移动了,起位置完全不受原先在文档流中位置影响了。
而浮起元素贴靠的原则是:

  • 先浮在前,后浮在后,左浮靠左浮,右浮靠右浮
  • 浮起元素垂直位置以自身当前垂直位置为准,如果前面的元素浮起了,则下面的元素要先顶上去以后再找浮起的垂直位置
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>浮动流</title>
</head>
<body>
<div style="width: 50px;height: 50px;background-color:blue ;float:left"></div>
<div style="width: 80px;height: 80px;background-color:green;float:left "></div>
<div style="width: 100px;height: 100px;background-color:red"></div>
<div style="width: 50px;height: 50px;background-color:pink;float:left "></div>

</body>
</html>

在这里插入图片描述
上方代码中蓝色盒子先浮起向左靠,然后绿色盒子会顶上蓝色盒子原先的位置,绿色盒子再浮起则是处于蓝色盒子相同的垂直位置,而蓝色盒子已经在该垂直位置上左浮了,因此绿色盒子浮起靠在蓝色盒子的后面。红色盒子不浮起,顶上蓝色绿色盒子空缺的位置,粉色盒子以红色盒子上靠完以后的垂直位置开始向左浮起。

当父级元素宽度无法容纳浮起元素时,浮起元素会先找前面元素的左下点作为垂直位置的起始点,贴靠在其空白处,如果此元素也无法容纳浮起元素,则浮起元素再找前一个元素,以此类推直到找到父元素最左侧为止,此时无论父元素能否容纳,浮起元素都会显示在该位置。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>浮动流</title>
</head>
<body>
<div style="width:150px ;height: 150px;background-color: black">
    <div style="width: 70px;height: 70px;background-color:blue ;float:left"></div>
    <div style="width: 50px;height: 50px;background-color:red;float: left"></div>
    <div style="width: 50px;height: 50px;background-color:pink;float:left "></div>
    <div style="width: 50px;height: 50px;background-color:yellow;float:left "></div>
</div>
</body>
</html>

在这里插入图片描述

上方的代码中父元素是黑色的,蓝红粉黄四个子盒子浮起,如果父盒子能容纳则是会并列在第一行。但是当粉色盒子浮起时父盒子已经无法容纳它了,因此粉色盒子找到蓝色盒子的左下点,贴靠在它的空白处。而当黄色盒子浮起时,前面浮起的盒子左下侧都没法容纳它了,因此它会以上面三个盒子的最下侧(也就是粉色盒子的最下侧)为垂直方向起始位置,贴靠在父盒子的最左侧。

文字或者行内块级元素会围绕在浮动元素的周围。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>浮动流</title>
</head>
<body>
<div style="width: 50px;height: 50px;background-color:blue ;float:left"></div>
<!--word-break: break-all必须写上-->
<div style="width: 100px;height: 100px;background-color:red;word-break: break-all">12121332121</div>
</body>
</html>

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>浮动流</title>
</head>
<body>
<div style="width: 100px;height: 100px;background-color:blue ;float:left"></div>
<img src="图片" width="30px" height="30px">
<img src="图片" width="30px" height="30px">
<img src="图片" width="30px" height="30px">
<img src="图片" width="30px" height="30px">
</body>
</html>

在这里插入图片描述
在企业开发中浮动流布局也经常被用到,通常网页布局会按从外向内,从上往下的顺序先把大盒子布局好,然后在大盒子内使用浮动流布局小元素的位置。

另外当父盒子不设置宽高时,本质是这个父盒子高度为0%,宽度为100%,其真实大小是被里面子盒子撑开的大小。此时如果子盒子浮动起来,父盒子会瞬间消失(塌陷回高度0%时的状态)。为了避免父元素塌陷给页面布局带来的影响,咱们有三种常见的解决方案:

<!--方案一:外墙法-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div>
    <div style="width: 100px;height: 100px;background-color:blue;float: left">子元素</div>
</div>
<!--外墙-->
<!--clear: both表示该元素的左右两侧不能有浮动元素,如果左侧出现浮动元素则该元素移到浮动元素下方,另外只有块级元素才有clear-->
<div style="clear: both"></div>
<div style="width: 100px;height: 100px;background-color:yellow">content</div>
</body>
</html>
<!--方案二:内墙法-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div>
    <div style="width: 100px;height: 100px;background-color:blue;float: left">子元素</div>
    <!--内墙-->
    <div style="clear: both"></div>
</div>
<div style="width: 100px;height: 100px;background-color:yellow">content</div>
</body>
</html>
<!--方案三:伪类法-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        /*zoom:1是为了解决兼容问题*/
        .clearfix:after{content: "";display: table;clear: both;*zoom:1}
        .box1{width: 100px;height: 100px;background-color:blue;float: left}
        .box2{width: 100px;height: 100px;background-color:yellow}
    </style>
</head>
<body>

<div class="clearfix">
    <div class="box1">子元素</div>
</div>
<div class="box2">content</div>
</body>
</html>

另外在上一章中提到过一个问题,如果两个盒子嵌套,父盒子没有边框,子盒子的margin-top会把两个盒子都定下来.这个问题的本质是父元素没有边框,子元素的margin-top不能参照父元素,那么就会去参照body,因此父元素和子元素会一起被顶下去。这个问题同样可以使用伪类法解决,咱们可以在父元素before位置设置一个table当做参照物。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .clearfix:before{content: "";display: table;*zoom:1}
        .box1{width: 100px;height: 100px;background-color:red}
        .box2{width: 50px;height: 50px;background-color:blue;margin-top: 30px}
    </style>
</head>
<body>

<div class="clearfix box1">
    <div class="box2"></div>
</div>
</body>
</html>

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

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

相关文章

双内核架构 Xenomai 4 安装教程

Xenomai 4是一种双内核架构, 继承了Xenomai系列的特点&#xff0c;通过在Linux内核中嵌入一个辅助核心&#xff08;companion core&#xff09;&#xff0c;来提供实时能力。这个辅助核心专门处理那些需要极低且有界响应时间的任务。 本文将在官网教程(https://evlproject.org/…

【安全研究】某黑产网站后台滲透与逆向分析

文章目录 x01. 前言x02. 分析 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与…

【SH】微信小程序调用EasyDL零门槛AI开发平台的图像分类研发笔记

文章目录 微信小程序字符串字符串模板字符串拼接 上传图片编写JS代码编写wxml代码编写wxss代码 GET请求测试编写测试代码域名不合法问题 GET和POST请求测试编写JS代码编写wxml代码编写wxss代码 效果展示 微信小程序字符串 字符串模板 这是ES6引入的特性&#xff0c;允许你通过…

6.2 Postman接口收发包

欢迎大家订阅【软件测试】 专栏&#xff0c;开启你的软件测试学习之旅&#xff01; 文章目录 前言1 接口收发包的类比1.1 获取对方地址&#xff08;填写接口URL&#xff09;1.2 选择快递公司&#xff08;设置HTTP方法&#xff09;1.3 填写快递单&#xff08;设置请求头域&#…

数据链路层(Java)(MAC与IP的区别)

以太网协议&#xff1a; "以太⽹" 不是⼀种具体的⽹络, ⽽是⼀种技术标准; 既包含了数据链路层的内容, 也包含了⼀些物理 层的内容. 例如: 规定了⽹络拓扑结构, 访问控制⽅式, 传输速率等; 例如以太⽹中的⽹线必须使⽤双绞线; 传输速率有10M, 100M, 1000M等; 以太…

SpringBoot2+Vue2开发工作管理系统

项目介绍 在工作中使用的管理系统&#xff0c;可以随手记录一些笔记、可以汇总一些常用网站的链接、可以管理自己负责的项目、可以记录每日日报和查看历史日报、可以记录加班情况、可以记录报销内容、可以编写文章文档。 系统功能 我的笔记快捷入口项目管理今日日报我的日报…

软考中级-软件设计师通过心路经验分享

执念&#xff0c;第四次终于通过了 没买书&#xff0c;下班后每天2小时&#xff0c;四个2个月终于过了 学习经验&#xff1a; 1.下班后学习真的靠毅力&#xff0c;和上学的时候考证不是一个状态&#xff0c;大家要及时调整&#xff0c;否则过程很痛苦 2.失败三次的经验&#xf…

burp(2)利用java安装burpsuite

BurpSuite安装 burpsuite 2024.10专业版&#xff0c;已经内置java环境&#xff0c;可以直接使用&#xff0c; 支持Windows linux macOS&#xff01;&#xff01;&#xff01; 内置jre环境&#xff0c;无需安装java即可使用&#xff01;&#xff01;&#xff01; bp2024.10下载…

el-table 动态计算合并行

原始表格及代码 <el-table:data"tableData"class"myTable"header-row-class-name"tableHead" ><el-table-column prop"date" label"日期"> </el-table-column><el-table-column prop"name" …

【Tomcat】第二站:Tomcat通过反射机制运行项目

目录 前言 1. 动态资源&静态资源 1.1 为什么要区分&#xff1f; 1.2 静态资源 1.3 动态资源 1.4 如何判断 2. Tomcat优先动态 2.1 原因 3. Tomcat运行项目的流程 前言 我们在写项目时&#xff0c;在进行前后端交互时&#xff0c;都会创建一个servlet&#xff0c;然…

vue canvas 绘制选定区域 矩形框

客户那边文档相当的多&#xff0c;目前需要协助其将文档转为数据写入数据库&#xff0c;并与其他系统进行数据共享及建设&#xff0c;所以不得不搞一个识别的功能&#xff0c;用户上传PDF文档后&#xff0c;对于关键信息点进行识别入库&#xff01; 以下为核心代码&#xff0c…

[Pro Git#3] 远程仓库 | ssh key | .gitignore配置

目录 1. 分布式版本控制系统的概念 2. 实际使用中的“中央服务器” 3. 远程仓库的理解 4. 新建远程仓库 5. 克隆远程仓库 6. 设置SSH Key 实验 一、多用户协作与公钥管理 二、克隆后的本地与远程分支对应 三、向远程仓库推送 四、拉取远程仓库更新 五、配置Git忽略…

【Python网络爬虫笔记】11- Xpath精准定位元素

目录 一、Xpath 在 Python 网络爬虫中的作用&#xff08;一&#xff09;精准定位元素&#xff08;二&#xff09;应对动态网页&#xff08;三&#xff09;数据结构化提取 二、Xpath 的常用方法&#xff08;一&#xff09;节点选取&#xff08;二&#xff09;谓词筛选&#xff0…

Spark执行计划解析后是如何触发执行的?

在前一篇Spark SQL 执行计划解析源码分析中&#xff0c;笔者分析了Spark SQL 执行计划的解析&#xff0c;很多文章甚至Spark相关的书籍在讲完执行计划解析之后就开始进入讲解Stage切分和调度Task执行&#xff0c;每个概念之间没有强烈的关联&#xff0c;因此这中间总感觉少了点…

java抽奖系统登录下(四)

6.4 关于登录 最简单的登录&#xff1a; 1、web登录页填写登录信息&#xff0c;前端发送登录信息到后端&#xff1b; 2、后端接受登录信息&#xff0c;并校验。校验成功&#xff0c;返回成功结果。 这种登录会出现一个问题&#xff0c;用户1成功登录之后&#xff0c;获取到后台…

基于米尔全志T527开发板的OpenCV进行手势识别方案

本文将介绍基于米尔电子MYD-LT527开发板&#xff08;米尔基于全志T527开发板&#xff09;的OpenCV手势识别方案测试。 摘自优秀创作者-小火苗 米尔基于全志T527开发板 一、软件环境安装 1.安装OpenCV sudo apt-get install libopencv-dev python3-opencv 2.安装pip sudo apt…

【传感器技术】第6章 压电式传感器,压电材料,压电效应,电压放大器

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…

AI 智能体(AI Agent)到底什么原理?能干什么事情

智能体应用有哪些&#xff1f; 智能体在千行百业中有着广泛的应用&#xff0c;目前已经在 600 多个项目落地和探索&#xff0c;广泛应用于政府与公共事业、交通、工业、能源、金融、医疗、科研等行业。智能体是模拟人类智能的计算机系统&#xff0c;能自主感知环境、智能决策并…

力扣-图论-12【算法学习day.62】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…

智慧政务数据中台建设及运营解决方案

数据中台&#xff1a;政府数字化转型的引擎 数据中台作为政府数字化转型的核心驱动力&#xff0c;起源于美军的作战体系&#xff0c;强调高效、灵活与强大。它不仅促进了政府决策的科学性&#xff0c;还推动了政府服务的精细化与智能化。 数据中台的应用场景&#xff1a;数字…