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 的相关文章

  • 使用滤镜将css3灰色图像转为蓝色?

    我正在尝试将灰色图像变为更蓝色的色调 真的不知道如何为此设置滤镜或是否可能 该图像只有一种颜色 cacaca 其余部分透明 我正在尝试使用相同的图像进行一些叠加 以便它仅突出显示那些彩色部分而不是透明区域 一直在尝试其中的一些 但没有取得多
  • 将 JavaFX 按钮放置在特定位置

    我的问题是如何将 javafx 按钮放置在特定位置 我一直尝试执行这个简单的代码 结果是按钮仅位于屏幕中心 而不是我想要的位置 我正在使用 StackPane Code Button button new Button button set
  • 我可以在 CSS 类名中使用驼峰命名法吗

    我想命名一个 CSS 类并调用它imgSuper 我可以在 CSS 类中使用驼峰命名法吗 从技术上讲是可以的 但这是有风险的 因为虽然 CSS 语法大多不区分大小写 但在某些浏览器中 在某些条件下 类名被视为区分大小写 因为规范没有指定浏览
  • 从 Bootstrap 中删除字形

    如何从 bootstrap 3 中删除所有字形实例 看起来它已经大量嵌入到 css 文件中了 我正在努力使文件大小尽可能最小 只需简单地克隆引导程序https github com twbs bootstrap sass https git
  • 禁用引导列上的滚动

    我正在尝试禁用引导列上的滚动 这是我的代码 div class container fluid h 100 div class row h 100 div class col 4 h 100 bg dark fixed div div cl
  • 使用 JavaScript 使链接保持活动状态并在单击时显示悬停效果

    I am struggling to make this work I d like to make it where if O F is clicked the hover state stays active if another li
  • 保持未知数量的 div 居中,每行最多 4 个

    我有一个简单的问题 但我自己无法解决 简而言之 有一个未知电话我必须在页面中放置的元素数量 最多 每行 4 个元素 但仍居中 此图片给您一个提示 我为了示例而设置它 详细 在上图中我涵盖了不同的场景 例如 如果总共有 5 个元素 则应使用第
  • 避免响应式页面的重复内容

    我目前正在做一个涉及响应式设计的项目 整个布局应该使用HTML和CSS来实现 我知道可以使用 java 脚本将内容从一个列布局移动到另一列布局 而无需复制内容 但是使用 HTML 和 CSS 是否可以实现相同的效果 以下面的例子为例 它会在
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • FireFox 中的“contenteditable = true”高度问题

    当有空的时候div with contenteditable true CSS contenteditable true border 1px dashed dedede padding 3px HTML div div 在 IE 和 Ch
  • 输入文本中固定下划线

    我试图修复所有输入文本类型中的下划线 但没有成功 Example My code input width 100 background color fcfcfc border 0 padding 10px div class col lg
  • 背景突出显示代码块中的文本?

    我的目标是能够显示如下内容 我想要背景突出显示已经有的代码块内的一段代码语法高亮 我想在 Github 上托管于 Github Pages 上的 Markdown 文件上执行此操作 可以使用 kramdown markdown html c
  • 当悬停时不透明度发生变化时,Google Chrome 中的背景会发生变化

    我使用 Jquery 设置了悬停效果 可以更改悬停元素的不透明度 它在所有最新的浏览器中都能正常工作 除了 Chrome 它会改变 body 元素的背景 这是链接 http wrong ro tataia http wrong ro tat
  • Windows Phone 8 中的 Webview 弹跳

    我需要知道是否有任何方法可以控制 Windows 8 中的 webview 弹跳属性 我已经尝试过 ms touch action none 它确实会停止弹跳 但会禁用应用程序中的整个滚动 我已尝试以下方法 但这些方法不起作用 backfa
  • 使用 CSS Flexbox 堆叠图像

    我正在学习使用CSSflexbox 和我想在左侧渲染一个大图像 并在彼此之上渲染两个小图像 我怎样才能使用CSS弹性盒 div class container img class image1 src alt null img class
  • 通过 SVG 背景传递鼠标事件

    我有两个 SVG 元素 每个元素覆盖整个屏幕 html body height 100 svg position absolute top 0 left 0 bottom 0 right 0
  • HTML 覆盖高度覆盖整个可见页面

    我有一个使用 AJAX 加载一些内容的网页 我想在加载过程中显示带有加载指示器的覆盖层 以便用户无法与页面的大部分内容交互 除了顶部的菜单 我正在使用 jQuery 和jQuery BlockUI 插件 http malsup com jq
  • Firefox:如何测试首选颜色方案?

    在 Firefox 67 中 可以使用媒体查询来检测用户对浅色或深色主题的偏好 https davidwalsh name demo prefers color scheme php 在我的 Firefox 版本 在 Ubuntu 下 中
  • 在 HTML 中移动选取框/下移文本

    我正在尝试向下移动或移动 HTML 中的文本 但我似乎无法将其移动到任何地方 我添加了一个颜色命令来更改文本的颜色 但似乎只是移动了 它一直到顶部
  • iOS 5 中的 webkit-overflow-scrolling: touch "handle" 是否有外观 CSS 规则?

    我有一个元素恰好同时具有 webkit overflow scrolling touch 和 background color black 因此显示滚动位置的 手柄 很难看到 是否有 webkit CSS 样式规则可以改变该 手柄 的外观

随机推荐

  • Android模拟器检测常用方法

    在Android开发过程中 xff0c 防作弊一直是老生常谈的问题 xff0c 而模拟器的检测往往是防作弊中的重要一环 xff0c 接下来有关于模拟器的检测方法 xff0c 和大家进行一个简单的分享 1 传统的检测方法 传统的检测方法主要是
  • RecyclerView 隐藏部分分割线

    在项目中遇到复杂点的RecyclerView xff0c 可能会有隐藏部分分割线的需求 xff0c 例如item1和item3之间的分割线隐藏 xff0c item4和item5之间的分割线隐藏等 在看了文档里的ItemDecoration
  • 浅谈去中心化应用

    1 中心化应用 现在我们所使用的应用基本上都是中心化的应用 xff0c 什么是中心化应用呢 xff0c 举个栗子 xff0c 我们在天猫买东西的时候 xff0c 需要先付款给支付宝 xff0c 然后卖家发货 xff0c 我们确认收货之后 x
  • EGL综述

    参考 xff1a https www khronos org registry EGL specs eglspec 1 5 pdf 什么是EGL EGL是支持多平台 多操作系统的 xff0c 比如安卓 Unix Windows等 为了扩展性
  • Java二分搜索树及其添加删除遍历

    对于树这种结构 xff0c 相信大家一定耳熟能详 xff0c 二叉树 二分搜索树 AVL树 红黑树 线段树 Trie等等 xff0c 但是对于树的应用以及编写一棵解决特定问题的树 xff0c 不少同学都会觉得不是一件简单的事情 xff0c
  • Android自定RadioGroup实现点击切换效果

    一 xff1a java文件 public class SegmentedGroup extends RadioGroup private int mMarginDp private Resources resources private
  • opencv--将本地摄像头数据转换成ip摄像头数据流,并在客户端获取该流进行显示

    项目介绍 xff1a 在本项目中 xff0c 实现从本地摄像头获取数据帧 xff0c 然后将其转换成ip摄像头数据流并在客户端通过opencv代码实时获取该图像数据进行显示 xff1a 当然也能在浏览器通过输入地址进行视频的访问 方式一 x
  • 8. &amp;和&amp;&amp;的区别?

    答 xff1a amp 运算符有两种用法 xff1a 1 按位与 xff1b 2 逻辑与 amp amp 运算符是短路与运算 逻辑与跟短路与的差别是非常巨大的 xff0c 虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是t
  • 记InheritedWidget使用思考

    InheritedWidget 是项目中必不可少的组件 xff0c 用户数据共享 老生常谈的Provider框架也是基于InheritedWidget实现的 简介 InheritedWidget组件是功能性组局 xff0c 实现了由上向下共
  • flutter数据共享系列——随记

    Provider InheritedWidget 解决了数据共享问题 迎面也带来数据刷新导致的组件不必要更新问题 Provider基于InheritedWidget实现数据共享 xff0c 数据更新 xff0c 定向通知组件更新等 接下来我
  • Flutter布局——一段代码解释最常见的约束错误

    flutter布局的原理 Constraints go down Sizes go up Parent sets position 父节点向子节点传约束子节点向父节点上传大小最后由父节点决定位置 不是按照直接约束显示 问题代码 xff1a
  • 流媒体压力测试rtmp&hls(含推流和拉流)

    root 64 localhost yum install git unzip patch gcc gcc c 43 43 make root 64 localhost git clone https github com rzrobert
  • Windows开启网络对时方法

    Windows开启网络对时方法 1 启用 NTPServer 为此 xff0c 请按照下列步骤操作 xff1a a 单击 开始 xff0c 单击 运行 xff0c 键入 regedit xff0c 然后单击 确定 进入注册表 b 找到并单击
  • 关于【finder不能完成该操作 因为未能读取或写入"文件名"中的某些数据(错误代码-36)】快速解决办法

    如题 xff1a finder不能完成该操作 因为未能读取或写入 34 文件名 34 中的某些数据 错误代码 36 我们在Mac上操作NTFS格式的硬盘中的文件 xff0c 删除过程中由于某些原因为删除完整 xff0c 直接拔掉硬盘 xff
  • Ubuntu安装指定版本clang-format

    执行以下命令即可 xff1a wget O https apt llvm org llvm snapshot gpg key sudo apt key add sudo vim etc apt sources list 插入从https a
  • Swift中设置tableview的分割线(separator)的样式、颜色、边距

    Swift中设置tableview的分割线 xff08 separator xff09 的样式 颜色 边距 设置分割线样式 三种分割线样式 xff1a case None 无分割线 case SingleLine 单条分割线 case Si
  • React-Native 程序出现闪退原因之一

    React Native 程序出现闪退原因之一 1 RN的iOS端release版本和staging版本出现闪退 原因 xff1a 使用了Number isInteger 该方法在iOS端debug模式下运行不会出现异常 xff0c 一旦生
  • 【Android】【问题分析】G-sensor因数据交互问题导致手机crash

    G sensor因数据交互问题导致手机crash 问题现象 xff1a 测试同事发现 xff0c 手机在使用和待机时 xff0c 低概率发现手机会crash 问题原因 xff1a G sensor在driver和HAL层因交互的参数不匹配
  • 【瓣芽·Banya】React Native 构建的仿豆瓣应用

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

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