“CSS 定位”如何工作?(补充)——WEB开发系列34

CSS定位是一个非常重要的布局工具,它允许我们精确地控制元素的位置,从而创建复杂的布局效果。定位允许你从正常的文档流布局中取出元素,并使它们具有不同的行为,例如放在另一个元素的上面,或者始终保持在浏览器视窗内的同一位置。


一、文档流

在讨论CSS定位之前,我们首先需要理解“文档流”这一概念。文档流是网页上所有元素的默认布局方式。元素按照它们在HTML中出现的顺序,从上到下、从左到右进行排列。理解文档流对于掌握CSS定位至关重要,因为定位属性可以改变元素在文档流中的行为。


文档流的基本概念

默认情况下,块级元素(如 ​​<div>​​、​​<p>​​、​​<h1>​​ 等)会垂直排列,每个元素占据一整行。行内元素(如 ​​<span>​​、​​<a>​​、​​<img>​​​ 等)则会水平排列,它们只占据内容所需的宽度。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>文档流示例</title><style>.block {background-color: lightblue;padding: 10px;margin: 10px 0;}.inline {background-color: lightgreen;padding: 5px;}</style>
</head>
<body><div class="block">这是一个块级元素</div><span class="inline">这是一个行内元素</span><span class="inline">另一个行内元素</span><div class="block">这是另一个块级元素</div>
</body>
</html>

在这个示例中,我们使用了一个块级元素和两个行内元素。块级元素会垂直排列,每个元素占据一整行,而行内元素则在同一行内水平排列。


二、定位基础

CSS定位属性允许我们改变元素在文档流中的位置,从而实现更复杂的布局效果。CSS提供了几种不同的定位方式:静态定位、相对定位、绝对定位、固定定位和粘性定位。我们将逐一介绍这些定位方式及其属性。


静态定位

静态定位是CSS的默认定位方式。在静态定位中,元素按照文档流的默认顺序排列。它不会响应 ​​top​​、​​bottom​​、​​left​​ 和 ​​right​​ 属性的设置。可以通过CSS属性 ​​position: static;​​​ 显式设置元素为静态定位,但这通常是不必要的,因为元素默认为静态定位。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>静态定位示例</title><style>.static {position: static;background-color: lightcoral;padding: 20px;}</style>
</head>
<body><div class="static">这是一个静态定位的元素</div>
</body>
</html>


相对定位

相对定位允许我们相对于元素的默认位置进行调整。通过设置 ​​position: relative;​​,我们可以使用 ​​top​​、​​bottom​​、​​left​​ 和 ​​right​​​ 属性来移动元素,但元素仍然保留在文档流中,只是视觉上被移动了。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>相对定位示例</title><style>.relative {position: relative;background-color: lightgoldenrodyellow;padding: 20px;left: 50px; /* 向右移动50px */top: 20px;  /* 向下移动20px */}</style>
</head>
<body><div class="relative">这是一个相对定位的元素</div>
</body>
</html>

元素相对于它的默认位置被移动了50px到右边和20px到底部。即使元素视觉上移动了,文档流中的位置不变。


绝对定位

绝对定位使元素脱离文档流,完全按照我们指定的位置进行排列。通过设置 ​​position: absolute;​​,我们可以使用 ​​top​​、​​bottom​​、​​left​​ 和 ​​right​​ 属性来精确控制元素的位置。绝对定位的元素相对于其最近的定位祖先元素进行定位(即最近的 ​​position​​ 不是 ​​static​​​ 的祖先元素),如果没有这样的祖先元素,则相对于视口进行定位。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>绝对定位示例</title><style>.container {position: relative;width: 300px;height: 200px;background-color: lightblue;border: 1px solid #000;}.absolute {position: absolute;background-color: lightcoral;padding: 20px;top: 30px;left: 40px;}</style>
</head>
<body><div class="container"><div class="absolute">这是一个绝对定位的元素</div></div>
</body>
</html>

绝对定位的元素相对于其最近的定位祖先元素(​​.container​​​)进行定位,位置被设置为距离顶部30px和距离左边40px。


定位上下文

绝对定位的元素的定位是相对于最近的定位上下文进行的。定位上下文是指具有定位属性的祖先元素(​​position​​ 不是 ​​static​​​)。如果一个元素没有定位上下文,那么它将相对于视口进行定位。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>定位上下文示例</title><style>.context {position: relative;width: 300px;height: 200px;background-color: lightgoldenrodyellow;border: 1px solid #000;}.absolute {position: absolute;background-color: lightcoral;padding: 20px;top: 20px;right: 20px;}</style>
</head>
<body><div class="context"><div class="absolute">相对于上下文定位</div></div><div class="absolute" style="position: absolute; top: 100px; right: 100px;">相对于视口定位</div>
</body>
</html>

两个绝对定位的元素分别相对于其定位上下文(​​.context​​​)和视口进行定位。


固定定位

固定定位使元素相对于视口进行定位,不管页面滚动与否。设置 ​​position: fixed;​​​ 可以实现固定定位,元素会固定在视口中的特定位置。​

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>固定定位示例</title><style>.fixed {position: fixed;background-color: lightcoral;padding: 20px;bottom: 20px;right: 20px;}</style>
</head>
<body><div class="fixed">这是一个固定定位的元素</div><div style="height: 2000px;">滚动页面查看效果</div>
</body>
</html>

示例中固定定位的元素始终固定在视口的右下角,即使页面滚动也不受影响。


粘性定位

粘性定位是一种相对定位和固定定位的结合。通过设置 ​​position: sticky;​​,元素在滚动时会在某个阈值内相对位置固定,一旦滚动超过阈值,元素会跟随滚动继续移动。​​top​​、​​bottom​​、​​left​​ 和 ​​right​​​ 属性用来设置粘性位置的阈值。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>粘性定位示例</title><style>.sticky {position: sticky;top: 0;background-color: lightcoral;padding: 10px;z-index: 10; /* 确保粘性元素在其他元素之上 */}.content {height: 2000px;background-color: lightyellow;padding: 20px;}</style>
</head>
<body><div class="sticky">这是一个粘性定位的元素</div><div class="content">滚动页面查看效果</div>
</body>
</html>

示例中粘性定位的元素会在视口顶部粘住,直到滚动超过它的容器。


三、定位属性

​top​​、​​bottom​​、​​left​​ 和 ​​right​

这些属性用于设置定位元素的相对位置。当元素的 ​​position​​ 属性设置为 ​​relative​​、​​absolute​​、​​fixed​​ 或 ​​sticky​​ 时,​​top​​、​​bottom​​、​​left​​ 和 ​​right​​ 属性才会生效。

  • ​top​​:设置元素距离其定位上下文顶部的距离。
  • ​bottom​​:设置元素距离其定位上下文底部的距离。
  • ​left​​:设置元素距离其定位上下文左边的距离。
  • ​right​​​:设置元素距离其定位上下文右边的距离。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>定位属性示例</title><style>.relative {position: relative;background-color: lightgoldenrodyellow;width: 200px;height: 200px;}.absolute {position: absolute;background-color: lightcoral;width: 100px;height: 100px;top: 20px;left: 30px;}</style>
</head>
<body><div class="relative"><div class="absolute">绝对定位</div></div>
</body>
</html>

绝对定位的元素相对于其最近的定位上下文(​​.relative​​​)进行定位,距离顶部20px和左边30px。


​z-index​

​z-index​​ 属性控制元素的堆叠顺序。值较大的元素会覆盖值较小的元素。​​z-index​​ 只在定位元素(​​relative​​、​​absolute​​、​​fixed​​、​​sticky​​​)上有效。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>z-index 示例</title><style>.container {position: relative;width: 300px;height: 200px;background-color: lightblue;}.box {position: absolute;width: 100px;height: 100px;}.box1 {background-color: lightcoral;z-index: 1;}.box2 {background-color: lightgreen;z-index: 2;}</style>
</head>
<body><div class="container"><div class="box box1">底层</div><div class="box box2">顶层</div></div>
</body>
</html>

两个绝对定位的元素在 ​​.container​​ 内重叠,​​box2​​ 的 ​​z-index​​ 值大于 ​​box1​​,因此 ​​box2​​ 显示在 ​​box1​​​ 之上。


四、实战应用示例

一个固定导航栏

固定导航栏是一种常见的网页布局需求,它使导航栏在滚动页面时始终保持在视口的顶部。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>固定导航栏示例</title><style>.navbar {position: fixed;top: 0;left: 0;width: 100%;background-color: lightcoral;padding: 10px;box-shadow: 0 2px 5px rgba(0,0,0,0.1);z-index: 1000;}.content {padding-top: 50px; /* 预留空间给固定导航栏 */}</style>
</head>
<body><div class="navbar"><h1>固定导航栏</h1></div><div class="content"><p>滚动页面查看固定导航栏效果。</p><p>更多内容...</p><p>更多内容...</p><p>更多内容...</p><p>更多内容...</p></div>
</body>
</html>

导航栏使用了固定定位,始终保持在视口的顶部,内容区域向下移动以避免被导航栏遮挡。


制作一个响应式的浮动布局

使用相对定位和绝对定位,可以创建一个响应式的浮动布局,实现多列布局效果。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>浮动布局示例</title><style>.container {position: relative;width: 100%;}.column {position: absolute;width: 30%;background-color: lightblue;padding: 20px;box-sizing: border-box;}.column1 {left: 0;}.column2 {left: 35%;}.column3 {left: 70%;}</style>
</head>
<body><div class="container"><div class="column column1">列 1</div><div class="column column2">列 2</div><div class="column column3">列 3</div></div>
</body>
</html>

示例中我们使用绝对定位来创建三列布局,确保它们在 ​​.container​​​ 内部并排显示。


如有表述错误及欠缺之处敬请指正补充。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库设计中的需求分析

在数据库设计中&#xff0c;需求分析 是至关重要的一步。它不仅是设计过程的起点&#xff0c;也是后续步骤的基础。如果需求分析出现问题&#xff0c;那么后续所有设计阶段的结果都会受到影响&#xff0c;最终可能导致整个设计返工&#xff0c;耗费大量时间和资源。因此&#x…

KubeBlocks 如何降低管理多种数据库的学习门槛

什么是 KubeBlocks KubeBlocks 是一个开源的 Kubernetes 数据库 operator&#xff0c;能够帮助用户在 Kubernetes 上运行和管理多种类型的数据库。据我们所知&#xff0c;大多数数据库 operator 通常只能管理某种特定类型的数据库&#xff0c;例如&#xff1a; CloudNativePG…

基于SSM开发的校园心理咨询平台系统的设计与实现---附源码80915

目 录 1 绪论 1.1 研究背景 1.2开发现状 1.3论文结构与章节安排 2 校园心理咨询平台系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4…

安卓13删除app 链接库警告弹窗Detected problems with app native

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码修改彩蛋1.前言 有些客户的APP,打开首次会弹窗提示窗口, Detected problems with app native libraries (please consult log for detail):,需要删除这个窗口,避免挡住用户APP。而且这个提示有些app是以t…

MapBox Android版开发 4 国际化功能v11

MapBox Android版开发 4 国际化功能v11 前言遇到的问题国际化功能原文给出的方案(V10版)migrate-to-v11适用于V11版的代码 示例MapStyle类运行效果图 前言 在前文MapBox地图样式v11中&#xff0c;使用Style的localizeLabels方法本地化地图语言。但Mapbox Standard样式和Mapbox…

红队C2工具Sliver探究与免杀

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330&scene21#wechat_redirect 《网安面试指南》…

纯国产芯片LT8911EXB,MIPI转EDP信号转换器,LT8911B升级版本

以下为视频转换芯片LT8911EXB的简介 LT8911EXB MIPI DSI/CSI到eDP转换器具有单端口MIPI接收器&#xff0c;1时钟通道和4每个数据通道的最大运行速度为2.0Gbps;一个最大输入带宽为8.0Gbps。转换器解码输入MIPIDSI 16/18/24/30/36位RGB数据包&#xff0c;并将格式化的视频数据流转…

异步文件操作的革命:探索aiofiles的魔力

文章目录 异步文件操作的革命&#xff1a;探索aiofiles的魔力1. 背景介绍2. aiofiles是什么&#xff1f;3. 如何安装aiofiles&#xff1f;4. 简单的库函数使用方法5. 场景应用6. 常见Bug及解决方案7. 总结 异步文件操作的革命&#xff1a;探索aiofiles的魔力 1. 背景介绍 在现…

【Java-反射】

什么是反射&#xff1f; JAVA反射机制是在运行状态中&#xff0c;创建任意一个类&#xff0c;能获取这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意一个方法和属性&#xff1b;这种动态获取的信息以及动态调用对象的方法的功能称为java语言…

RHEL 7 安装配置( Linux 网络操作系统 02)

一、虚拟机安装 我们的每台电脑都已经安装了VMware 虚拟机&#xff0c;其安装相当简单&#xff0c;在此不再赘述。可以参考如下链接&#xff1a; VMWare安装傻瓜式教程 &#xff08;大家可以关注老师的博客&#xff0c;也建议大家写博客。&#xff09; 二、红帽 rhel 7 安装 找…

IEC103设备数据 转 IEC61850项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 配置VFBOX网关采集103设备数是 2 5 用IEC61850协议转发数据 4 6 网关使用多个逻辑设备和逻辑节点的方法 6 7 IEC103协议说明 8 8 案例总结 9 1 案例说明 设置网关采集IEC103设备数据把采集的数据转成IEC61850协议转发…

通过 python 的 Opstrat 绘制收益图加深期权策略理解

本文介绍介绍一个 Python 包- opstrat&#xff0c;通过它绘制期权收益图&#xff0c;帮助我们理解期权策略的收益风险比。 什么是期权收益图&#xff1f; 期权收益图展示了某个期权或期权组合的盈亏情况&#xff0c;如下图中&#xff0c;展示一张标的现价 100&#xff0c;行权…

Carfilzomib (PR-171) 蛋白酶体 (proteasome) 抑制剂AbMole介绍

AbMole Carfilzomib (PR-171)是一种不可逆的蛋白酶体 (proteasome) 抑制剂&#xff0c;IC50为<5 nM&#xff0c;在体外优先抑制β5亚基的ChT-L活性&#xff0c;对PGPH和T-L活性很弱或没有作用。 Carfilzomib (PR-171)在体外优先抑制β5亚基的ChT-L活性&#xff0c;对PGPH和…

C#游戏服务器开发框架设计与架构详解

我一直在思考一个问题&#xff0c;什么样的服务端框架最好用&#xff0c;最适合? 经过这些年的项目经验&#xff0c;其实最好用&#xff0c;最适合的游戏服务端框架就是自己结合公司项目需求,团队特点与技术能力,自己整合的游戏框架是最好用的。 很多新手会担心自己整合的框架…

SprinBoot+Vue小区车辆管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

CMU 10423 Generative AI:lec4(Modern Transformers + CNNs)

文章目录 1 概述2 内容摘录2.1 深度学习架构的历史2.2 预训练概念、三种训练方式、效果对比2.3 现代Transformer模型概览1. **PaLM (Pathways Language Model, 2022年10月)**2. **Llama-1 (2023年2月)**3. **Falcon (2023年6月-11月)**4. **Llama-2 (2023年8月)**5. **Mistral …

vba发邮件:如何设置自动化发送电子邮件?

vba发邮件的技巧有哪些&#xff1f;VBA如何调用outlook发邮件&#xff1f; VBA发邮件功能是一个非常实用的工具&#xff0c;能够帮助用户自动发送电子邮件&#xff0c;减少手动操作的时间和错误。AokSend将详细介绍如何通过VBA发邮件来实现自动化发送电子邮件的设置。 VBA发邮…

Java 设计模式-代理模式

目录 概述 一. 什么是代理模式 1. 举例说明 二. 代理模式作用 1. 保护代理 2. 增强功能 3. 代理交互 4. 远程代理&#xff1a; 三. 代理模式3个角色 四. 静态代理 1. 代码示例&#xff1a; 五. JDK动态代理 1. 代码示例&#xff1a; 六. CGLIB 动态代理 1.代码示…

怎样将vue项目 部署在ngixn的子目录下

如果同一服务器的80端口下,需要部署两个或以上数量的vue项目,那么就需要将其中一个vue项目部署在根目录下,其他的项目部署在子目录下. 像这样的配置 访问根目录 / 访问灭火器后台管理,访问 /mall/ 访问商城的后台管理 那么商场的vue项目,这样配置,才能在/mall/下正常访问? 1…

使用Nest.js+LangChain给低代码平台赋上AI代码生成能力,让低代码变成低低代码!

前言 LangChain 是一个用于开发由大型语言模型&#xff08;LLM&#xff09;支持的应用程序的框架。可以快速使用它集成各个模型&#xff0c;以及格式化用户输入和模型输出&#xff0c;封装了很多工具类&#xff0c;使得开发者很容易将其集成到自己的程序当中。 最近&#xff…