13.定位属性

主要的布局方式有三种,标准,浮动,定位。使用定位,我们可以随意将元素放到指定位置

  • 浮动与定位是不冲突的,我们可以两种结合使用

像百度的这个导航栏我们就可以使用定位布局

无论我如何滚动右侧的滚动条,导航栏的位置总是不变的

定位有两个部分构成,分别是定位模式与边偏移

我们先说定位模式,定位模式通过position属性设置,有五种不同的模式

  • static 静态定位,这个是默认值,静态定位就是标准流
  • relative 相对定位
  • absolute 绝对定位
  • fixed 固定定位
  • sticky 粘性定位

边偏移是在定位模式下的偏移量,有top,bottom,left与right四个属性,后面跟像素值或百分比,像素值可以为负值

  • top 与父元素上边线的距离
  • bottom 与父元素下边线的距离
  • left 与父元素左边线的距离
  • right 与父元素右边线的距离

我们只给一组值,比如左上,左下,右上,右下,这四组给一个,因为既给上值又给下值是没有意义的

如果最终还是给了相对的两个值,左右中会取左使用,上下中会取上使用

目录

1 静态定位 static

2  相对定位 relative

3  绝对定位 absolute

3.1  父对象为整体页面

3.2  父对象为定位元素

3.3  爷对象为定位元素

3.4  绝对定位元素水平垂直居中

3.4.1  水平居中

3.4.2  垂直居中

4  子绝父相

5  固定定位 fixed

5.1  固定定位在版心附近

6  粘性定位 sticky

7  小结

8  叠放次序 z-index

9  定位的特殊属性

9.1  行内元素设置绝对或固定定位,可以直接设置宽度与高度

9.2  块元素设置绝对或固定定位,不给宽度与高度,默认大小是内容的大小

9.3  定位模式下,上层的元素会压住下层元素的所有内容


1 静态定位 static

静态定位是标准流,所以后续设置的偏移量也是没有作用的

它的效果还是这样

2  相对定位 relative

相对对位是相对自身原来的距离进行移动,我们试一下

它原来的位置大致是在红框子的位置上,现在它是下面绿的那个盒子,他们的距离是设置的top值500px

我们也可以从上面看出,相对定位是保留元素原来的位置的

相对定位主要作用是限制绝对定位的,我们管这个作用叫子绝父相,我们说完绝对定位后再说这个事儿

3  绝对定位 absolute

绝对定位的移动是相对于已定位的(static不算已定位)父对象移动的,如果没有已定位的元素当作父对象,那它的父对象就是整体页面(body)

3.1  父对象为整体页面

我们现在没对他进行设置父元素,所以这里的500px是它的上边沿和页面的上边沿的距离

我们可以看到,使用了绝对定位,盒子原先的位置会被顶掉

3.2  父对象为定位元素

我们这里加了第三个盒子,给第二个盒子加了定位模式但并未移动

它的效果是这样的

偏移量150,本身50,正好卡到父对象的右边

我们现在给父对象的定位模式换成static,为了更严谨我们可以再给一个top

它就变成这样了,如果它以橘色盒子作为父对象,它应该正好卡在边缘,现在明显不在边缘。它现在是以页面作为父对象的

我们现在把static与top去掉

发现效果与刚刚一样

3.3  爷对象为定位元素

子元素的移动会以最近的已定位父对象做参考。

如果爷对象是定位元素,父对象不是,那它是以爷对象为参考。如果父对象与爷对象都是定位元素,那它是以父对象做参考。我们做个例子

现在它是这样的

现在我们给爷对象一个定位模式,然后绝对定位子对象,给子对象left 0px,如果它是以父对象做参考,它就会卡在父对象的左边,如果它以爷对象左参考,它就会卡在爷对象的左边

我们发现它贴在了爷对象的边上,所以是以爷对象为参考的

我们再看爷对象与父对象都为定位元素的情况

发现他是以父对象为参考的

3.4  绝对定位元素水平垂直居中

3.4.1  水平居中

在默认情况下绝对定位的元素使用margin:0 auto;是不会水平居中的

这里我们需要给他算一下,我们先让其走到父对象宽度的50%处,然后向左边走被设置盒子宽度的一半

这样它就能水平居中了

无论页面比例如何,它都可以水平居中

3.4.2  垂直居中

垂直居中与水平居中原理一样,先走到父对象高度的50%,之后再往回走自己一半的高度

这样就能垂直居中了,怎样改变页面比例,它都会垂直居中

4  子绝父相

子绝父相的意思是子元素用绝对定位,父元素用相对定位

如果使用嵌套的盒子,子绝父相是最常用的,绝对定位不会占用父元素的位置,所以可以任意摆,父元素本身是要在页面中卡一个位置的,所以我们要用相对定位

子绝父相只是最常用的,但并不是用别的不对,我们要视情况而定。这个口诀存在的意义是,子对象不知道给什么的时候就给绝对定位,父对象不知道给什么的时候就给相对定位,能解决大多数情况的问题

我们看百度百科上的一个例子

像这种轮播图,它使用的方式就是父元素为相对定位,子元素为绝对定位

我们下面做一个轮播图的样子出来

  • 动态效果需要用JS做

我们将其搞成这个样子

首先我们给结构先搞出来

  • 写的时候最好一个一个弄,我这是弄完了之后截的图

之后我们加入css

关于下面的点儿,我们一般是用js搞,js可以让这个点被点的时候改变为selected这个类,那样自然颜色就可以变过来了

5  固定定位 fixed

我们开头说的百度导航栏就可以使用定位来做

我们做个例子

  • 给body设置大的高度,在没有多的内容的时候可以撑开页面

现在我无论怎么移动滚动条,div的位置依然在原地

我们现在给它两个偏移量

它的偏移量参考的可视窗口的四边

可视的意思是,无论窗口有多小,它总以可视的四个点定位

固定定位和父元素没有关系,你给它父元素它依然以可视区域为参考

固定定位不占有原来的位置,可以理解为它自己处于一个新的图层

5.1  固定定位在版心附近

大多数网页会有一个版心的存在,版心就是我下面青色的部分

我现在的代码是这样的

我们现在将一个盒子固定在版心周围

这样我们就遇到一个问题,当我们进行页面缩放的时候,盒子就不在我们想要的位置了

为了解决这个问题,我们要改一下固定定位的定位方法,我们观察一下,发现高度没有问题,有问题的是与左侧的距离

所以我们要改变左侧距离的算法,我们首先将盒子定位到中央(left:50%),然后设置定位盒子的左外边距为版心宽度的一半

这样无论怎么调整浏览器,盒子总是能固定在版心附近

6  粘性定位 sticky

粘性定位相当于相对定位与固定定位的混合,它能达到这样一个效果,我们看京东官网的这里,当我们打开的时候,这个元素是这样的

当我们滚动到一定程度时,它会出现全貌

当我们继续滚动时,它依然跟着滚动条来走

我们从上面可以发现两个特点

  • 元素以可视串口为参照移动(固定定位特点)
  • 元素占有原来的位置(相对定位特点)

我们要以margin定义初始位置,然后使用top等位置值定义移动的位置

下面我们做个例子

  • 这里我们至少要加top,left,right,bottom的其中一个,粘性定位才会生效

当我们打开后是这样的

当我们滚动一部分,它会逐渐露出全貌

当我们滚动到底,它会露出所有内容

由于我令其为青色盒子的子盒子,所以改变比例也不会影响它的位置

这种定位目前兼容性很差,能不用我们以后最好不用,像刚刚京东的那个右侧盒子,也不是通过粘性定位做的

7  小结

  • 脱标的盒子是不会出现外边距塌陷问题的

8  叠放次序 z-index

我们可以使用z-index来决定定位的叠放次序

默认是auto,它可以使用正整数与负整数,数值越大就越靠上

我们做一个例子,默认情况下aboslute定位的盒子会在relative定位的盒子之上

我们现在对其设置 z-index

这样我们发现relative就再absolute之上了

auto在z-index中是最小的,我们任意设置一个值都在auto之上

只有设置定位后z-index才会生效

如果所有属性都相同,在最后写的元素会被放到最上面

9  定位的特殊属性

9.1  行内元素设置绝对或固定定位,可以直接设置宽度与高度

9.2  块元素设置绝对或固定定位,不给宽度与高度,默认大小是内容的大小

9.3  定位模式下,上层的元素会压住下层元素的所有内容

我们之前在浮动中说过

我们现在来看定位模式

发现文字也被压住了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suyuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值