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

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

时间:2024-07-07 17:31:39浏览次数:20  
标签:定位 right bottom top 元素 sticky relative position

静态定位 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 默认隐藏网友评论
  • 每个标题都在不同的容器

标签:定位,right,bottom,top,元素,sticky,relative,position
From: https://blog.csdn.net/weixin_41192489/article/details/140242430

相关文章

  • MinGW GCC Boost Serialization 无法定位程序输入点 _ZSt19uncaught_exceptionsv 于动
     在Windows下使用MinGWGCC编译Boost和Demo程序,运行时报错:GCC: gccversion8.1.0(i686-posix-dwarf-rev0,BuiltbyMinGW-W64project)boost:boost1.85.0排查原因是GCC和Boost不匹配,适当降低boost版本后正常。GCC8.1是2018年,Boost1.85.0是2024年,时间差距比较大。......
  • 谷歌推广:精准定位潜在客户群体,提高广告转化率
    借助谷歌推广,你的品牌将如火箭升空般迅速崛起。作为全球最大的搜索引擎,其影响力犹如站在巨人之肩,触及的受众规模高达数十亿人。更为重要的是,我们可以准确锁定那些最有可能对贵公司的产品或服务产生浓厚兴趣的群体。这并非普通的广告宣传,而是助推您的品牌声名远扬的强大引擎。......
  • wsl安装Linux系统到指定位置
    默认情况下,wsl安装的系统,会安装到系统C盘,长期下去,很容易把C盘的空间消耗完,从而影响系统的正常运行,所以我建议是将wsl所有的系统都安装到其它磁盘中,便于维护。1、导出镜像通过wsl-l-v查看当前已安装的系统版本。导出到当前目录位置,也可以指定目录位置。wsl--......
  • 如何在JSP文件中接入高德地图实现地图展示和定位功能
    代码改进建议确保页面结构正确:检查页面的HTML结构,确保地图的容器<divid="container">正确放置。修改按钮功能:修正获取定位按钮的功能,确保它不会导致页面提交或其他问题。调整样式:调整地图容器的高度,确保地图有足够的空间显示。<!doctypehtml><%@pagecontentType=......
  • CentOS 7 nginx 安装 sticky模块
    一、安装准备        首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先安装这些lib库,这些依赖库主要有g++、gcc、openssl-devel、pcre-devel和zlib-devel 所以执行如下命令安装yuminstallgcc-c++  安装下面命令的目的是确保系统上安装了这些......
  • pom.xml 文件中的 <relativePath/>是指什么
    在Maven的pom.xml文件中,<relativePath/>元素用于指定一个父POM文件的相对路径。这个路径是相对于当前项目的pom.xml文件所在位置的路径。该元素主要用于定义多模块项目或层次化项目结构时,子项目如何找到父项目的pom.xml文件。详细解释基本语法<parent><groupId......
  • 智能扫地机器人编译过程中的定位导航技术
    智能扫地机器人的定位导航技术主要包括以下几种,下面将分点表示并归纳这些技术及其特点:1.随机碰撞导航:这是最早期的导航方式,扫地机器人通过随机移动来覆盖地面。特点:效率较低,容易重复清洁或遗漏区域。2.红外线导航:利用红外线传感器检测并避开障碍物。特点:相对简单,但清扫......
  • 第四章 对象的实例化内存布局与访问定位
    对象的实例化内存布局与访问定位对象的实例化 对象创建的方式(1)new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法(2)Class的newInstance方法:在JDK9里面被标记为过时的方法,因为只能调用空参构造器,并且权限必须为public(3)Cons......
  • 武汉凯迪正大分享电缆断点检测:定位电缆断点的技术与方法
    由于环境因素、施工质量等多种原因,电缆在使用过程中难免会出现断点故障,给生产和通信带来严重影响。因此如何快速准确地定位到电缆断点,成为了电力和通信领域亟待解决的问题。本文将从电缆断点检测的原理、方法以及技术实践等方面进行阐述,希望能给大家提供有益的参考也欢迎大家留......
  • vue elementUI el-tree 下拉树功能(包括搜索/默认高亮/展开下拉框默认定位于选中项的位
    <template><div><el-form:model="formData"ref="refFormData"label-width="180px"><el-form-itemlabel="景点"prop="location_id"><el-selectv-model="formData.location_name&qu......