Vue进阶(幺肆叁):如何用绝对定位(position:absolute)完美定位布局及其注意事项

No Silver Bullet 2020-11-13 07:25:44
vue 进阶 何用 绝对 肆叁


在《Vue进阶(幺肆贰):CSS-静态定位,相对定位,绝对定位,固定定位的用法和区别详解》一文中,讲解了CSS常用的几种定位方式。此片博文主要讲解如何应用绝对定位实现完美布局,及应用注意事项。

在布局的过程中我们经常用到绝对定位,很多初学者在一开始用绝对定位经常会达不到预期的效果,因为它们往往会忽略使用绝对定位的两个条件。

什么?使用绝对定位还要条件?

当然要啦!代码又没有脑子,没法自己思考应该定位到哪里。为了使用的时候方便,使用绝对定位的时候要满足两个条件。

在讲这两个条件的之前,我们要先提一个概念——标准流。

什么是标准流呢?

标准流(normal flow),也被称为文档流,是指在不借助任何特殊的css排列规则元素的。

排布规则

浮动和定位(absolute,fixed)会脱离脱离标准流,也就是不受这套规则的约束。

标准流其实就是一个默认的排布规则。下面介绍一下标准流元素的一些排布规则:

  1. 标准流中的块级元素(block)
  • 块级元素独占一行,垂直方向上从上往下进行排列;
  • 块级元素可设宽高;
  • 块级元素不设宽度的情况下,默认宽度为其父级的100%;
  1. 标准流中的行内元素(inline)
  • 行内元素将与其他行内元素从左到右进行排列;
  • 行内元素不可设置宽高,由其内容决定其宽高;
  1. 特殊的行内元素
  • input与img是行内元素,但是可以设置宽高;
  1. 标准流中的嵌套规则
  • 块级元素可以嵌套行内元素,反之不能
  • ul(无序列表),ol(有序列表)只能嵌套li,li可以嵌套任何元素。
  • dl(定义列表)只能嵌套dt(标题),dd(标题解释)元素。
  • textarea里只能嵌套文本;
  • p,h1~h6只能嵌套文本和行内元素;
  • select(表单控件)只能嵌套option;
  • a标签不可以嵌套交互型的标签;
  1. 外边距合并问题

标准流中上下相邻的两个元素的margin-bottom与margin-top会发生重叠的情况。

看了上面的一些排布规则,大家是不是就了解什么叫标准流啦?

举个例子,就拿float来说,没有浮动的盒子是一个标准流,而浮动的盒子是一个非标准流 ,因为float更改了它默认的排布规则。

而我们要用到的绝对定位,则是对离自己最近的那个非标准流盒子而言的。 (对一个盒子使用了浮动,相对定位,或者绝对定位,那么这个盒子就变成了一个非标准流的盒子了)

好了,接下来就该将使用绝对定位要满足的两个条件了。

当我们要使用绝对定位的时候,必须要有两个条件:

  1. 必须给父元素加定位属性,一般建议使用 position:relative(即:给父元素设为相对定位);
  2. 给子元素,加绝对定位position:absolute(给子元素设置为绝对定位); 同时加方向属性(top ,left,rigth,bottom)

为什么要满足这两个条件呢?
因为绝对定位是以父元素为基准点,进行定位。如果他没有父元素,或者它的父元素没有设置position:relative属性它就会以最近的非标准流盒子为基准点进行定位。

绝对定位会使当前元素脱离文档流,即变成了非标准流。这是什么意思呢?

其实,当它为标准流的时候,它默认在原位,当它脱离标准流的时候,他就浮动起来了,不再占据原来的位置了。

这时候你要是想定位,如果不给它的父元素设置为相对定位(即让父元素变为非标准流),或者它没有父元素,那么它就会以节点的顶部为基准定位,以他为基准定位。

如果我们满足了这两个条件,它就会以父元素为基准进行绝对定位。

这样定位的话,会省去超多麻烦。

下面来看一下具体例子:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
<style>
h3
{
position:absolute;
left:50px;
top:50px;
color:#FFF;
}
.div_test{
width:500px;
height:200px;
background-color:#000;
}
.div_test2{
width:300px;
height:100px;
float:right;
background-color:blue;
//position:relative;//相对定位
}
</style>
</head>
<body>
<div class="div_test">
<div class="div_test2">
<h3>这是一个绝对定位了的标题</h3>
</div>
</div>
</body>
</html>

上面的代码定义了一个大div,其中包含一个小div,小div中有一段用了绝对定位的话。按照我们的代码,我们是想要这段文字根据div_test2来定位的,但是运行一下,如图:

在这里插入图片描述

我们可以看到,这段文字根据节点顶部作为基准定位。这是因为它的父元素没有设置相对定位。

现在给它的父元素设置一下相对定位。

运行结果如下:
在这里插入图片描述

Biu~~~~~~~~~~~~~~~~~~~~????′éaé???è?¨??|é???gif??è?¨????è?????~~~~~~~~~~~~~~~~~~~~~~pia!

版权声明
本文为[No Silver Bullet]所创,转载请带上原文链接,感谢
https://shq5785.blog.csdn.net/article/details/108508095

  1. [front end -- JavaScript] knowledge point (IV) -- memory leakage in the project (I)
  2. This mechanism in JS
  3. Vue 3.0 source code learning 1 --- rendering process of components
  4. Learning the realization of canvas and simple drawing
  5. gin里获取http请求过来的参数
  6. vue3的新特性
  7. Get the parameters from HTTP request in gin
  8. New features of vue3
  9. vue-cli 引入腾讯地图(最新 api,rocketmq原理面试
  10. Vue 学习笔记(3,免费Java高级工程师学习资源
  11. Vue 学习笔记(2,Java编程视频教程
  12. Vue cli introduces Tencent maps (the latest API, rocketmq)
  13. Vue learning notes (3, free Java senior engineer learning resources)
  14. Vue learning notes (2, Java programming video tutorial)
  15. 【Vue】—props属性
  16. 【Vue】—创建组件
  17. [Vue] - props attribute
  18. [Vue] - create component
  19. 浅谈vue响应式原理及发布订阅模式和观察者模式
  20. On Vue responsive principle, publish subscribe mode and observer mode
  21. 浅谈vue响应式原理及发布订阅模式和观察者模式
  22. On Vue responsive principle, publish subscribe mode and observer mode
  23. Xiaobai can understand it. It only takes 4 steps to solve the problem of Vue keep alive cache component
  24. Publish, subscribe and observer of design patterns
  25. Summary of common content added in ES6 + (II)
  26. No.8 Vue element admin learning (III) vuex learning and login method analysis
  27. Write a mini webpack project construction tool
  28. Shopping cart (front-end static page preparation)
  29. Introduction to the fluent platform
  30. Webpack5 cache
  31. The difference between drop-down box select option and datalist
  32. CSS review (III)
  33. Node.js学习笔记【七】
  34. Node.js learning notes [VII]
  35. Vue Router根据后台数据加载不同的组件(思考-&gt;实现-&gt;不止于实现)
  36. Vue router loads different components according to background data (thinking - & gt; Implementation - & gt; (more than implementation)
  37. 【JQuery框架,Java编程教程视频下载
  38. [jQuery framework, Java programming tutorial video download
  39. Vue Router根据后台数据加载不同的组件(思考-&gt;实现-&gt;不止于实现)
  40. Vue router loads different components according to background data (thinking - & gt; Implementation - & gt; (more than implementation)
  41. 【Vue,阿里P8大佬亲自教你
  42. 【Vue基础知识总结 5,字节跳动算法工程师面试经验
  43. [Vue, Ali P8 teaches you personally
  44. [Vue basic knowledge summary 5. Interview experience of byte beating Algorithm Engineer
  45. 【问题记录】- 谷歌浏览器 Html生成PDF
  46. [problem record] - PDF generated by Google browser HTML
  47. 【问题记录】- 谷歌浏览器 Html生成PDF
  48. [problem record] - PDF generated by Google browser HTML
  49. 【JavaScript】查漏补缺 —数组中reduce()方法
  50. [JavaScript] leak checking and defect filling - reduce() method in array
  51. 【重识 HTML (3),350道Java面试真题分享
  52. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  53. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  54. [re recognize HTML (3) and share 350 real Java interview questions
  55. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  56. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  57. 【重识 HTML ,nginx面试题阿里
  58. 【重识 HTML (4),ELK原来这么简单
  59. [re recognize HTML, nginx interview questions]
  60. [re recognize HTML (4). Elk is so simple