文章の目录

  • 1、为什么使用定位了
  • 2、什么是定位了
  • 3、定位的构成
    • 3.1、边偏移
      • 3.1.1、top
        • 3.1.1.1、属性值
        • 3.1.1.2、注意点
      • 3.1.2、right
        • 3.1.2.1、属性值
        • 3.1.2.2、注意点
      • 3.1.3、bottom
        • 3.1.3.1、属性值
        • 3.1.3.2、注意点
      • 3.1.4、left
        • 3.1.4.1、属性值
        • 3.1.4.2、注意点
      • 3.1.5、注意点
    • 3.2、定位模式(position)
      • 3.2.1、静态定位(static)
      • 3.2.2、相对定位(relative)
      • 3.2.3、绝对定位(absolute)
      • 3.2.4、固定定位(fixed)
      • 3.2.5、粘性定位(sticky)
  • 4、子绝父相的由来
  • 5、绝对定位的盒子居中
  • 6、堆叠顺序(z-index)
  • 7、定位改变display属性
  • 写在最后

1、为什么使用定位了

我们先来看一个效果,同时思考一下用标准流或浮动能否实现类似的效果

1. 小黄色块在图片上移动,吸引用户的眼球


2. 当我们滚动窗口的时候,盒子是固定屏幕某个位置的

结论:要实现以上效果,标准流浮动都无法快速实现

2、什么是定位了

将盒子在某一个置,自由的漂浮在其他盒子(包括标准流和浮动)的上面 。

3、定位的构成

定位也是用来布局的,它有两部分组成:

定位 = 定位模式 + 边偏移

3.1、边偏移

简单说,我们定位的盒子,是通过边偏移来移动位置的。

在 CSS 中,通过 topbottomleftright 属性定义元素的边偏移:(方位名词)

3.1.1、top

top样式属性定义了定位元素的上外边距边界与其包含块上边界之间的偏移,非定位元素设置此属性无效。

3.1.1.1、属性值

  • <length>

可以是负的,正的或者 null 表示;

对于绝对定位的元素,元素下外边距边界与其包含块下边界之间的偏移。
对于相对定位定位的元素,元素的下边界离开其正常位置的偏移。

  • <percentage>

代表元素包含块的高度的百分比。

  • auto

这个关键字表示:

对于绝对定位元素,元素将忽略此属性已bottom属性为准,如果此时设置height: auto,将基于内容需要的高度设置高度;如果bottom也为auto的话,元素的垂直位置就是它假如作为静态(即static)元素时该在的位置。
对于相对定位元素,元素相对正常位置的偏移量将基于bottom属性;如果bottom也为auto的话,元素将不会有偏移。

3.1.1.2、注意点

top的效果取决于元素的position属性:

  • 当position设置为absolute或fixed时,top属性指定了定位元素上外边距边界与其包含块上边界之间的偏移。
  • 当position设置为relative时,top属性指定了元素的上边界离开其正常位置的偏移
  • 当position设置为sticky时,如果元素在viewport里面,top属性的效果和position为relative等同;如果元素在viewport外面,top属性的效果和position为fixed等同。
  • 当position设置为static时,top属性无效。

当top和bottom同时指定时,并且 height没有被指定或者指定为auto的时候,top和bottom​​​​​都会生效,在其他情况下,如果 height被限制,则top属性会优先设置,bottom属性则会被忽略。

3.1.2、right

right样式属性定义了定位元素的右外边距边界与其包含块右边界之间的偏移,非定位元素设置此属性无效。

3.1.2.1、属性值

  • <length>

可以是负的,正的或者 null 表示:

对于绝对定位的元素,元素右外边距边界与其包含块右边界之间的偏移。
对于相对定位定位的元素,元素的右边界离开其正常位置的偏移。

  • <percentage>

代表元素包含块的宽度的百分比。

  • auto

这个关键字表示:

对于绝对定位元素,元素将忽略此属性而以left属性为准,如果此时设置width:auto,将基于内容需要的宽度设置宽度;如果left也为auto的话,元素的水平位置就是它假如作为静态(即static)元素时该在的位置。
对于相对定位元素,元素相对正常位置的偏移量将基于left属性;如果left也为 auto的话,元素将不会有偏移。

3.1.2.2、注意点

right的效果取决于元素的position属性:

  1. 当position设置为absolute或fixed时,right属性指定了定位元素右外边距边界与其包含块右边界之间的偏移。
  2. 当position设置为relative时,right属性指定了元素的右边界离开其正常位置的偏移。
  3. 当position设置为sticky时,如果元素在viewport里面,right属性的效果和position为relative等同;如果元素在viewport外面,right属性的效果和position为fixed等同。
  4. 当position设置为static时,right属性无效。

当left​​​​​​和right同时指定时,元素的位置会被重复指定。当容器是从左到右时,left的值会被优先设定;当容器是从右到左时,right的值会被优先设定。

3.1.3、bottom

bottom样式属性定义了定位元素下外边距边界与其包含块下边界之间的偏移,非定位元素设置此属性无效。

3.1.3.1、属性值

  • <length>

一个负值、空值或正值,代表了:

对于绝对定位的元素,元素下外边距边界与其包含块下边界之间的偏移。
对于相对定位定位的元素,元素的下边界离开其正常位置的偏移。

  • <percentage>

包含块高度的百分比。

  • auto

规定:

对于绝对定位元素,元素将忽略此属性而以top属性为准,如果此时设置height: auto,将基于内容需要的高度设置宽度;如果top也为auto的话,元素的垂直位置就是它假如作为静态(即static)元素时该在的位置。
对于相对定位元素,元素相对正常位置的偏移量将基于top属性;如果top也为auto的话,元素将不会有偏移。

3.1.3.2、注意点

bottom的效果取决于元素的position属性:

  1. 当position设置为absolute或fixed时,bottom属性指定了定位元素下外边距边界与其包含块下边界之间的偏移。
  2. 当position设置为relative时,bottom属性指定了元素的下边界离开其正常位置的偏移。
  3. 当position设置为sticky时,如果元素在viewport里面,bottom属性的效果和position为relative等同;如果元素在viewport外面,bottom属性的效果和position为fixed等同。
  4. 当position设置为static时,bottom属性无效。

当 top和bottom同时指定时,并且 height没有被指定或者指定为auto或100%的时候,top和bottom都会生效,在其他情况下,如果 height被限制,则top属性会优先设置,bottom属性则会被忽略。

3.1.4、left

left属性定义了定位元素的左外边距边界与其包含块左边界之间的偏移,非定位元素设置此属性无效。

3.1.4.1、属性值

  • <length>

可以是负的,正的 或者 null 表示:

对于绝对定位的元素,元素左外边距边界与其包含块左边界之间的偏移。
对于相对定位定位的元素,元素的左边界离开其正常位置的偏移。

  • <percentage>

代表元素包含块的宽度的百分比。

  • auto

这个关键字表示:

对于绝对定位元素,元素将忽略此属性而以right属性为准,如果此时设置width: auto,将基于内容需要的宽度设置宽度;如果right也为auto的话,元素的水平位置就是它假如作为静态(即static)元素时该在的位置。
对于相对定位元素,元素相对正常位置的偏移量将基于right属性;如果right也为auto的话,元素将不会有偏移。

3.1.4.2、注意点

left的效果取决于元素的position属性:

  1. 当position设置为absolute或fixed时,left属性指定了定位元素左外边距边界与其包含块左边界之间的偏移。
  2. 当position设置为relative时,left属性指定了元素的左边界离开其正常位置的偏移。
  3. 当position设置为sticky时,如果元素在viewport里面,left属性的效果和position为relative等同;如果元素在viewport外面,left属性的效果和position为fixed等同。
  4. 当position设置为static时,left属性无效。

当left和right​​​​​​同时指定时,元素的位置会被重复指定。当容器是从左到右时,left的值会被优先设定;当容器是从右到左时,right的值会被优先设定。

3.1.5、注意点

注意

  1. topbottom 不要同时使用;
  2. leftright 不要同时使用。

3.2、定位模式(position)

在 CSS 中,通过 position 属性定义元素的定位模式,语法如下:

选择器 {position: 属性值;
}

定位模式是有不同分类的,在不同情况下,我们用到不同的定位模式。

3.2.1、静态定位(static)

  • 静态定位是元素的默认定位方式,无定位的意思。它相当于 border 里面的 none, 不要定位的时候用。
  • 静态定位按照标准流特性摆放位置,它没有边偏移。
  • 静态定位在布局时我们几乎不用的。

3.2.2、相对定位(relative)

  • 相对定位是元素相对于它原来在标准流中的位置来说的。(自恋型)

效果图


相对定位的特点:

  • 相对于自己原来在标准流中位置来移动的。
  • 原来在标准流的区域继续占有,后面的盒子仍然以标准流的方式对待它。

3.2.3、绝对定位(absolute)

绝对定位是元素以带有定位的父级元素来移动位置。(拼爹型)

  1. 完全脱标——完全不占位置;
  2. 父元素没有定位,则以浏览器为准定位(Document 文档)。

  1. 父元素要有定位
  • 将元素依据最近的已经定位(绝对、固定或相对定位)的父元素(祖先)进行定位。

    绝对定位的特点:

  • 绝对是以带有定位的父级元素来移动位置 (拼爹型),如果父级都没有定位,则以浏览器文档为准移动位置。

  • 不保留原来的位置,完全是脱标的。

因为绝对定位的盒子是拼爹的,所以要和父级搭配一起来使用。

定位口诀 —— 子绝父相

后面我们再讲解定位口诀的由来。

3.2.4、固定定位(fixed)

固定定位绝对定位的一种特殊形式:(认死理型)如果说绝对定位是一个矩形,那么固定定位就类似于正方形。

  1. 完全脱标——完全不占位置;
  2. 只认浏览器的可视窗口 —— 浏览器可视窗口 + 边偏移属性 来设置元素的位置;

跟父元素没有任何关系;单独使用的
不随滚动条滚动。

提示:IE6等低版本浏览器不支持固定定位。

注意:

  • 在使用固定定位时,如果盒子中没有内容,需要指定宽度

固定定位的应用场景:
固定在浏览器可视窗口某个位置的布局

3.2.5、粘性定位(sticky)

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

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

通俗来讲就是设定了top、bottom、left、right了,超过这个值为为固定定位。

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

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

应用场景:

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

示例:

  <div class="box"></div>
* {padding: 0;margin: 0;
}body {height: 2000px;
}.box {position: sticky;top: 10px;margin: 100px auto;width: 30px;height: 90px;background-color: pink;
}

4、子绝父相的由来

刚才咱们说过,绝对定位,要和带有定位的父级搭配使用,那么父级要用什么定位呢?

子绝父相 —— 子级绝对定位,父级要用相对定位。

子绝父相是使用绝对定位的口诀,要牢牢记住!

疑问:为什么在布局时,子级元素使用绝对定位时,父级元素就要用相对定位呢?

观察下图,思考一下在布局时,左右两个方向的箭头图片以及父级盒子的定位方式。



分析

  1. 方向箭头叠加在其他图片上方,应该使用绝对定位,因为绝对定位完全脱标,完全不占位置。
  2. 父级盒子应该使用相对定位,因为相对定位不脱标,后续盒子仍然以标准流的方式对待它。

如果父级盒子也使用绝对定位,会完全脱标,那么下方的广告盒子会上移,这显然不是我们想要的。

结论父级要占有位置,子级要任意摆放,这就是子绝父相的由来。

5、绝对定位的盒子居中

注意绝对定位/固定定位的盒子不能通过设置 margin: auto 设置水平居中

在使用绝对定位时要想实现水平居中,可以按照下图的方法:

  1. left: 50%;:让盒子的左侧移动到父级元素的水平中心位置
  2. margin-left: -100px;:让盒子向左移动自身宽度的一半

盒子居中定位示意图

6、堆叠顺序(z-index)

在使用定位布局时,可能会出现盒子重叠的情况

加了定位的盒子,默认后来者居上,后面的盒子会压住前面的盒子。

应用 z-index 层叠等级属性可以调整盒子的堆叠顺序。如下图所示:


z-index 的特性如下:

  1. 属性值正整数负整数0,默认值是 0,数值越大,盒子越靠上;
  2. 如果属性值相同,则按照书写顺序,后来居上
  3. 数字后面不能加单位
  4. auto:盒子不会创建一个新的本地堆叠上下文。在当前堆叠上下文中生成的盒子的堆叠层级和父级盒子相同。

注意z-index 只能应用于相对定位绝对定位固定定位的元素,其他标准流浮动静态定位无效。

7、定位改变display属性

我们已经 了解 display 是显示模式,可以改变显示模式有以下方式:

  • 可以用 inline-block 转换为行内块;
  • 可以用浮动 float 默认转换为行内块(类似,并不完全一样,因为浮动是脱标的)
  • 绝对定位和固定定位也和浮动类似, 默认转换的特性,转换为行内块。

所以说,一个行内的盒子,如果加了浮动固定定位绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等。

同时注意:

浮动元素、绝对定位(固定定位)元素的都不会触发外边距合并的问题。(我们以前是用padding border overflow解决的)

也就是说,我们给盒子改为了浮动或者定位,就不会有垂直外边距合并的问题了。

写在最后

如果你感觉文章不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果你觉得该文章有一点点用处,可以给作者点个赞;\\*^o^*//
如果你想要和作者一起进步,可以微信扫描二维码,关注前端老L~~~///(^v^)\\\~~~
谢谢各位读者们啦(^_^)∠※!!!

CSS系列之定位详解相关推荐

  1. CSS系列之浮动详解

    文章の目录 1.为什么需要浮动了 2.什么是浮动了 3.浮动有什么用了 4.浮动的基本语法 4.1.属性值的取值 4.2.浮动口诀之浮 4.3.浮动口诀之漏 4.4.浮动口诀之特 5.浮动(float ...

  2. 定位的坐标原点HTML,css固定定位_CSS绝对定位固定定位详解

    摘要 腾兴网为您分享:CSS绝对定位固定定位详解,智学网,鱼乐贝贝,优酷,瑞易生活等软件知识,以及安卓微信多开,特效视频,微贷网app,勿忘我3dm,有为学堂,火力牛,手机知网,移动小秘书,快学堂,p ...

  3. css 高度塌陷_HTML+CSS入门 HTML高度塌陷以及定位详解

    本篇教程介绍了HTML+CSS入门 HTML高度塌陷以及定位详解,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门. < 高度塌陷的含义: 父元素的高度,默认被子元素撑开,目前来讲 ...

  4. css中的position定位详解

    css中的position定位详解 position属性指定了元素的定位类型. position属性的5个值:static,relative,fixed,absolute,sticky; 元素可以使用 ...

  5. css中float详解,CSS浮动属性Float详解?史上最全Float详解

    我们在学习css样式的时候,都知道css是盒概念,并且每一个盒子都是一个元素,下面我们就对CSS浮动属性Float进行详解,让你彻底了解Float. 一:什么是Float浮动? Float浮动是css ...

  6. (图文详细)最通俗易懂的CSS 浮动float属性详解

    (图文详细)最通俗易懂的CSS 浮动float属性详解 声明:本文属于搬砖大神的文章到自己的博客上,原文地址为:https://www.cnblogs.com/iyangyuan/archive/20 ...

  7. yolov系列-yolov1-论文详解

    yolov系列-yolov1-论文详解 @[TOC](yolov系列-yolov1-论文详解) yolov1相关资料 yolov1论文详解 算法原理 yolov1优缺点 yolov1相关资料 yolo ...

  8. c语言指定变量地址,C语言中 “_at()” 特殊地址定位详解

    C语言中 "_at()" 特殊地址定位详解 在keil里面,有一个特殊地址定位的指令,就是将一个变量或常量定位到一个指定的地址上面 指令为 __at ,使用方法如下 int var ...

  9. CSS相对定位和绝对定位详解

    CSS相对定位和绝对定位详解 如果,说浮动, 关键在一个 "浮" 字上面, 那么 我们的定位,关键在于一个 "位" 上. PS: 定位是我们CSS算是数一数二难 ...

最新文章

  1. 用ajax进行部门的验证,ajax用$.post方式进行用户名校验
  2. html右侧浮动栏随着滚动,jQuery实现div浮动层跟随页面滚动效果
  3. 315MHz 高频射频发射模块
  4. 关于过往与未来的思考
  5. Android 体系结构和应用程序组成
  6. chrome 插件开发心得
  7. 【有三说图像】边缘检测(上)
  8. Python极简入门:数据类型、条件语句、循环语句、异常处理
  9. Ant Design Pro入门之简介
  10. Java对象序列化的本机C / C ++类似性能
  11. Linux中文档去掉windows文本的多余的回车符(^M)
  12. Android的ELF文件重定位详解,包括64位
  13. Spring : Spring 事务控制 设置手动回滚 TransactionAspectSupport
  14. Windows下Node.js安装及环境配置
  15. 用python数据分析来解密新经济(IT桔子)死亡公司的内幕
  16. mysql查询编辑器_navicat怎么进入查询编辑器
  17. cocos2dx掼蛋_cocos2d/x 自带字体(label)
  18. sum与countif、countifs函数套用
  19. 如何正确的设置使用代理IP?
  20. OpenGL 法线贴图Normal Mapping

热门文章

  1. 汽车车身排程和管理软件的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  2. 【JavaWeb】什么是前后台分离?
  3. 英特尔发布31.0.101.3430和31.0.101.2111新驱动
  4. 数据库实现电商管理系统
  5. vue3.0 请求拦截对Token处理,导航守卫判断是否登录,响应拦截,觖析token存储到vuex中
  6. MATLAB光栅的相移矩阵,(最新整理)基于MATLAB的相移光纤光栅反射谱仿真
  7. 【报错】Duplicate entry '0' for key 'PRIMARY'
  8. git 添加源地址和查看源地址
  9. 旁路(输入)和去耦(电源和输出)
  10. python列表追加的三种方式对比