CSS基础学习之元素定位(6)

        

目录

1、定位类型

2、取值

2.1、static

2.2、relative

2.3、absolute

2.4、fixed

2.5、stickty

3、示例

3.1、相对定位(relative)

3.2、绝对定位(absolute) 

3.3、固定定位(fixed) 

3.4、粘性定位(sticky) 

4、综合示例


CSS position 属性用于指定一个元素在文档中的定位方式。top,right,bottom 和 left 属性则决定了该元素的最终位置。

1、定位类型

  • 定位元素(positioned element)是其计算后位置属性为 relativeabsolutefixed 或 sticky 的一个元素(换句话说,除static以外的任何东西)。
  • 相对定位元素(relatively positioned element)是计算后位置属性为 relative的元素。
  • 绝对定位元素(absolutely positioned element)是计算后位置属性为 absolute 或 fixed 的元素。
  • 粘性定位元素(stickily positioned element)是计算后位置属性为 sticky 的元素。

        大多数情况下,height和width 被设定为 auto 的绝对定位元素,按其内容大小调整尺寸。但是,被绝对定位的元素可以通过指定top和bottom ,保留height未指定(即auto),来填充可用的垂直空间。它们同样可以通过指定left 和 right并将width 指定为auto来填充可用的水平空间。

        除了刚刚描述的情况(绝对定位元素填充可用空间):

  • 如果 top 和 bottom 都被指定(严格来说,这里指定的值不能为 auto ),top 优先。
  • 如果指定了 left 和 right ,当 direction设置为 ltr(水平书写的中文、英语)时 left 优先,当direction设置为 rtl(阿拉伯语、希伯来语、波斯语由右向左书写)时 right 优先。

2、取值

2.1、static

        该关键字指定元素使用正常的布局行为,即元素在文档常规流中当前的布局位置。此时 toprightbottomleft 和 z-index 属性无效。

2.2、relative

        该关键字下,元素先放置在未添加定位时的位置,再在不改变页面布局的前提下调整元素位置(因此会在此元素未添加定位时所在位置留下空白)。position:relative 对 table-*-group, table-row, table-column, table-cell, table-caption 元素无效。

2.3、absolute

        元素会被移出正常文档流,并不为元素预留空间,通过指定元素相对于最近的非 static 定位祖先元素的偏移,来确定元素位置。绝对定位的元素可以设置外边距(margins),且不会与其他边距合并。

2.4、fixed

        元素会被移出正常文档流,并不为元素预留空间,而是通过指定元素相对于屏幕视口(viewport)的位置来指定元素位置。元素的位置在屏幕滚动时不会改变。打印时,元素会出现在的每页的固定位置。fixed 属性会创建新的层叠上下文。当元素祖先的 transformperspectivefilter 或 backdrop-filter 属性非 none 时,容器由视口改为该祖先。

2.5、stickty

        元素根据正常文档流进行定位,然后相对它的最近滚动祖先(nearest scrolling ancestor)和 containing block(最近块级祖先 nearest block-level ancestor),包括 table-related 元素,基于 toprightbottom 和 left 的值进行偏移。偏移值不会影响任何其他元素的位置。 该值总是创建一个新的层叠上下文(stacking context)。注意,一个 sticky 元素会“固定”在离它最近的一个拥有“滚动机制”的祖先上(当该祖先的 overflow 是 hiddenscrollauto 或 overlay 时),即便这个祖先不是最近的真实可滚动祖先。这有效地抑制了任何“sticky”行为(详情见 Github issue on W3C CSSWG)。

3、示例

3.1、相对定位(relative)

        相对定位的元素是在文档中的正常位置偏移给定的值,但是不影响其他元素的偏移。下面的例子中,注意未应用定位的其他元素是按照 "Two" 在正常位置的情况下进行布局的。

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>元素定位学习</title><style>.box {display: inline-block;width: 100px;height: 100px;background: red;color: white;}#two {position: relative;top: 20px;left: 20px;background: blue;}</style>
</head><body><div class="box" id="one">One</div><div class="box" id="two">Two</div><div class="box" id="three">Three</div><div class="box" id="four">Four</div>
</body></html>

        运行效果如下:

3.2、绝对定位(absolute) 

        相对定位的元素并未脱离文档流,而绝对定位的元素则脱离了文档流。在布置文档流中其他元素时,绝对定位元素不占据空间。绝对定位元素相对于最近的非 static 祖先元素定位。当这样的祖先元素不存在时,则相对于 ICB(initial containing block,初始包含块)。

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>元素定位学习</title><style>* {box-sizing: border-box;}body {width: 500px;margin: 0 auto;}p {background: aqua;border: 3px solid blue;padding: 10px;margin: 10px;}span {background: red;border: 1px solid black;}.positioned {position: absolute;background: yellow;top: 40px;left: 30px;}</style>
</head><body><h1>Absolute positioning</h1><p>I am a basic block level element. My adjacent block level elements sit on newlines below me.</p><p class="positioned">By default we span 100% of the width of our parent element, and we are as tallas our child content. Our total width and height is our content + padding +border width/height.</p><p>We are separated by our margins. Because of margin collapsing, we areseparated by the width of one of our margins, not both.</p><p>inline elements <span>like this one</span> and <span>this one</span> sit onthe same line as one another, and adjacent text nodes, if there is space onthe same line. Overflowing inline elements<span>wrap onto a new line if possible — like this one containing text</span>,or just go on to a new line if not, much like this image will do:<img src="./images/long.png" /></p></body></html>

        运行效果如下:

3.3、固定定位(fixed) 

        固定定位与绝对定位相似,但元素的包含块为 viewport 视口。该定位方式常用于创建在滚动屏幕时仍固定在相同位置的元素。在下面的示例中,"One" 元素定位在离页面顶部 20px,离页面左侧 20px 的位置。

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>元素定位学习</title><style>.box {background: red;width: 100px;height: 100px;margin: 20px;color: white;}#one {position: fixed;top: 20px;left: 10px;}.outer {width: 500px;height: 300px;overflow: scroll;padding-left: 150px;}</style>
</head><body><div class="outer"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam congue tortoreget pulvinar lobortis. Vestibulum ante ipsum primis in faucibus orci luctuset ultrices posuere cubilia Curae; Nam ac dolor augue. Pellentesque mi mi,laoreet et dolor sit amet, ultrices varius risus. Nam vitae iaculis elit.Aliquam mollis interdum libero. Sed sodales placerat egestas. Vestibulum utarcu aliquam purus viverra dictum vel sit amet mi. Duis nisl mauris, aliquamsit amet luctus eget, dapibus in enim. Sed velit augue, pretium a semaliquam, congue porttitor tortor. Sed tempor nisl a lorem consequat, idmaximus erat aliquet. Sed sagittis porta libero sed condimentum. Aliquamfinibus lectus nec ante congue rutrum. Curabitur quam quam, accumsan idultrices ultrices, tempor et tellus.</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam congue tortoreget pulvinar lobortis. Vestibulum ante ipsum primis in faucibus orci luctuset ultrices posuere cubilia Curae; Nam ac dolor augue. Pellentesque mi mi,laoreet et dolor sit amet, ultrices varius risus. Nam vitae iaculis elit.Aliquam mollis interdum libero. Sed sodales placerat egestas. Vestibulum utarcu aliquam purus viverra dictum vel sit amet mi. Duis nisl mauris, aliquamsit amet luctus eget, dapibus in enim. Sed velit augue, pretium a semaliquam, congue porttitor tortor. Sed tempor nisl a lorem consequat, idmaximus erat aliquet. Sed sagittis porta libero sed condimentum. Aliquamfinibus lectus nec ante congue rutrum. Curabitur quam quam, accumsan idultrices ultrices, tempor et tellus.</p><div class="box" id="one">One</div></div></body></html>

        运行效果如下:

3.4、粘性定位(sticky) 

        粘性定位可以被认为是相对定位和固定定位的混合。元素在跨越特定阈值前为相对定位,之后为固定定位。例如:

#one {position: sticky;top: 10px;
}

        在 viewport 视口滚动到元素 top 距离小于 10px 之前,元素为相对定位。之后,元素将固定在与顶部距离 10px 的位置,直到 viewport 视口回滚到阈值以下。

        粘性定位常用于定位字母列表的头部元素。标示 B 部分开始的头部元素在滚动 A 部分时,始终处于 A 的下方。而在开始滚动 B 部分时,B 的头部会固定在屏幕顶部,直到所有 B 的项均完成滚动后,才被 C 的头部替代。

须指定 top, right, bottom 或 left 四个阈值其中之一,才可使粘性定位生效。否则其行为与相对定位相同。

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>元素定位学习</title><style>* {box-sizing: border-box;}dl {margin: 0;padding: 24px 0 0 0;}dt {background: #b8c1c8;border-bottom: 1px solid #989ea4;border-top: 1px solid #717d85;color: #fff;font:bold 18px/21px Helvetica,Arial,sans-serif;margin: 0;padding: 2px 0 0 12px;position: -webkit-sticky;position: sticky;top: -1px;}dd {font:bold 20px/45px Helvetica,Arial,sans-serif;margin: 0;padding: 0 0 0 12px;white-space: nowrap;}dd+dd {border-top: 1px solid #ccc;}</style>
</head><body><div><dl><dt>A</dt><dd>Andrew W.K.</dd><dd>Apparat</dd><dd>Arcade Fire</dd><dd>At The Drive-In</dd><dd>Aziz Ansari</dd></dl><dl><dt>C</dt><dd>Chromeo</dd><dd>Common</dd><dd>Converge</dd><dd>Crystal Castles</dd><dd>Cursive</dd></dl><dl><dt>E</dt><dd>Explosions In The Sky</dd></dl><dl><dt>T</dt><dd>Ted Leo & The Pharmacists</dd><dd>T-Pain</dd><dd>Thrice</dd><dd>TV On The Radio</dd><dd>Two Gallants</dd></dl></div></body></html>

 运行效果如下:

sticky定位效果

4、综合示例

        如下是我们要实现的一个效果:

         首先是中间的虚线方框:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>元素定位学习</title><style>div {height: 200px;width: 200px;position: absolute;left: 200px;top: 50px;font-size: 4rem;line-height: 200px;text-align: center;}.original {border: 1px dashed;}</style>
</head><body><div class="original"></div></body></html>

        效果如下:

        没错就是一个方框,接下来添加两条虚线,水平的那条是没有旋转的线,另外一条旋转了135度(顺时针方向):

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>元素定位学习</title><style>div {height: 200px;width: 200px;position: absolute;left: 200px;top: 50px;font-size: 4rem;line-height: 200px;text-align: center;}.original {border: 1px dashed;}.original:before,.original:after {content: "";position: absolute;top: 100px;width: 500px;left: -150px;height: 1px;border-top: 2px dotted;}.original:after {transform: rotate(135deg);}</style>
</head><body><div class="original"></div></body></html>

         效果如下:

        这里使用了伪元素.original:before及 .original:after,这两个伪元素就是负责添加水平虚线和另外一条旋转过的虚线的。

        .original:after {content: "";position: absolute;top: 100px;width: 500px;left: -150px;height: 1px;border-top: 2px dotted;}

         定位方式为绝对定位,而绝对定位元素相对于最近的非 static 祖先元素定位。当这样的祖先元素不存在时,则相对于 ICB(initial containing block,初始包含块),这里其实是相对于div定位了。

        接下来就是完整的效果,代码如下:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>元素定位学习</title><style>div {height: 200px;width: 200px;position: absolute;left: 200px;top: 50px;font-size: 4rem;line-height: 200px;text-align: center;}.original {border: 1px dashed;}.original:before,.original:after {content: "";position: absolute;top: 100px;width: 500px;left: -150px;height: 1px;border-top: 2px dotted;}.original:after {transform: rotate(135deg);}.one {background-color: #ccc;}.two {background-color: #d6bb72;}.one {transform: translateX(200px) rotate(135deg);}.two {transform: rotate(135deg) translateX(200px);}</style>
</head><body><div class="original"></div><div class="one">1</div><div class="two">2</div></body></html>

        该案例有助于理解元素定位以及transform的作用。

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

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

相关文章

智慧互联新时代,Vatee万腾平台引领行业变革

在科技日新月异的今天&#xff0c;我们正步入一个前所未有的智慧互联新时代。这个时代&#xff0c;信息如潮水般涌来&#xff0c;数据成为新的石油&#xff0c;驱动着各行各业发生深刻变革。在这场变革的浪潮中&#xff0c;Vatee万腾平台以其卓越的智慧互联技术和前瞻性的战略布…

vue3前端开发-执行npm run dev提示报错怎么解决

vue3前端开发-执行npm run dev提示报错怎么解决&#xff01;今天在本地安装初始化了一个vue3的案例demo。但是当我执行npm run dev想启动它时报错了说&#xff0c;找不到dev。让我检查package.json文件是否包含dev。如下图所示&#xff1a; 实际上&#xff0c;不必惊慌&#xf…

2024全球和国内最常用的弱密码,有没有你的?

密码管理器NordPass分析了来自公开来源的超过4.3TB 的密码数据&#xff0c;找出了当前为止&#xff08;2024年&#xff09;最常用&#xff08;最脆弱&#xff09;的密码。 这些密码主要有下面这些特征&#xff1a; 简单且常用&#xff0c;万年弱密码&#xff0c;比如123456、a…

获利能力段部分特征值不更新,需要手动点派生才更新的问题

一、问题描述&#xff1a;销售订单修改某些特征值字段&#xff0c;保存后&#xff0c;获利能力段对应的字段值没更新。 比如&#xff1a;把销售订单销售组从Z09修改为Z04&#xff0c;保存后&#xff0c;获利能力段重的销售组还是旧值Z09。 1、修改销售组为Z04,然后保存 2、销售…

mac拆分pdf mac如何拆分pdf成多个文件

在数字化办公日益普及的今天&#xff0c;pdf文件因其良好的兼容性和便捷性&#xff0c;已经成为工作和学习中的重要文件格式。然而&#xff0c;有时候我们可能会遇到需要将一个大的pdf文件拆分成多个小文件的情况&#xff0c;以便于管一理和分享。本文将为您详细介绍两种简单易…

【BUG】已解决:java.lang.reflect.InvocationTargetException

已解决&#xff1a;java.lang.reflect.InvocationTargetException 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发…

[word] word如何编写公式? #微信#知识分享

word如何编写公式&#xff1f; word如何编写公式&#xff1f;Word中数学公式是经常会使用到的&#xff0c;若是要在文档中录入一些复杂的公式&#xff0c;要怎么做呢&#xff1f;接下来小编就来给大家讲一讲具体操作&#xff0c;一起看过来吧&#xff01; 方法一&#xff1a;…

【机器学习】--过采样原理及代码详解

过采样&#xff08;Oversampling&#xff09;是一个在多个领域都有应用的技术&#xff0c;其具体含义和应用方法会根据领域的不同而有所差异。以下是对过采样技术的详细解析&#xff0c;主要从机器学习和信号处理两个领域进行阐述。 一、机器学习中的过采样 在机器学习中&…

完美的用户体验:如何设计一个直观和有效的网站导航?

APP的顶部导航栏对我们来说很熟悉。导航栏是UI设计中不可或缺的一部分&#xff0c;几乎每个页面都使用导航栏。虽然导航栏看起来很简单&#xff0c;不需要太多精力&#xff0c;但是设计一个与产品需求和客户目标高度匹配的导航栏并不是那么容易的。导航栏的设计标准有很多细节需…

JavaWeb服务器-Tomcat(Tomcat概述、Tomcat的下载、安装与卸载、启动与关闭、常见的问题)

Tomcat概述 Tomcat服务器软件是一个免费的开源的web应用服务器。是Apache软件基金会的一个核心项目。由Apache&#xff0c;Sun和其他一些公司及个人共同开发而成。 由于Tomcat只支持Servlet/JSP少量JavaEE规范&#xff0c;所以是一个开源免费的轻量级Web服务器。 JavaEE规范&…

JavaScript 中怎么看数据返回值

文章目录 前言console.log()1. 输出简单的文本2. 输出变量3. 输出表达式的结果4. 输出对象和数组5. 输出多个参数6. 使用模板字符串7. 输出错误信息 alert()基本用法使用场景注意事项 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 我只知道后端程序跑…

React学习笔记02-----React基本使用

一、React简介 想实现页面的局部刷新&#xff0c;而不是整个网页的刷新。AJAXDOM可以实现局部刷新 1.特点 &#xff08;1&#xff09;虚拟DOM 开发者通过React来操作原生DOM&#xff0c;从而构建页面。 React通过虚拟DOM来实现&#xff0c;可以解决DOM的兼容性问题&#x…

跳动的爱 - 动态全屏爱心【前端版本】

要使用HTML、CSS和JavaScript绘制一个全屏且较大的爱心&#xff0c;并且让它有动态效果&#xff0c;可以通过以下步骤实现&#xff1a; HTML: 定义基本的页面结构。 CSS: 定义爱心的样式和动画效果。 JavaScript: 动态调整爱心的位置和大小&#xff0c;使其在页面上移动。 下面…

软考2024下半年考试时间是多少?哪个科目容易考?

软考2024下半年考试时间为 11月9日-12日 2024下半年软考共安排了12个资格的考试&#xff0c;具体为软考高级&#xff1a;系统分析师、系统架构设计师、网络规划设计师、系统规划与管理师&#xff1b;软考中级&#xff1a;软件设计师、网络工程师、信息安全工程师、信息系统监…

【C语言】联合体(union)

文章目录 1.联合体的含义2. 联合体的声明3. 联合体大小的计算4. 联合体的特点 1.联合体的含义 联合体也叫做共用体&#xff0c;是指联合体的所有成员共用同一块内存空间。这也就说明了&#xff0c;联合体的大小至少是其成员所占空间的最大值。 2. 联合体的声明 #include<…

Codeforces Round 675 (Div. 2) --- B. Nice Matrix (数学,模拟)

很容易想到 a i , m − j 1 a n − i 1 , m − j 1 a i , j a n − i 1 , j a_{i,m-j1} a_{n-i1,m-j1} a_{i,j} a_{n-i1,j} ai,m−j1​an−i1,m−j1​ai,j​an−i1,j​ 在本题中应该被满足。 这道题主要的难点是我们怎么找到一个数&#xff0c;让这四个数与找到的数…

学习008-01-02 Define the Data Model and Set the Initial Data(定义数据模型并设置初始数据 )

Define the Data Model and Set the Initial Data&#xff08;定义数据模型并设置初始数据 &#xff09; This topic explains how to implement entity classes for your application. It also describes the basics of automatic user interface construction based on a da…

PGCCC|【PostgreSQL】PG考证对工作上有什么好处# PG证书

认证 PostgreSQL 考证&#xff08;PostgreSQL Certification&#xff09;在工作上有以下几个好处&#xff1a; 增强专业能力&#xff1a;通过考证&#xff0c;可以系统地学习和掌握 PostgreSQL 数据库的知识和技能&#xff0c;提高自己的专业水平。 提升职业竞争力&#xff1…

Python 在Word表格中插入、删除行或列

Word文档中的表格可以用于组织和展示数据。在实际应用过程中&#xff0c;有时为了调整表格的结构或适应不同的数据展示需求&#xff0c;我们可能会需要插入、删除行或列。以下提供了几种使用Python在Word表格中插入或删除行、列的方法供参考&#xff1a; 文章目录 Python 在Wo…

【MySQL篇】Percona XtraBackup工具备份指南:常用备份命令详解与实践(第二篇,总共五篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…