首页 web前端 html教程 辨析relative与absolute_html/css_WEB-ITnose

辨析relative与absolute_html/css_WEB-ITnose

Jun 24, 2016 am 11:25 AM

谈起它们,想必大家都不陌生。relative,相对定位嘛;absolute,绝对定位嘛。但是它们到底是个啥东东呢?

看看w3c的定义,见下表

定位

含义

relative

元素框偏移某个距离。元素仍保持其未定位前的形状,它原本所占的空间仍保留。

absolute

元素框从文档流完全删除,并相对于其包含块定位。包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。

我靠,说了这一啪啦,好像有点模糊啊。

不用怕,团结就是力量,让我们一起,一步一步来解析它们吧。

一、relative

针对上面w3c对relative的定义,我们首先来写个demo。

<!DOCTYPE html>    <head>        <title>ttt</title>        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>        <style>                * {                margin:0;                padding:0;            }            .ourRelative {                border:1px solid #FF0000;                position:relative;                left:-10px;            }            </style>    </head>    <body>        I'm <span class="ourRelative">relative</span>,I'm over!    </body></html>
登录后复制

效果图如下:

结合代码,不知道大家发没发现我将”relative”通过设置它的定位后,向左移动了10像素,但是呢?它居然右边空出来的空间,没有被右边的” ,I’m over! ”挤过来。说明什么?

1、 相对定位后的元素仍然是在普通流中的;

2、 相对定位后的元素通过left,right,top, bottom属性,相对它原有的位置,进行相对偏移的;

3、 相对定位后的元素发生偏移后,它原来所占的空间仍然保留。

在上述代码中,不知道大家注意没有,我用的是这个元素包裹文本‘relative’的哦,乃行内元素,那有说明什么了呢?

猜测:position:relative不会改变元素的display。

是不是这样,我们在写个demo就湿了。

<!DOCTYPE html>    <head>        <title>ttt</title>        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>        <style>                * {                margin:0;                padding:0;            }            .ourRelative {                /*将宽高设置为100px*/                width:100px;                height:100px;                border:1px solid #FF0000;                position:relative;                left:-10px;            }            </style>    </head>    <body>        I'm <span class="ourRelative">relative</span>,I'm over!    </body></html>
登录后复制

我将上述代码中添加了span元素的宽高,但是表现出来的还是行内元素的效果。

不服?

我再将上述代码改改,将span的display改成了inline-block,宽高任然设置为100像素,那么它表现出来的,也就是这样咯。

<!DOCTYPE html>    <head>        <title>ttt</title>        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>        <style>                * {                margin:0;                padding:0;            }            .ourRelative {                /*将元素的span变为inline-block*/                display:inline-block;                width:100px;                height:100px;                border:1px solid #FF0000;                position:relative;                left:-10px;            }            </style>    </head>    <body>        I'm <span class="ourRelative">relative</span>,I'm over!    </body></html>
登录后复制

说明position:relative是不会改变元素的display的哦。

二、absolute

针对上面w3c对absolute的定义,我们也来写个demo。不过就是将图一中的改为绝对定位,position:absolute。

<!DOCTYPE html>    <head>        <title>ttt</title>        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>        <style>                * {                margin:0;                padding:0;            }            .ourRelative {                border:1px solid #FF0000;                /*将position改为absolute*/                position:absolute;                left:-10px;            }            </style>    </head>    <body>        I'm <span class="ourRelative">relative</span>,I'm over!    </body></html>
登录后复制

我靠,这是什么玩意。怎么会这样。稳住,我们拿标尺量一量,看看发生了什么。见下图:

图一

图二

图一为整个span元素的宽度,可以看出是80像素;图二为绝对定位后的裸露在页面的span元素的宽度,可以看出是70像素。

所以绝对定位,在这里是按着body的左上角进行的定位。

Why?

因为绝对定位是使用left,right,top, bottom属性相对于其最接近的一个最有定位设置的父级对象进行绝对定位,如果对象的父级没有设置定位属性,即还是遵循HTML定位规则的,则依据 body 对象左上角作为参考进行定位。

在这里因为就一个span元素嘛,它的父级元素就是body咯。所以才会呈现出这图案咯。

而且正如w3c所说的那样,绝对定位是脱离文档流的,所以绝对定位元素的右边文本” ,I’m over! ”就会当它不在了,占用它的位置。

咦,相对定位不会改变元素的display,那么绝对定位呢?

绝对定位是会改变元素的display的哦。将其统一变成block,块级元素的模式。

不信?那么我们一起将上述绝对定位的代码改进改进,给 span元素宽高各设100像素。

<!DOCTYPE html>    <head>        <title>ttt</title>        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>        <style>                * {                margin:0;                padding:0;            }            .ourRelative {                border:1px solid #FF0000;                /*将position改为absolute*/                position:absolute;                /*为absolute添加width和height*/                width:100px;                height:100px;                left:-10px;            }            </style>    </head>    <body>        I'm <span class="ourRelative">relative</span>,I'm over!    </body></html>
登录后复制

效果图见下:

我靠,看来绝对定位是比较屌,直接改变了元素的display,将其统一变为了block。

小节:

1、 绝对定位后的元素,脱离了文档流了,原来所占的空间也随之不在;

2、 绝对定位后的元素,通过left,right,top, bottom属性,相对于其最接近的一个最有定位设置的父级对象进行绝对定位,如果对象的父级没有设置定位属性,即还是遵循HTML定位规则的,则依据 body 对象左上角作为参考进行定位;

3、 绝对定位后的元素,将改变元素的display为block。

另:

不管将元素设置为相对定位还是绝对定位,它们都将覆盖住其他的元素内容,什么意思呢?

以position:absolute为例

<!DOCTYPE html>    <head>        <title>ttt</title>        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>        <style>                * {                margin:0;                padding:0;            }            .normal {                width:100px;                height:100px;                background:#FFC0CB;            }            .ourAbsolute {                width:70px;                height:70px;                position:absolute;                background:#008000;                left:0;                top:0;            }            </style>    </head>    <body>        <div class="normal"></div>        <div class="ourAbsolute"></div>    </body></html>
登录后复制

 

请见下图

我将绿色框设置的是绝对定位且top、left皆为0,那么它以body为起点,将覆盖粉红色的框。如果我想让粉红色的框,覆盖住绝对定位的绿色框呢?很简单,将绝对定位的z-index设置为0就欧克啦。

相对定位请自行修改代码,测试哦。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

&gt; gt;的目的是什么 元素? &gt; gt;的目的是什么 元素? Mar 21, 2025 pm 12:34 PM

本文讨论了HTML&lt; Progress&gt;元素,其目的,样式和与&lt; meter&gt;元素。主要重点是使用&lt; progress&gt;为了完成任务和LT;仪表&gt;对于stati

HTML5中跨浏览器兼容性的最佳实践是什么? HTML5中跨浏览器兼容性的最佳实践是什么? Mar 17, 2025 pm 12:20 PM

文章讨论了确保HTML5跨浏览器兼容性的最佳实践,重点是特征检测,进行性增强和测试方法。

&lt; datalist&gt;的目的是什么。 元素? &lt; datalist&gt;的目的是什么。 元素? Mar 21, 2025 pm 12:33 PM

本文讨论了html&lt; datalist&gt;元素,通过提供自动完整建议,改善用户体验并减少错误来增强表格。Character计数:159

如何使用HTML5表单验证属性来验证用户输入? 如何使用HTML5表单验证属性来验证用户输入? Mar 17, 2025 pm 12:27 PM

本文讨论了使用HTML5表单验证属性,例如必需的,图案,最小,最大和长度限制,以直接在浏览器中验证用户输入。

&lt; meter&gt;的目的是什么。 元素? &lt; meter&gt;的目的是什么。 元素? Mar 21, 2025 pm 12:35 PM

本文讨论了HTML&lt; meter&gt;元素,用于在一个范围内显示标量或分数值及其在Web开发中的常见应用。它区分了&lt; meter&gt;从&lt; progress&gt;和前

视口元标签是什么?为什么对响应式设计很重要? 视口元标签是什么?为什么对响应式设计很重要? Mar 20, 2025 pm 05:56 PM

本文讨论了视口元标签,这对于移动设备上的响应式Web设计至关重要。它解释了如何正确使用确保最佳的内容缩放和用户交互,而滥用可能会导致设计和可访问性问题。

&lt; iframe&gt;的目的是什么。 标签?使用时的安全考虑是什么? &lt; iframe&gt;的目的是什么。 标签?使用时的安全考虑是什么? Mar 20, 2025 pm 06:05 PM

本文讨论了&lt; iframe&gt;将外部内容嵌入网页,其常见用途,安全风险以及诸如对象标签和API等替代方案的目的。

HTML容易为初学者学习吗? HTML容易为初学者学习吗? Apr 07, 2025 am 12:11 AM

HTML适合初学者学习,因为它简单易学且能快速看到成果。1)HTML的学习曲线平缓,易于上手。2)只需掌握基本标签即可开始创建网页。3)灵活性高,可与CSS和JavaScript结合使用。4)丰富的学习资源和现代工具支持学习过程。

See all articles