CSS - position

2023-05-16

在 CSS 中,position 是实现元素定位的一种重要方式。使用定位的元素层叠级别比浮动会更高,采用定位来控制元素位置会更加容易。

一般我们使用定位,是通过使用定位模式边偏移量来确定元素位置的。

定位模式一共有如下:

  • static
  • relative
  • absolute
  • fixed
  • sticky
  • inherit

偏移量就是 top right bottom left 的值,指定到上 右 下 左各基准边的值。

其中 inherit 指定元素从父元素继承 position 的值,存在兼容性的问题,在实际中并不使用。其他 position 值下面我们来逐个介绍并配上实例。

static 静态定位

static 是默认的定位方式,如果元素不写 position 属性,那么其实就是 static 定位的,元素还是按原本的排列方式放置,并不具有特殊性。设置 top bottom left right 以及 z-index 是无效的。

relative 相对定位

relative 是相对定位,要注意是相对元素本该在的位置。也就是说,如果一个元素设置了相对定位,并设置了偏移值,那么这个偏移是相对它本该在的位置而言的。

查看如下的代码,盒子 one 和盒子 two 本来是一起竖直放置的:


<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .one {
            background-color: green;
        }

        .two {
            background-color: indianred;
        }

        .one,
        .two {
            width: 200px;
            height: 200px;
        }
    </style>
</head>

<body>
    <div class="one"></div>
    <div class="two"></div>
</body>

效果如下:

但是如果我们给盒子 one 加上相对定位 position: relative; 和一个偏移量 top:50px; left:50px;

    .one {
        position: relative;
        top: 50px;
        left: 50px;
        background-color: green;
    }

那么效果将会是如下:

(图中的灰色的原本的绿色盒子 one 的位置)

可以看出,盒子 one 相对与原本没有定位时候的位置偏移了,偏移的量就是我们设置的距离左边 50px, 距离顶部 50px 。而且,下面的盒子 two 的位置并不影响,并不会去占据盒子 one 的位置。

所以相对定位的盒子的特性:

  • “相对”是相对于没有定位时原本所在的位置
  • 原来的位置依然保留,其他区域的盒子并不受影响

absolute 绝对定位

绝对定位是以最近的带有定位的上级元素来确定位置的。(这里的上级元素包括直接父级元素,爷爷级的元素或者更高层级的元素)

实例:

如下的盒子中,我们如果希望将黄色的盒子放在灰色线所在的位置,那么怎么做呢?

这是两个上面盒子的代码:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .one {
            width: 200px;
            height: 200px;
            margin: 100px;
            background-color: green;
        }
        .in {
            width: 100px;
            height: 100px;
            background-color: orange;
        }
    </style>
</head>
<body>
    <div class="one">
        <div class="in"></div>
    </div>
</body>
</html>

如果你在里面的盒子 in 加上绝对定位,并给定偏移值,像这样:

 .in {
    position: absolute;
    top:0px;
    left: 50px; 
    width: 100px;
    height: 100px;
    background-color: orange;
}

那么得到的结果其实是:

发现黄色盒子并不在绿色盒子里面,那么这是为什么呢,其实这是因为给了绝对定位的盒子会向上级元素查找,直到找到具有定位的父级元素来作为基准确定位置。如果一直没有找到。那么就会以浏览器 (Document )来定位。

然而,我们应该以父级盒子 one 为基准进行定位,那么就应该给 one 一个定位,所以,我们还需要给 one 加上定位 posiion:relative;
至于为什么是给 relative,因为其他定位都可能产生副作用,relative 是最合适的。[ 这里父元素给 static 相当于没有定位,给 absolute 会继续向上找定位的父级,fixed 固定在窗口,其他定位特性更加不合适或者会影响本身]

.one {
    position: relative;
    width: 200px;
    height: 200px;
    margin: 100px;
    background-color: green;
}

如此便可以实现:

当给一个元素添加绝对定位的时候,如果它后面还有其他非定位的元素,那么其他元素是会占据它的原本位置的,这一点是区别于相对定位的。而且,如果子元素需要相对直接父元素进行定位,那么最好给父元素一个 relative 定位。

fixed 固定定位

相比之下,fixed 布局就要简单的多。我们常见的页面中,在滚动的时候,会有一部分是始终在窗口中的,比如网页广告,当你打开窗口,不论你怎么滚动,它就是始终都在某个角落固定。

它的定位基准其实就是浏览器窗口, 所以,其实可以看作是一种特殊的绝对定位。

「注意⚠️:Fixed 定位在 IE7 和 IE8 下需要描述 !DOCTYPE 才能支持。」

<html>

<head>
    <meta charset="utf-8">
    <title>Document</title>
    <style>
        p.fixed {
            position: fixed;
            top: 30px;
            right: 5px;
        }
    </style>
</head>

<body>

    <p class="fixed">这里被固定定位了,不随页面滚动</p>
    <p><b>注意:</b> IE7 和 IE8 支持只有一个 !DOCTYPE 指定固定值.</p>
    <p>AAA</p>
    <p>AAA</p>
    <p>AAA</p>
    ...
</body>
</html>

sticky 粘性定位

粘性定位结合了 relative 和 fixed 的特性,可以说是根据用户的滚动在相对定位和固定定位之间切换。元素在滑动超出指定的偏移值之前是相对定位,在超出之后就成了固定定位了。

「注意⚠️:Internet Explorer, Edge 15 及更早 IE 版本不支持 sticky 定位。 Safari 需要使用 -webkit- prefix」

比如,下面指定了 top 为 0。如果class="sticky"的 p 元素一直随着页面滑动,该 p 元素会到上面, top 成为负值。所以,在超出前,会跟着页面滑动,但在超出后,就成了 fixed 固定定位固定在页面顶端。这便是 sticky 定位。

<html>
<head>
    <meta charset="utf-8">
    <title>Document</title>
    <style>
        .sticky {
            position: -webkit-sticky;
            position: sticky;
            top: 0px;
            padding: 5px;
            background-color: orange;
            border: 2px solid #4CAF50;
        }
    </style>
</head>

<body>

    <p>滚动页面</p>
    <p class="sticky">注意: IE/Edge 15 及更早 IE 版本不支持 sticky 属性。</p>

    <div style="padding-bottom:1000px">
        <p>滚动</p>
        <p>来回滚动</p>
        <p>滚动</p>
        <p>来回滚动</p>
        <p>滚动</p>
        <p>来回滚动</p>
    </div>

</body>
</html>

至此,CSS position 的内容就到这里了,其中 relative 和 absolute 是用的最多的定位方式,且实际有许多布局技巧,再做分享!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSS - position 的相关文章

  • Sass 更改监视间隔,更频繁地编译

    我正在使用 sass 将 scss 编译为 css 每次保存后 大约需要 15 20 秒才能编译为 scss 文件到 css 因此我需要刷新几次才能看到预期结果 有没有办法告诉 Sass 更频繁地检查更改 这是我使用的命令 sass wat
  • 有没有一种 CSS 唯一的方法来完全隐藏部分溢出的元素?

    想象一下 您有一个元素的高度是浏览器窗口高度的百分比 该元素包含一堆块元素 有没有办法使用类似的东西overflow hidden但要确保最后一个块元素在溢出时完全隐藏而不是部分隐藏 使用 JavaScript 很容易做到这一点 但我更喜欢
  • @font-face 字体不起作用

    我正在尝试从本地存储中获取一种可以使用的字体 font face font family const src url const ttf fp title1 font family const trebuchet ms font size
  • CSS 可调整大小的带标题的图像

    我正在尝试获取并排显示的两个图像的 HTML 布局 并填充页面 同时保持其纵横比并保持图像彼此相邻 即不在页面每一半的中心 我还想要顶部有一个标题 我几乎已经使用下面的 CSS hackery 实现了这一目标 目前它看起来像这样 如果我水平
  • 更改 jQuery UI 滑块大小

    我在用这个 UI 滑块 http api jqueryui com slider entry examples尺寸也是我网站上的尺寸 不是宽度 而是按钮的尺寸 演示页面底部 但是here http jqueryui com themerol
  • 将 div 的内容放在一起以便在 IE8 中打印

    给定以下 HTML 文档 我需要将 表标题 行保留在与 table 在 IE8 中打印时 尽管page break inside avoid 标题和表格之间仍然有一个分页符 我对此的理解表明应该避免分页并且整个div推至第 2 页 文档类型
  • 如何将带有动态内容的无序列表居中放置在 div 中?

    我正在尝试找出一种将 div 内的无序列表垂直居中的方法 我找到了很多方法来做到这一点 但是我的 ul 标签中的 li 标签中有 PHP 代码 可以从数据库获取文本 这会导致 li 标签中的文本长度发生变化 显着导致内部垂直筛选我的 div
  • Html 表格右对齐

    item a item b item c item d item e item a item b item c item d item e 我的表中有两行 我希望它们每行都有一个左对齐的项目和一些右对齐的项目 如上面的第一个示例所示 然而
  • 如何填充剩余高度的100%?

    1 2
  • 水平居中绝对定位元素位于另一个元素中心下方

    如何使绝对定位的元素居中于另一个元素的中心下方 使用示例 单击时打开 显示新 绝对定位 元素的日期选择器 lt Center lt Not absolutely positioned element a button Always disp
  • 如何使弹性盒与需要截断文本的嵌套子项一起使用?

    要让 flex child 截断带有省略号的文本 可以给父级一个 min with 0 在我的项目中 子组件嵌套在几乎 10 个不同的弹性容器中 我是否需要给所有父母一个 min width 0 或者有更好的解决方法吗 sandbox ht
  • 如何找到“display: none”元素的尺寸?

    我在 div 中有一些获取 CSS 的子元素display none应用于它 我想找出子元素的尺寸是多少 我怎样才能做到这一点 小提琴演示 https jsfiddle net h9b17vyk var o document getElem
  • 突出显示所选行 GridView

    当用户从网格视图中单击 编辑 时 我想突出显示该行 这是我所做的 但没有效果 我还缺少什么 SelectedRowStyle background color Yellow
  • 如何让 div 调整其高度以适应容器?

    如何让导航 div 向下展开或使其高度与其父 div 相同 border 0 padding 0 margin 0 container margin left auto margin right auto border 1px solid
  • 在浮动元素周围放置边框

    假设我有类似以下代码的内容 我想在左右浮动的两个图像之间显示一些文本 img src testImage1 png alt Test Image 1 img src testImage2 png alt Test Image 2 p Tes
  • 使用 CSS 检查滚动

    我正在尝试创建一个纯 100 CSS 无 jQuery 返回顶部 按钮 但我希 望该按钮仅在访问者向下滚动页面时显示 是否可以用 CSS 来检查这一点 因此 如果访问者向下滚动一点 则会显示 返回顶部 按钮 Thanks 根据光标位置确定
  • CSS中的继承是什么意思? [复制]

    这个问题在这里已经有答案了 我经常使用background inherit 像这样 许多其他 CSS 属性接受继承作为值 但有什么作用inherit意思是 它是如何工作的 inherit只是意味着样式将从元素的父元素继承 例如 jsFidd
  • vuetify v-text-field 给定值后背景颜色发生变化

    我正在使用 vuetify 创建登录表单 并使用 v text field 作为输入 当有字段建议时就会出现问题 例如 我的浏览器中保存了多封电子邮件 它会在电子邮件字段上为我提供这些电子邮件的建议 到目前为止一切都很好 但是当我选择其中之
  • 如何对列表进行垂直排序?

    我在下面使用这个HTML and CSS对列表进行排序的代码vertical 输出是horizontal sorted 我的示例代码
  • css打印模式:仅在生成的word文档的第一页上显示页眉和页脚

    我使用 html 代码成功生成了 Word 文档 其中页眉和页脚以 css 打印模式设置样式 这是我的代码

随机推荐

  • Hadoop源码分析——MapReduce输入和输出

    Hadoop中的MapReduce库支持集中不同的格式的输入数据 例如 xff0c 文本模式的输入数据的每一行被视为一个key value键值对 key是文件的偏移量 xff0c value是那一行的内容 另一种常见的格式是以key进行排序
  • 大数据013——Flume

    1 Flume 简介 Flume是由Cloudera软件公司提供的一个高可用的 xff0c 高可靠的 xff0c 分布式的海量日志采集 聚合和传输的系统 xff0c 后与2009年被捐赠了apache软件基金会 xff0c 为hadoop相
  • Hadoop源码分析——计算模型MapReduce

    MapReduce 是一个计算模型 xff0c 也是一个处理和生成超大数据集的算法模型的相关实现 用户首先创建一个Map函数处理一个基于key value pair的数据集合 xff0c 输出中间的基于 key value pair 的数据
  • 从SDLC到DevSecOps的转变

    OSSTMM 根据开源安全测试方法手册OSSTMM Open Source Security Testing Methodology Manual 的表述 安全测试包括但不限于以下几种做法 漏洞扫描 安全扫描 渗透测试 风险评估 安全审核
  • 大数据014——Storm 简介及入门案例

    分布式实时数据处理框架 Storm 1 Storm简介与核心概念 1 1 Storm 简介 全称为 Apache Storm xff0c 是一个分布式实时大数据处理系统 它是一个流数据框架 xff0c 具有最高的获取率 它比较简单 xff0
  • Hive与HBase整合详解

    参考之前小节的大数据010 Hive与大数据012 HBase成功搭建Hive和HBase的环境 xff0c 并进行了相应的测试 xff0c 并且在大数据011 Sqoop中实现Hive HBase与MySQL之间的相互转换 xff1b 本
  • 大数据015——Elasticsearch基础

    1 Elasticsearch 简介 Elasticsearch是一个基于Lucene的实时的分布式搜索和分析 引擎 设计用于云计算中 xff0c 能够达到实时搜索 xff0c 稳定 xff0c 可靠 xff0c 快速 xff0c 安装使用
  • 大数据015——Elasticsearch深入

    1 Elasticsearch 核心概念 1 1 cluster 代表一个集群 xff0c 集群中有多个节点 xff0c 其中有一个为主节点 xff0c 这个主节点是可以通过选举产生的 xff0c 主从节点是对于集群内部来说的 es的一个重
  • 大数据014——Storm 集群及入门案例

    分布式实时数据处理框架 Storm 1 Storm 集群 1 1 Storm 版本变更 版本编写语言重要特性HA 高可用0 9 xjava 43 clojule改进与Kafka HDFS HBase的集成不支持 xff0c storm集群只
  • 大数据016——Kafka

    1 Kafka 简介 Kafka 是一个高吞吐量 低延迟分布式的消息队列系统 kafka 每秒可以处理几十万条消息 xff0c 它的延迟最低只有几毫秒 Kafka 也是一个高度可扩展的消息系统 xff0c 它在LinkedIn 的中央数据管
  • 大数据017——Scala基础

    Scala 是一门以 java 虚拟机 xff08 JVM xff09 为目标运行环境并将面向对象和函数式编程语言的最佳特性结合在一起的编程语言 你可以使用Scala 编写出更加精简的程序 xff0c 同时充分利用并发的威力 由于scala
  • 大数据017——Scala进阶

    Scala 基础语法 第二阶段 1 类和对象 1 1 类 1 xff09 简单类和无参方法 如下定义Scala类最简单形式 xff1a class Counter private var value 61 0 必须初始换字段 def inc
  • 大数据018——Spark(一)

    1 Spark 数据分析简介 1 1 Spark 是什么 Spark 是一个用来实现快速而通用的集群计算的平台 在速度方面 xff0c Spark 扩展了广泛使用的 MapReduce 计算模型 xff0c 而且高效地支持更多计算模式 xf
  • ROS 订阅RealsenseD435图像与opencv保存32位深度图像

    一 xff0c 通过ros订阅realsense图像 int main int argc char argv ros init argc argv 34 image listener 34 ros NodeHandle nh cv name
  • 测试左移和右移:不是左右逢源而是左右突击

    持续测试是在软件交付生命周期过程中 xff0c 以防控业务风险为目的 xff0c 将每一个业务交付阶段都辅以测试活动进行质量保障 xff0c 并尽最大可能自动化 xff0c 通过测试结果不断的反馈给制品过程的测试实践活动 随着持续测试实践的
  • 虚拟机ubuntu上安装make和cmake

    可先更新下apt xff1a sudo apt get update 首先安装make xff1a sudo apt get install ubuntu make sudo apt get install make sudo apt ge
  • ros学习笔记(十):树莓派 Ubuntu mate 16.04 开启vncserver 远程桌面+自启动+分辨率修改

    树莓派 Ubuntu mate 16 04 开启vncserver 远程桌面 43 自启动 43 分辨率修改 一 环境 1 树莓派3b 43 Ubuntu 16 04 mate 2 我是在win10 安装的 vncview 软件进行远程桌面
  • 梯度、散度、旋度的关系

    转自 百度文库https wenku baidu com view 681228626137ee06eff918c4 html 知乎上一篇不错的文章 https www zhihu com question 24591127 麦克斯韦方程组
  • 【瓣芽·Banya】React Native 构建的仿豆瓣应用

    今天介绍一个用 React Native 创建的应用 xff0c 集合了豆瓣电影 xff0c 图书等信息展示功能的 app github 地址 瓣芽 Banya 项目使用了react navigation 做路由 redux 做部分状态管理
  • CSS - position

    在 CSS 中 xff0c position 是实现元素定位的一种重要方式 使用定位的元素层叠级别比浮动会更高 xff0c 采用定位来控制元素位置会更加容易 一般我们使用定位 xff0c 是通过使用定位模式和边偏移量来确定元素位置的 定位模