别再去记什么“子绝父相”了

简介: 子绝父相只是因为经常会这么用所以才有人把它总结为这几个字的,但并不是只能这样用,就算是:子绝父绝,子绝父固定都是可以的,absolute 的 left、right、top、bottom 这几个定位的属性参照对象是最邻近的定位祖先元素,所以只要我们要相对与哪个祖先来定位只要将祖先设置为定位元素就行,至于是哪种就得看你的实际需求了,当希望子元素相对于父元素进行定位,又不希望父元素脱标的时候,我们才会会用到子绝父相。

image.png


Xxx,这里咋回事啊,为啥我整了半天也没搞出来,快来教教我。就搞出这图这样的,要求不能通过具体的像素定位。


image.png


这不就是个定位吗?应该没啥大问题吧,你哪不会啊?


就老师讲的那个子绝父相啊,不是要给子元素相对于父元素定位吗,然我就把红的设为相对定位啊,但是绿色设为绝对定位就可以让它相对红色定位了啊,但是调蓝色的时候绿色已经设置为绝对定位了,我就不能再把它设置为相对定位了,那我咋整啊!


不能再把绿色设为相对定位就别设呗,直接摆烂,嘻嘻~


我靠,你咋回事啊,会不会啊你在这扯


image.png


你试试再说,不行你今天晚上把我赶出寝室


好,我试试。呀,行了行了。快快快,告诉我咋回事呀这。


image.png


唉你不该记这么死的,我们学习应该多了解一点相关的重要细节才能灵活的运用,只记一个子绝父相肯定不行呀。我来给你好好讲讲吧:


子绝父相只是因为经常会这么用所以才有人把它总结为这几个字的,但并不是只能这样用,就算是:子绝父绝,子绝父固定都是可以的,absolute 的 left、right、top、bottom 这几个定位的属性参照对象是最邻近的定位祖先元素,所以只要我们要相对与哪个祖先来定位只要将祖先设置为定位元素就行,至于是哪种就得看你的实际需求了,当希望子元素相对于父元素进行定位,又不希望父元素脱标的时候,我们才会会用到子绝父相。


噢,原来如此,我悟了。扶我起来,我还能肝!


啥,你悟了?那我再问你几个问题,看你会不会。你知道啥事时候用相对定位 relative 吗?


哈,就这么简单的问题你也太看不起我了吧。我们一般会在要对某些元素进行微调的时候使用 relative,就比一些网站中的小图标,有时候在标准流下放好时位置如果感觉还差那么点,需要微微的调整会更好看,那就用relative。


居然能答上来,看来没完全白学呀。


还有!还有!我还没说完呢。position: relative; 是不会脱离标准流的,设置后再定位的话还会占用空间,并且占用的是原来位置的空间。


哟,挺不错的嘛,那我就来点难一点的吧。说说将 position 设置为absolute/fixed 后元素会有啥变化吧。


脱离标准流呗……


还有呢?


额,这个嘛……


image.png


没事,我来告诉你:


1. 元素不再严格区分块级(block)、行内级(inline),行内块级(inline-block),若元素未设置宽度高度,那么元素的宽高将完全由内容决定,看个例子就明白了:

未设置前:


image.png


image.png


2. 不再给父元素汇报自身宽高,若父元素没有设置宽高,将不能撑起父元素,举个例子:


设置前:


image.png


设置后:


image.png


3. 即使原来是行内级元素也可以随意设置宽度高度,直接看例子加深理解


image.png


啊啊啊,这么多啊,卧槽卧槽,不过没关系,对我这菜鸟来说简直全是干货啊。还有吗还有吗,快给我继续叨叨……


那我再问你最后一个,对于绝对定位的元素,我们怎么让它在父元素里水平居中呢?


在父元素里居中,嗯……我想想,给它设置 text-align: center; 吗?


不行哦,还有一点你不对的地方就是,text-align: center; 是给父元素设置的,使得父元素设置之后,它里面的行内级元素居中


奥,这样啊,那是 margin: 0 auto; ?


哈哈哈,还是不行,要是真这么简单我还问你?让我告诉你,首先我们需要知道:


对于绝对定位元素来说


  • 定位参照对象的宽度 = left + right + margin-left + margin-right + 绝对定位元素的实际占用宽度
  • 定位参照对象的高度 = top + bottom + margin-top + margin-bottom + 绝对定位元素的实际占用高度


我们原来设置 margin: 0 auto; 时是让 margin-left = margin-right,从而使得元素两边空的位置相等而达到居中效果,那我们这里的区别是什么呢?只是多了个 left 和 right 而已,那么我们把他们全设置为0的话是不是就能达到我们想要的效果呢?没错,就是这样的。接下来让我们看代码:


image.png


哈哈,我又悟了,这就去试一试,冲呀!


image.png


写在最后:


这是第一次这么写文章,之前就见过类似这样对话式构建一个场景来讲知识的,感觉这样的文章有点循循善诱能更让人想读下去效果。所以自己也来试一下把自己学的东西分享一下,结果一写就接近三小时(毕竟自导自演也不容易啊),讲的知识可能对于大佬来说相对简单,但对于新手或者CSS基础学的不是太好的朋友肯定都是有用的,所以希望如果大佬不喜欢的话轻喷

目录
相关文章
|
3月前
|
人工智能 自然语言处理 物联网
魔搭社区模型速递(7.6-7.12)
🙋魔搭ModelScope本期社区进展:1481个模型,324个数据集,528个创新应用, 7 篇内容
173 0
|
前端开发
解决VScode在保存less文件时,自动生成对应的css文件以及安装Easy less之后,计算式子不显示结果的问题
解决VScode在保存less文件时,自动生成对应的css文件以及安装Easy less之后,计算式子不显示结果的问题
|
SQL 机器学习/深度学习 XML
mybatis-plus分页查询详解
mybatis-plus分页查询详解
10561 0
mybatis-plus分页查询详解
|
人工智能 JavaScript 开发工具
【完全免费】VS Code 最好用的 12 款 AI 代码提示插件!!!
🎉 探索12款免费VSCode AI代码提示插件:Codeium、Codegeex、CodeFuse、TONGYI Lingma、Comate、iFlyCode、Fitten Code、Bito AI、Mintlify Doc Writer、Kodezi AI、aiXcoder、IntelliCode。这些插件提供智能补全、代码生成、注释、优化,支持多种语言,提升编程效率!🚀👩‍💻👨‍💻
16633 0
|
12月前
|
存储 数据挖掘 API
购物平台数据抓取实战指南:从API到深度分析
本指南介绍如何通过API接口抓取淘宝、京东、拼多多等电商平台的数据,涵盖API选择、注册配置、数据抓取与处理、深度分析等内容,帮助企业和开发者挖掘数据价值,支持市场分析和决策制定。
|
Android开发
解决E/RecyclerView: No layout manager attached; skipping layout
解决E/RecyclerView: No layout manager attached; skipping layout
495 1
|
存储 缓存 安全
操作系统(14)----文件系统的结构
操作系统(14)----文件系统的结构
311 1
|
监控 测试技术 持续交付
Python 3.x与Python 2.x:不兼容性的深度解析
Python 3.x与Python 2.x之间的不兼容性是一个复杂而重要的问题。尽管迁移可能会带来一些挑战和困难,但考虑到Python 2.x已经停止支持以及Python 3.x带来的诸多改进和优势,迁移是不可避免的。通过了解变化、使用兼容工具、逐步迁移、利用社区资源、编写测试、保持更新、考虑使用Python 3.x的特定功能、重新评估第三方库和框架、备份和版本控制以及测试和部署等策略,你可以成功地将你的代码从Python 2.x迁移到Python 3.x,并享受Python 3.x带来的新功能和改进.
1406 5
|
JSON Linux 数据格式
在宝塔Linux中安装Docker
在宝塔Linux中安装Docker
954 0
|
测试技术 Linux API
超详细Postman下载安装与使用汉化版教程
Postman 是一款常用的 API 测试工具,可以方便地进行接口测试、调试和文档编写。本文将详细介绍如何下载安装 Postman 并汉化,包括每个步骤的详细说明。
超详细Postman下载安装与使用汉化版教程