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

news2024/11/15 15:47:42

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.coloradmin.cn/o/2119010.html

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

相关文章

Java代码审计篇 | ofcms系统审计思路讲解 - 篇2 | SQL注入漏洞审计

文章目录 Java代码审计篇 | ofcms系统审计思路讲解 - 篇2 | SQL注入漏洞审计1. 前言2. SQL注入代码审计【有1处】1&#xff09;全局搜索Statement关键字&#xff0c;发现有几处&#xff0c;不过大多都是preparStatement预编译方式执行sql语句。2&#xff09;点进第一个看看3&am…

matlab数据批量保存为excel,文件名,行和列的名称设置

Excel文件内数据保存结果如下&#xff1a; Excel文件保存结果如下&#xff1a; 代码如下&#xff1a; clear;clc; for jjjj1:10 %这个可以改 jname(jjjj-1)*10; %文件名中变数 这是EXCEL文件名字的一部分 根据自己需要改 jkkkk_num2str(jname); for …

物联网之Arduino开发环境的下载与安装、ESP32开发环境的下载与安装、常见环境配置问题的解决办法、COM端口不可用的解决方法

MENU 前言下载和安装Arduino安装ESP32开发环境常见问题JSON下载失败和下载速度慢配置解释器没有发现端口检测到端口&#xff0c;但是有警告图标&#xff0c;端口无法使用 前言 想玩开发板必须得写代码&#xff0c;要不然Arduino不知道怎么运行&#xff0c;Arduino的开发语言是C…

碳产品出口业务管理难?外贸软件ERP全流程管控降本增效

随着全球环保意识的增强和工业生产的需要&#xff0c;对碳产品的需求持续增长。特别是在新能源、环保、航空航天等高科技领域&#xff0c;碳产品的需求量更大。中国作为全球最大的碳产品生产国之一&#xff0c;拥有完整的产业链和丰富的生产经验&#xff0c;具备明显的产业优势…

【C++11 ——— 右值引用和移动语义】

C11 ——— 右值引用和移动语义 右值引用和移动语义左值引用和右值引用左值引用与右值引用比较右值引用使用场景和意义左值引用的使用场景&#xff1a;左值引用的短板&#xff1a;左值引用中编译器的优化右值引用和移动语义右值引用引用左值右值引用的其他使用场景 完美转发万能…

苹果系统安装的QT程序无法显示窗口问题的解决办法

1、问题的提出 苹果系统是可以安装QT&#xff08;包含QT带来的集成开发环境QTCreator&#xff09;的。但是&#xff0c;QT安装完毕跑运行测试程序的时候&#xff0c;却会发现窗口无法显示。 右下角的应用窗口程序无法打开。 2、问题的解决 其实原因就在警告之中&#xff1a; …

为单身人士定制的幸福计划:相亲交友系统

在忙碌的都市生活中&#xff0c;单身人士往往因为工作繁忙、社交圈有限等原因&#xff0c;难以遇到合适的伴侣。相亲交友系统&#xff0c;作为现代科技与人际关系结合的产物&#xff0c;为单身人士提供了一个全新的解决方案。本文将从客户角度出发&#xff0c;探讨相亲交友系统…

【计算机网络】UDP TCP介绍

UDP & TCP介绍 UDP报文格式报文内容介绍端口号报文长度校验和载荷 TCP报文格式初步了解TCP机制确认应答超时重传连接管理滑动窗口流量控制拥塞控制紧急传输数据推送延时应答捎带应答面向字节流异常处理心跳机制 UDP 和 TCP 的区别 UDP 报文格式 对于网络协议, 本质上就是…

软件工程技术专业软件开发综合实训室解决方案

一、行业背景与前景分析 1.1 软件工程技术专业就业前景 近年来&#xff0c;中国的软件行业取得了显著的成就&#xff0c;即便在全球经济受到新冠疫情冲击的情况下&#xff0c;仍保持了强劲的增长势头。据工业和信息化部发布的数据&#xff0c;2021年我国软件和信息技术服务业…

mysqldump 迁移至MySQL到Oceanbase-CE V4 和旁路导入语法的学习

闲着没事干&#xff0c;测试着玩。 一.数据库环境 mysql&#xff1a; oceanbase&#xff1a; mysql下的表&#xff1a; 二、mysqldump迁移数据到OceanBase # 通过mysqldump导出数据 mysqldump -h 192.168.80.16 -uroot -P3306 -p --databases test > toob.sql #传输脚本到o…

DDR3 SDRAM操作流程

天空灰暗到一定程度&#xff0c;星晨就会熠熠生辉。 ----一起加油 DDR3 SDRAM的相关操作主要包括上电(Power on)、复位(Reset procedure)、初始化(Initialization)、ZQ对齐(ZQ calibration)、模式寄存器配置(MRS)、自刷新(Selfrefresh)、刷新(Refreshing)、激活(Activating)、读…

线上VR虚拟展厅里可以展示3D模型么?

虚拟展厅里可以展示3D模型。 虚拟展厅利用数字技术和三维建模技术创建一个虚拟的展览环境&#xff0c;使得参观者可以通过计算机、智能手机、平板电脑等设备远程参观展览。在这个过程中&#xff0c;3D模型作为虚拟展厅的重要组成部分&#xff0c;扮演着至关重要的角色。 在虚…

Google AI 概述——喜欢的三点和不喜欢的两点

如果你在谷歌上搜索某些内容&#xff0c;你可能注意到谷歌AI概览已经回归。不过&#xff0c;对此功能的实用性我仍持观望态度。 对于那些还没有使用过的人来说&#xff0c;谷歌AI概览基本上是从各个网站收集信息并将其整合在搜索结果页面的顶部。理论上&#xff0c;这应该使用…

opencv将灰度图转为彩色图片

文章目录 背景灰度图优势opencv读取灰度图彩色转灰度算法需求 方法测试代码 背景 在图像处理中通常需要将图片转为灰度图 灰度图&#xff0c;也称为灰度图像或黑白图像&#xff0c;是一种只包含亮度信息而不包含颜色信息的图像。在灰度图中&#xff0c;每个像素的亮度级别通常…

【STL中容器汇总】map、list、vector等详解

容器学习分享 1、STL简介1.1、STL六大组件 2、vector容器2.1、vector 基本操作2.2、vector容器示例2.3、vector容器存放自定义数据类型示例2.3、vector嵌套vector示例 3、list 容器3.1使用示例3.2、list容器基本函数 4、map容器4.1、map函数原型4.2、map函数示例 1、STL简介 ST…

pdf文件怎么编辑?7大常用的pdf在线编辑技巧,免费好用!

编辑pdf文件通常涉及对文本、图片及其他内容的添加、删除或修改。无论您希望清除过时的信息&#xff0c;还是想为pdf文件增添一些补充材料&#xff0c;掌握几种简单有效的编辑方法都是非常重要的。因此&#xff0c;本文将为大家介绍7大常用的pdf在线编辑技巧&#xff0c;详细解…

Java学习Day40:大战亢金龙!(spring框架之AOP)

AOP&#xff08;面向切面变成&#xff09;&#xff1a;不改变原有代码的情况下&#xff0c;对代码进行功能添加 1.一些概念 抽取出的方法&#xff1a;通知 原始方法&#xff1a;成为连接点&#xff08;可以是程序执行中的任意位置&#xff09;&#xff0c;对应原始的一个个方…

Qt篇——Qt在msvc编译下提示“C2001:常量中有换行符“的错误

在pro文件中添加以下配置即可&#xff1a; msvc{QMAKE_CFLAGS /utf-8QMAKE_CXXFLAGS /utf-8 }

哈希表、算法

哈希表 hash&#xff1a; 在编程和数据结构中&#xff0c;"hash" 通常指的是哈希函数&#xff0c;它是一种算法&#xff0c;用于将数据&#xff08;通常是字符 串&#xff09;映射到一个固定大小的数字&#xff08;哈希值&#xff09;。哈希函数在哈希表中尤为重要…

什么是浏览器指纹及其在线跟踪的用途?

互联网常常给人一种广阔的蓝色天空的感觉&#xff0c;在那里你可以自由航行&#xff0c;只有匿名才能提供这种自由。然而&#xff0c;事实并非如此。有一套工具被希望识别谁在访问其网站的企业广泛使用。这套工具被称为浏览器指纹识别&#xff0c;了解它的使用方式很重要。 一…