【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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习(三)——Springer特刊推荐

特刊征稿 01 期刊名称&#xff1a; MOBILE NETWORKS & APPLICATIONS 特刊名称&#xff1a;Resource Efficient Deep Learning for Computer Vision Applications 截止时间&#xff1a; 开放提交&#xff1a;2023年12月13日 提交截止日期&#xff1a;2024年10月30日 目标…

CANopen开源库canfestival的移植

本文记录将CANopen开源库CANfestival移植到GD32F470单片机的过程。CANopen协议理解请参考博客&#xff1a;CANopen协议的理解-CSDN博客 CANfestival开源库下载链接 CSDN链接&#xff1a; https://download.csdn.net/download/heqiunong/89774627 官网链接&#xff1a;https:/…

无人便利店无人超市云值守收银系统源码

随着人力成本越来越高&#xff0c;很多门店越来想做无人值守模式&#xff0c;尤其是晚上休息时间等想让云值守客服来看店。自然要求收银系统需要可以在【有收银员值守】和【无收银员值守】两种模式灵活切换。 1. 有收银员值守模式 白天有收银员在店&#xff0c;收银员可以协助…

OJ在线评测系统 代码沙箱优化模版方法模式 使用与有规范的流程 并且执行流程可以复用

代码沙箱优化模版方法模式 上次我们代码沙箱的docker实现和原生实现 我们可以使用模版方法设计模式去优化我们的代码 我们原生的java实现代码沙箱和docker实现代码沙箱是有更多重复点的 比如说把文件 收集文件 进行校验 我们要用模版方法设计模式 定义一套通用的执行流程 让…

MySQL 之索引详解

想象一下&#xff0c;你正在图书馆寻找一本关于 MySQL 索引的书。图书馆里有成千上万本书&#xff0c;但没有目录。你只能一排一排、一本一本地找&#xff0c;直到找到你想要的书。这将会花费大量的时间&#xff01;数据库索引就像图书馆的目录一样&#xff0c;可以帮助数据库系…

raylib实现生产者消费者模型增加缓冲提高帧率

原来增加了四叉树导致帧率下降 后来学了生产者消费者模型&#xff0c;尝试追加缓冲池&#xff0c;剥离主函数查找需要更新的数据 帧率上升稳定到60帧 多了10 帧 中间工程主要是探索数据结构体怎么安排 // 参考自 https://zhuanlan.zhihu.com/p/693482704 #include <stdio.…

Linux之我不会

一、常用命令 1.系统管理 1.1 systemctl start | stop | restart | status 服务名 案例实操 1 查看防火墙状态 systemctl status firewalld2 停止防火墙服务 systemctl stop firewalld3 启动防火墙服务 systemctl start firewalld4 重启防火墙服务 systemctl restart f…

Type-C接口相关知识:【总结大全】

Type-c现在非常通用了&#xff0c;所以了解Type-c也变得十分有必要了&#xff0c;还是秉承了解就要了解清楚的原则&#xff0c;我们深入的看看Type-c接口。 Type-c主要是取代上一代Micro usb接口&#xff0c;那么Type-c有什么优点呢&#xff1f; 正反可插&#xff0c;使用时不…

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【LMS调测】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 基本概念 LMS全称为Lite Memory Sanitizer&#xff0c;是一种实时…

Xcode报错:The request was denied by service delegate (SBMainWorkspace)

Xcode报错&#xff1a;The request was denied by service delegate (SBMainWorkspace) 造成的原因: &#xff08;1&#xff09;新的M2芯片的Mac电脑 (2) 此电脑首次安装启动Xcode的应用程序 (3&#xff09;此电脑未安装Rosetta 解决方法: &#xff08;1&#xff09;打开终端…

传奇GEE引擎版本如何封挂?GEE引擎设置简单的封挂脚本教程

网关参数设置gee引擎封挂脚本 1、打开M2-选项-参数设置-游戏速度 把所有的设置限速关闭 2、打开M2-选项-客户端设置-内挂控制-速度控制&#xff1a;移动速度 攻击速度 魔法速度 设置好参数&#xff0c;一旦设置不要修改 否则封挂网关参数需重新设置 打开M2-选项-功能设置-…

计算机毕业设计 基于Flask+Vue的博客系统 Python毕业设计 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

二、kafka生产与消费全流程

一、使用java代码生产、消费消息 1、生产者 package com.allwe.client.simple;import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerConfig; import org.apache.kafka.clients.pr…

单通道串口服务器

型号&#xff1a; SG-TCP232-110 功能简介 SG-TCP232-110 是一款用来进行串口数据和网口数据转换的设备。解决普通串口设备在 Internet 上的联网问题。 设备的串口部分提供一个 232 接口和一个 485 接口&#xff0c;两个接口内部连接&#xff0c;同时只能使用一个口工作。 设备…

CVE-2024-46103

前言 CVE-2024-46103 SEMCMS的sql漏洞。 漏洞简介 SEMCMS v4.8中&#xff0c;SEMCMS_Images.php的search参数&#xff0c;以及SEMCMS_Products.php的search参数&#xff0c;存在sql注入漏洞。 &#xff08;这个之前就有两个sql的cve&#xff0c;这次属于是捡漏了&#x1f6…

Linux环境下安装python

Linux 环境下安装python 以下是在Linux环境下安装Python - 3.9.4.tgz的详细步骤&#xff1a;1. 下载Python - 3.9.4.tgz&#xff08;如果未下载&#xff09;2.解压文件3.安装依赖项&#xff08;如果需要&#xff09;4.配置和编译5.安装6.创建一个别名&#xff08;alias&#xf…

Sql Developer日期显示格式设置

默认时间格式显示 设置时间格式&#xff1a;工具->首选项->数据库->NLS->日期格式: DD-MON-RR 修改为: YYYY-MM-DD HH24:MI:SS 设置完格式显示&#xff1a;

JavaEE: 深入探索TCP网络编程的奇妙世界(四)

文章目录 TCP核心机制TCP核心机制四: 滑动窗口为啥要使用滑动窗口?滑动窗口介绍滑动窗口出现丢包咋办? TCP核心机制五: 流量控制 TCP核心机制 上一篇文章 JavaEE: 深入探索TCP网络编程的奇妙世界(三) 书接上文~ TCP核心机制四: 滑动窗口 为啥要使用滑动窗口? 之前我们讨…

计算机网络--HTTP协议

1.TCP,UDP的对比图 TCP:面向连接的,可靠的,字节流服务; UDP:无连接的,不可靠的,数据报服务; 2.补充网络部分的其他知识点 1).复位报文段 在某些特殊条件下&#xff0c; TCP 连接的一端会向另一端发送携带 RST 标志的报文段&#xff0c;即复位报文段&#xff0c;已通知对方…

大数据-146 Apache Kudu 安装运行 Dockerfile 模拟集群 启动测试

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…