CSS【详解】定位 position (静态定位 static -- 文档流排布 、相对定位 relative、绝对定位 absolute、固定定位 fixed、黏性定位 sticky)

简介: CSS【详解】定位 position (静态定位 static -- 文档流排布 、相对定位 relative、绝对定位 absolute、固定定位 fixed、黏性定位 sticky)

静态定位 position: static 【默认】

此时,元素按 文档流 的方式排布:

  • 以左上角为起点
  • 内联元素 从左到右依次排布,当一行排不下时,自动换到下一行继续从左到右排布
  • 块级元素 独占一行

此时,top、left、right、bottom、z-index 等样式无效。

相对定位 position: relative

相对于原文档流的位置,进行上下左右的偏移,因 原文档流的位置会保留,所以其他元素的位置不会被影响。

  • left:
  • right:
  • top:
  • bottom:

上方 样式的名称和实际效果的方向相反,小心出错!

<template>
  <p>默认定位</p>
  <button>按钮1</button><button>按钮2</button><button>按钮3</button>
  <p>相对定位</p>
  <button>按钮1</button><button class="relativeDemo">按钮2</button><button>按钮3</button>
</template>

<style scoped>
.relativeDemo {
  position: relative;
  /* 向下偏移 10 px */
  top: 10px;
}
</style>
  • top/bottom 同时使用的时候,bottom 无效;
  • left/right 同时使用的时候,right 无效
  • left/top/right/bottom 的样式值为百分比时,相对于父元素进行计算,而不是自身,如果父元素没有高度,则 top/bottom 无效。

绝对定位 position: absolute

依据最近一层的定位元素(position 值为 absolute/relative/fixed 的元素)定位,若无定位元素,则依据 body 定位。

position: absolute 必须配合 left,right,top,bottom 一起使用,否则元素还在原文档流的位置。

当元素依据 body 标签定位时:

  • top 属性为元素上边框外侧与 body 上边框内侧间的距离
  • bottom 属性为元素下边框外侧与 浏览器窗口下边框 内侧间的距离
  • left 属性为元素左边框外侧与 body 左边框内侧间的距离
  • right 属性为元素右边框外侧与 body 右边框内侧间的距离

<template>
  <p>默认定位</p>
  <button>按钮1</button><button>按钮2</button><button>按钮3</button>
  <p>绝对定位</p>
  <button>按钮1</button><button class="Demo">按钮2</button><button>按钮3</button>
</template>

<style scoped>
.Demo {
  position: absolute;
  /* 绝对定位元素下边框外侧与 浏览器窗口下边框 内侧间的距离为10px */
  bottom: 10px;
}
body {
  height: 120vh;
}
</style>

当元素依据其他定位元素定位时:

  • top 属性为元素上边框外侧与 定位元素 上边框内侧间的距离
  • bottom 属性为元素下边框外侧与 定位元素 下边框内侧间的距离
  • left 属性为元素左边框外侧与 定位元素 左边框内侧间的距离
  • right 属性为元素右边框外侧与 定位元素 右边框内侧间的距离

当 left,right,top,bottom 的值为百分比,且元素是图片时:

  • top 和 bottom 属性最终的值 = (定位元素的高度 - 元素的高度)* 百分比
  • left 和 right 属性最终的值 = (定位元素的宽度 - 元素的宽度)* 百分比

当对立方位的属性都有值时,绝对定位元素会像流体一样充满整个空间,比如 纯CSS 实现全屏遮罩

<template>
  <div class="mask"></div>
</template>

<style scoped>
/* 全屏遮罩 */
.mask {
  background-color: rgba(0, 0, 0, 0.8);
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
}
</style>

元素绝对定位后,会发生以下变化:

  • 脱离文档流(原文档流的位置不会保留)
  • display 最终的值为 block/table ,但宽度不会自动撑满整行,还是由其内容决定(无法设置宽高的内联元素在绝对定位后,也可以设置宽高)

【实战】子绝父相

父元素相对定位,子元素绝对定位,常用于实现子元素重叠在父元素上。

<template>
  <div class="logo">
    <span class="label">EC编程俱乐部</span>
  </div>
</template>

<style scoped>
.logo {
  width: 200px;
  height: 200px;
  background-image: url('./ecLogo.jpg');
  background-size: cover;
  position: relative;
}

.label {
  color: white;
  position: absolute;
  bottom: 0px;
  width: 200px;
  text-align: center;
}
</style>

【实战】水平垂直居中

<template>
  <div class="parent">
    <div class="child"></div>
  </div>
</template>

<style scoped>
.parent {
  width: 200px;
  height: 200px;
  border: 1px solid red;
  position: relative;
}

.child {
  background-color: green;
  width: 100px;
  height: 50px;
  position: absolute;
  /* 父元素宽度的50% */
  left: 50%;
  /* 向左偏移自身宽度的一半 */
  margin-left: -50px;
  /* 父元素高度的50% */
  top: 50%;
  /* 向下偏移自身高度的一半 */
  margin-top: -25px;
}
</style>

固定定位 position: fixed

相对于浏览器窗口进行定位,无论页面如何滚动,其位置都保持不变。(IE6不兼容)

position: fixed 必须配合 left,right,top,bottom 一起使用,否则元素还在原文档流的位置。

元素固定定位后,会发生以下变化:

  • 脱离文档流(原文档流的位置不会保留)
  • display 最终的值为 block/table ,但宽度不会自动撑满整行,还是由其内容决定 (无法设置宽高的内联元素在绝对定位后,也可以设置宽高)

【实战】返回顶部

<template>
  <div>页面的顶部</div>
  <a href="#" class="backtop">返回顶部</a>
</template>

<style scoped>
.backtop {
  box-sizing: border-box;
  padding: 8px 10px;
  position: fixed;
  bottom: 60px;
  right: 30px;
  width: 60px;
  height: 60px;
  background-color: gray;
  text-align: center;
  line-height: 20px;
  color: white;
  text-decoration: none; /*去掉超链接的下划线*/
}
</style>

【实战】顶部导航

<template>
  <div class="page">
    <nav>我是导航</nav>
    <main>页面内容</main>
  </div>
</template>

<style scoped>
.page {
  /* 页面的顶部内边距与导航的高度相同,避免导航遮挡页面内容 */
  padding-top: 60px;
}
nav {
  position: fixed;
  top: 0;
  background-color: green;
  height: 60px;
  width: 100%;
}
main {
  height: 100vh;
}
</style>

黏性定位 position: sticky

  • 当元素在浏览器窗口内时,随页面滚动
  • 当元素抵达浏览器窗口的边框时,元素不再随页面滚动。
  • 通过 top、left、right、bottom 属性,可以设置元素不再随页面滚动的具体位置
  • 同时设置 top、bottom 时,上下两个方位的黏性效果会同时生效。
  • 同时设置 left、right 时,左右两个方位的黏性效果也会同时生效。
  • 多个黏性定位元素在同一容器中会重叠,在不同容器中会依次推开【推荐】,见链接
  • https://demo.cssworld.cn/new/3/4-3.php
  • 黏性定位元素的祖先元素中不能有可滚动元素。
  • 黏性定位元素的父元素高度不能和黏性定位元素的高度相同(否则没有实现黏性效果的空间)

【实战】黏性导航

https://demo.cssworld.cn/new/3/4-1.php

【实战】通讯录的首字母滞黏

https://demo.cssworld.cn/new/3/4-3.php

【实战】层次滚动

https://demo.cssworld.cn/new/3/4-4.php

实现原理:

  • 标题和网友评论都使用黏性定位
  • 通过z-index: -1 默认隐藏网友评论
  • 每个标题都在不同的容器
目录
相关文章
|
9月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
position定位(核心) 我们讲盒模型的时候,提到了3个属性可以用来控制页面排版。 三大属性:position属性,display属性,float属性。 position 属性控制页面上元素间的位置关系。 display 属性控制页面元素是否显示或者是堆叠还是并排显示。 float 属性提供控制方法。 通过float这种控制方法,可以实现多栏布局,导航菜单等等。 position属性是干嘛用的?怎么用?有哪些属性值? position属性控制页面上元素间的位置关系,也就是排版。 怎么用?要知道怎么用
715 0
|
前端开发
HTML+CSS基础知识(5)相对定位、绝对定位、固定定位
这篇文章介绍了HTML和CSS中的三种定位方式:相对定位、绝对定位和固定定位,并通过代码示例展示了它们如何影响元素在页面上的布局和位置。
HTML+CSS基础知识(5)相对定位、绝对定位、固定定位
|
前端开发 UED 开发者
神秘的 CSS 属性 “position: sticky” 究竟有何魔力?带你彻底理解粘性定位的奇妙世界!
【8月更文挑战第20天】在前端开发中,CSS的粘性定位(`position: sticky`)是一种结合了相对与固定定位优点的强大工具。它使元素能在特定条件下相对定位,达到指定阈值时转为固定定位,非常适合制作“吸顶”导航栏等。例如,设置`position: sticky; top: 0;`能让导航栏滚动至顶部时固定显示。此特性不仅限于导航栏,还可应用于侧边栏等,增强布局灵活性与用户体验。尽管如此,仍需注意不同浏览器间的兼容性和可能的布局冲突。
779 0
|
前端开发
CSS常用定位方法(绝对定位、相对定位、固定定位)
CSS常用定位方法(绝对定位、相对定位、固定定位)
CSS常用定位方法(绝对定位、相对定位、固定定位)
|
编解码 人工智能 前端开发
CSS中的绝对定位和相对定位
CSS中的绝对定位和相对定位
|
存储 前端开发 JavaScript
仿真银行app下载安装, 银行卡虚拟余额制作app,用html+css+js实现逼真娱乐工具
这是一个简单的银行账户模拟器项目,用于学习前端开发基础。用户可进行存款、取款操作,所有数据存储于浏览器内存中
|
人工智能 程序员 UED
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
924 21
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
前端开发 JavaScript
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
824 14
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    552
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    426
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    426
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    274
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    539
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    715
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    1378
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    308
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    1151
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    495