【前端】深入理解CSS定位

news2025/2/23 5:53:27

目录

  • 一、前言
  • 二、定位组成
    • 1、定位模式
      • 1.1、静态定位static
        • ①、语法定义
        • ②、特点
      • 1.2、相对定位relative
        • ①、语法定义
        • ②、特点
        • ③、代码示例
      • 1.3、绝对定位absolute
        • ①、语法定义
        • ②、特点
        • ③、代码示例
          • 1)、没有祖先元素或者祖先元素没有定位
          • 2)、祖先元素有定位
      • 1.4、固定定位fixed
        • ①、语法定义
        • ②、特点
        • ③、代码示例
        • ④、固定定位算法
      • 1.5、粘性定位sticky
        • ①、语法定义
        • ②、特点
        • ③、代码示例
      • 1.6、定位叠放次序 z-index
        • ①、语法定义
        • ②、特点
  • 三、定位总结
    • 1、绝对定位的盒子居中
    • 2、定位特殊特性
    • 3、脱标的盒子不会触发外边距塌陷
    • 4、绝对定位(固定定位)会完全压住盒子
  • 四、边偏移
  • 五、元素的显示与隐藏
    • 1、display显示隐藏
    • 2、visibility显示隐藏
    • 3、overflow溢出显示隐藏
    • 4、三者差异
  • 六、子绝父相的由来

一、前言

CSS定位是用来控制元素在页面上的位置和排列方式的技术。CSS有三种基本的定位机制:普通流、浮动流、定位流,其中定位流包括相对定位、绝对定位固定定位

  • 普通流:元素默认从上至下或者从左至右的排序顺序
  • 浮动流:添加了浮动的元素
  • 定位流:添加了定位的元素,包括相对定位、绝对定位、固定定位

接下来,博主会从CSS定位、CSS边偏移、元素的显示与隐藏,这三部分进行讲解

二、定位组成

定位:将盒子定在某一个位置,所以定位也是在摆放盒子,按照定位的方式移动盒子

定位=定位模式+边偏移

定位模式用于指定一个元素在文档中的定位方式。边偏移则决定了该元素的最终位置

1、定位模式

定位模式决定元素的定位方式,是通过CSS的position属性来设置的

在这里插入图片描述

1.1、静态定位static

①、语法定义

静态定位是元素的默认定位方式,无定位的意思

#静态定位语法
position: static

②、特点

  • 静态定位按照标准流特性摆放位置,它没有边偏移
  • 静态定位在布局时很少用到

1.2、相对定位relative

①、语法定义

相对定位是元素在移动位置时,是相对于它原来的位置来说的

#相对定位语法
position: relative

②、特点

  • 它是相对于自己原来的位置来移动的(移动位置的时候参照点是自己原来的位置
  • 原来在标准流的位置继续占有,后边的盒子仍然以标准流的方式对待它(不脱标,继续保留原来位置

③、代码示例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box1 {
           //设置盒子相对定位
            position: relative;
            left: 130px;
            top: 140px;
          
            width: 200px;
            height: 200px;
            background-color: pink;
        }

        .box2 {
            width: 200px;
            height: 200px;
            background-color: palegreen;
        }
    </style>
</head>

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

</html>

在这里插入图片描述

1.3、绝对定位absolute

①、语法定义

绝对定位是元素在移动位置时,是相对于它的祖先元素来说的

#绝对定位
position: absolute

②、特点

  • 如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位
  • 如果祖先元素有定位(相对、绝对、固定),则以最近一级的有定位祖先元素未参考点移动元素
  • 绝对定位不再占有原先的位置(脱标)

③、代码示例

1)、没有祖先元素或者祖先元素没有定位
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box1 {
            position: absolute;
            left: 300px;
            bottom: 390px;
            width: 200px;
            height: 200px;
            background-color: pink;
        }

        .big {
            width: 500px;
            height: 500px;
            background-color: palegreen;
        }
    </style>
</head>

<body>
    <div class="big">
        <div class="box1"></div>
    </div>
</body>

</html>

在这里插入图片描述

2)、祖先元素有定位
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box1 {
            position: absolute;
            left: 30px;
            bottom: 10px;
            width: 200px;
            height: 200px;
            background-color: pink;
        }

        .big {
            width: 500px;
            height: 500px;
            background-color: palegreen;
        }
        .bbig{
            position: relative;
            width: 700px;
            height: 700px;
            padding: 20px;
            background-color: blueviolet;
        }
    </style>
</head>

<body>
    <div class="bbig">
        <div class="big">
            <div class="box1"></div>
        </div>
    </div>

</body>

在这里插入图片描述

1.4、固定定位fixed

①、语法定义

  • 固定定位是元素固定于浏览器可视区的位置。主要使用场景:可以在浏览器页面滚动时元素的位置不会改变
#固定定位fixed
position: fixed

②、特点

  1. 以浏览器的可视窗口为参照点移动元素
    a. 跟父元素没有任何关系
    b. 不随滚动条滚动
  2. 固定定位不再占有原先的位置

③、代码示例

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .big {
            position: fixed;
            top: 100px;
            right: 40px;
        }
    </style>
</head>

<body>
        <div class="big">
            <img src="../02/images/user.png" alt="">
        </div>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
        <p>好好学习</p>
</body>

在这里插入图片描述

④、固定定位算法

假如让盒子固定在版心右侧位置

  1. 让固定定位的盒子left: 50%,走到浏览去可视区(版心)的一半位置
  2. 让固定定位的盒子margin-left: 版心宽度的一半距离。多走版心宽度的一半位置

1.5、粘性定位sticky

①、语法定义

  • 粘性定位可以被认为是相对定位和固定定位的混合
#粘性定位sticky
position: sticky

②、特点

  1. 以浏览器的可视窗口为参照点移动元素(固定定位特点)
  2. 粘性点位占有原先的位置(相对定位特点)
  3. 必须添加top、left、right、bottom其中一个才有效

③、代码示例

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body{
            height: 3000px;
        }
        .fixed{
            width: 800px;
            height: 50px;
            background-color: pink;
            margin: 100px auto;
            position: sticky;
            top: 0;
        }
    </style>
</head>

<body>
        <div class="fixed">导航栏</div>
</body>

在这里插入图片描述

1.6、定位叠放次序 z-index

①、语法定义

在使用定位布局时,可能会出现盒子重叠的情况。这时可以使用z-index来控制盒子的前后次序

#定位叠放次序
z-index: 数值

②、特点

  1. 数值可以是正整数、负整数或0,默认是auto,数值越大,盒子越靠上
  2. 如果属性值相同,则按照书写顺序,后来居上
  3. 数字后面不能加单位
  4. 只有定位的盒子才有z-index属性

三、定位总结

在这里插入图片描述

1、绝对定位的盒子居中

加了绝对定位absolute的盒子不能通过margin: auto来实现水平居中,但是可以通过以下计算方法实现水平和垂直居中

  • letf:50%,让盒子的左侧移动到父级元素的水平中心位置
  • margin-left:-100px,让盒子向做移动自身宽度的一半

2、定位特殊特性

绝对定位position: absolute和固定定位position: fixed也和浮动float类似

  1. 行内元素添加绝对absolute或者固定fixed定位,可以直接设置高度和宽度
  2. 块级元素添加绝对absolute或者固定fixed定位,如果不给宽度和高度,默认大小是内容的大小

3、脱标的盒子不会触发外边距塌陷

浮动元素、绝对定位(固定定位)元素的都不会触发外边距合并的问题

4、绝对定位(固定定位)会完全压住盒子

  1. 浮动元素不同,只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字/图片
  2. 绝对定位(固定定位)会压住下面标准流所有的内容

四、边偏移

边偏移就是定位的盒子移动到最终位置

在这里插入图片描述

五、元素的显示与隐藏

1、display显示隐藏

  1. display:none
    a. 隐藏对象
  2. display:block
    a. 除了转换为块级元素之外,同时还有显示元素的意思
  3. display隐藏元素后,不再占有原来的位置

2、visibility显示隐藏

  1. visibility:visible
    a. 元素可视
  2. visibility:hidden
    a. 元素隐藏
  3. visibility隐藏元素后,继续占有原来的位置

3、overflow溢出显示隐藏

  1. overflow:visible
    a. 不剪切内容也不添加滚动条
  2. overflow:hidden
    a. 不显示超过对象尺寸的内容,超出的部分隐藏掉
  3. overflow:scroll
    a. 不管内容是否超出,总是显示滚动条
  4. overflow:auto
    a. 超出自动显示滚动条,不超出不显示滚动条

4、三者差异

  1. display显示隐藏元素,但是不保留位置
  2. visibility显示隐藏元素,但是保留原来的位置
  3. overflow溢出显示隐藏,但是只是对于溢出的部分处理

六、子绝父相的由来

子绝父相:子级是绝对定位(absolute)的话,父级要用相对定位(relative)
相对定位经常用来作为绝对定位的父级

  1. 子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子
  2. 父盒子需要加定位限制子盒子在父盒子内显示
  3. 父盒子布局时,需要占有位置, 如果父盒子是绝对定位的话,父盒子会跑到子盒子的下边,因此父盒子只能是相对定位

总结:因为父级需要占有位置,因此是相对定位,子盒子不需要占有位置,则是绝对定位

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

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

相关文章

关于内点定义不同的讨论

根据和译者联系后&#xff0c;根据提供P660页的关于内点的定义与其他国内教材不同。 《离散数学及其应用&#xff08;原书第8版&#xff09;》ISBN:978-7-111-63687-8内点定义如下图所示 因此 《离散数学及其应用&#xff08;原书第8版&#xff09;》ISBN:978-7-111-63687-8 第…

为自己的 SSM项目设计评论功能

为自己的 SSM项目设计评论功能 设计思路增加评论显示评论评论总数 设计思路 首先需要设计评论信息的实体类&#xff08;对应评论表&#xff09; 主要分为以下2个功能&#xff1a; 显示所有评论 当我们进入文章详情页的时候&#xff0c;页面就会通过 ajax 发送请求给服务器&…

电厂人员定位方案可以使用多种技术来实现

电厂人员定位方案可以使用多种技术来实现。以下是一个常见的电厂人员定位方案的步骤&#xff1a; 1.选取合适的定位技术&#xff1a;根据电厂的需求和运行环境&#xff0c;选择适合的定位技术&#xff0c;例如基于UWB&#xff08;Ultra-Wideband&#xff09;、RFID&#xff08…

Linux 黑话解析:什么是 LUKS 加密?

导读LUKS 是 Linux 用户中流行的磁盘加密机制。在这篇术语解析文章中&#xff0c;可以了解更多关于 LUKS 的信息。 计算机安全旨在保护私密信息。有许多方法可以保护系统。一些用户使用简单的用户名/密码登录方案进行基本保护。其他用户可能会通过加密以不同的方式增加额外的保…

Leetcode 剑指 Offer II 040. 矩阵中最大的矩形

题目难度: 困难 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个由 0 和 1 组成的矩阵 matrix &#xff0c;找出只包含 1…

c语言实现MD5算法

MD5加密 文章目录 MD5加密MD5介绍应用场景代码分析 &#xff08;基于qt5.14.2&#xff09;测试记录 MD5介绍 1。 一种单向加密算法&#xff0c;即对明文加密&#xff0c;而不能通过密文得到明文。对原数据的任何改动&#xff0c;哪怕是1字节&#xff0c;得到的MD5值都有很大的区…

C#系统锁屏事件例子 - 开源研究系列文章

今天有个网友问了个关于操作系统锁屏的问题。 我们知道&#xff0c;操作系统是基于消息和事件处理的&#xff0c;所以我们只要找到该操作系统锁屏和解屏的那个事件&#xff0c;然后在事件里进行处理即可。下面是例子介绍。 1、 项目目录&#xff1b; 下面是项目目录&#xff1a…

vue的scrollTop手机环境设置值失效,本地正常可以赋值

获取div盒子ref或者document获取都行 监听方法 一定要加this.$nexttick,在本地测试只用nexttick是没有问题的&#xff0c;但是到手机测试就不行了&#xff0c;原因是因为手机渲染比本地更快&#xff0c;所以结合setTimeout使用 如果有更好的处理方法&#xff0c;恳请大佬指点一…

C语言——通讯录详解(动态版)

通讯录详解 前言&#xff1a;一、定义一个通讯录二、初始化三、增加联系人3.1 给通讯录扩容3.2增加联系人 四、释放内存五、完整代码 前言&#xff1a; 我们已经学过了通讯录的静态版&#xff0c;但是它的缺点很明显&#xff0c;通讯录满了就添加不了联系人了啦。我再让通讯录升…

为什么要用i ,√(-1)不行吗?

首先讲一下&#xff0c;我不是拦着各位使用√(-1)&#xff0c;这只是一种记号&#xff0c;在这里只是探讨一下一些数的性质而已 我们首先需要探讨下根式的一个性质&#xff0c;下面将会讲一个关于小明的故事&#xff1a; 他的老师在黑板上写下这么一道题 一道很正常的题 他的同…

vue3 setup语法糖导入mixin

像这样直接导入&#xff0c;然后通过defineOptions声明mixin 然后就可以在这个组件使用mixin里的数据和方法了

YOLOv5复现过程出现的问题(关于数据集路径)dataset not found

YOLOv5复现过程出现的问题&#xff08;关于数据集路径&#xff09; 在复现YOLOv5时&#xff0c;按照唐老师的教程&#xff08; https://www.bilibili.com/video/BV11K41167Ar?t122.1&p63&#xff09;下载好了数据集&#xff08;MaskWearing就是检测口罩的一个&#xff0c;…

Linux常用命令——dirname命令

在线Linux命令查询工具 dirname 去除文件名中的非目录部分 补充说明 dirname命令去除文件名中的非目录部分&#xff0c;仅显示与目录有关的内容。dirname命令读取指定路径名保留最后一个/及其后面的字符&#xff0c;删除其他部分&#xff0c;并写结果到标准输出。如果最后一…

java 向上取整 java对小数取整

取整方法 Math.floor(double a) 向下取整 Math.ceil(double a) 向上取整 Math.round(double a) 四舍五入 0.5向下取整 Math.rint(double a) 就近取整 1.6接近2&#xff0c;所以就取2 1.4接近1&#xff0c;所以就取1 1.5跟1和2都很接近&#xff0c;这时候就取偶数 (int) 类型强转…

【CTF-web】buuctf-[极客大挑战 2019]EasySQL 1(sql注入)

题目链接 根据题目判断出可能需要sql注入&#xff0c;看源码可知数据是通过GET的方式传输的&#xff0c;即放在url的username和password两个参数中。 只要将username输入为1 or 11#&#xff0c;password可以为任何值&#xff0c;即可顺利登录。 需要注意的是url中的井号表示…

innovus IMPSP-270 place阶段lib_cell找不到可放置位置问题

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 通过manual我们知道产生这个问题的原因有两个&#xff0c;要么没row&#xff0c;你需要重新floorplan initCoreRow&#xff0c;另外可能是设置了setPlaceMode -prerouteAsObs&a…

【PLC】上位机通过SMLP协议与三菱FX5U通信

0. 准备步骤 准备三菱 FX5U PLC 0.1 安装 GX Works3 首先点击右侧链接进入三菱官网&#xff0c;下载 GX Works3&#xff08;需要注册三菱的账号&#xff09; 若不想进官网下载也可以下载我为大家准备的网盘安装包&#xff1a;百度网盘安装包 GX Works3 下载完成后解压&#…

输入输出+暴力模拟入门:魔法之树、染色の树、矩阵、字母加密、玫瑰鸭

秋招实习刷题网站推荐&#xff1a;codefun2000.com&#xff0c;还有题解博客&#xff1a;blog.codefun2000.com/。以下内容都是来自塔子哥的~ 输入输出 2023.04.15-春招-第三题-魔法之树 //#include<bits/stdc.h> #include<vector> #include<iostream>usin…

C++ STL常用算法(详解)

C常用算法 C sort()排序函数用法详解 C STL 标准库提供有很多实用的排序函数&#xff0c;如表 1 所示。通过调用它们&#xff0c;我们可以很轻松地实现对普通数组或者容器中指定范围内的元素进行排序。 ​ 表 1 C STL 排序函数 函数名用法sort (first, last)对容器或普通数…

广度优先遍历与最短路径(Java 实例代码源码包下载)

目录 广度优先遍历与最短路径 Java 实例代码 src/runoob/graph/ShortestPath.java 文件代码&#xff1a; 广度优先遍历与最短路径 广度优先遍历从某个顶点 v 出发&#xff0c;首先访问这个结点&#xff0c;并将其标记为已访问过&#xff0c;然后顺序访问结点v的所有未被访问…