css定位

一,position属性

1.position属性用于页面元素的定位,是很经常被使用的布局属性。

2.position属性有5种定位方式

(1)静态定位:static (默认行为)
(2)相对定位:relative没有脱离文档流
(3)绝对定位:absolute(脱离文档流)
(4)固定定位:fixed(脱离文档流)
(5)粘性定位:sticky

3.relativeabsolutefixed这三个定位方式有一个共同点,都是相对于某个基点的定位,但是三者的基点都不一样。

二,静态定位

1.静态定位static不脱离文档流,元素处于原本的位置,可以说是元素的默认属性。

二,相对定位relative

1.元素相对定位relative的基点是元素原本应该在的位置(即static定位时的位置)。

2.我们使用toprightbottomleft, 来控制偏移的位置

3.注意,relative定位方式没有脱离文档流,

#box_relative {
  position: relative;
  left: 30px;
  top: 20px;  //元素在原本的位置上向右移动30px,向下移动20px,
}

三,绝对定位absolute

1.元素绝对定位absolute的基点是第一个非static定位的祖先元素或根元素。

2.同样我们使用top right bottom left 来控制偏移的位置。当没有设置这些值时,元素默认会被定位到元素没有脱离文档流时候的位置。

3.absolute定位的元素是脱离文档流的,我们使用z-index来控制层级,z-index的数值基于基点递增或递减。
在这里插入图片描述

4.由于层级的关系,被点位到同一位置的元素会产生覆盖的效果,是否产生覆盖的判断标准是基于基点来计算出全局的z-index不能简单的使用当前用z-index大小来判断,举几个例子。

(1)当两个元素的基点相同,却被定位到同一位置,那么z-index高的会覆盖z-index低的。

(2)当一个绝对定位元素的z-index:100,其有一个绝对定位的子元素,基点为该父元素,那么即使其z-index:1也不会被父元素覆盖,因为基点的关系,从全局看该子元素的实际为z-index:101

(3)当一个绝对定位元素的z-index:-10,其有一个绝对定位的子元素,基点为该父元素,那么即使其z-index:5也不会显示出来,因为即使z-index:5,但是根据基点,实际处于的位置是z-index:-5

#box_relative {
  position: absolute;
  left: 30px;
  top: 20px;  //元素相对(父元素)向右移动30px,向下移动20px,
}

5.总之,把握两个关键点, 基点 + 实际的z-index

四,固定定位fixed

1.元素固定定位fixed的基点是浏览器窗口,且元素是固定的不会移动。

2.同样我们使用top right bottom left 来控制偏移的位置。使用z-index来控制层级。

五,粘性定位sticky

1.sticky跟前面四个属性值都不一样,它会产生动态效果,很像relativefixed的结合

2.sticky生效的前提是,必须至少搭配topbottomleftright这四个属性其中一个一起使用,不能省略,否则等同于relative定位,不产生"动态固定"的效果。这四个属性用来定义"偏移距离",浏览器把它当作sticky的生效门槛。

3.作用原理:当页面滚动,父元素开始脱离视口时(即部分不可见),只要与sticky定位的元素距离达到生效门槛,relative定位自动切换为fixed定位;等到父元素完全脱离视口时(即完全不可见),fixed定位自动切换回relative定位。

#toolbar {
  position: -webkit-sticky; /* safari 浏览器 */
  position: sticky; /* 其他浏览器 */
  top: 20px;
}

六,占满剩余屏幕

1.有时候在开发的时候需要某个元素占满剩余元素,且要元素内容在超出大小的时候出现滚动条。

2.一种方法是通过计算使用calc(100% - xxpx)来声明高度,但这种方法需要明确需要减去多少像素,有时候是无法确定的。

3.这时候就可以使用绝对定位,不声明宽高,使用bottom,top等属性来撑满剩余屏幕高度即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值