深入浅出CSS(三):隐藏BOSS大盘点之默认属性小总结
写在前面
严重警告,本文包含大量文字,且无配图,请做好充分心理准备后,再进行阅读!
严重警告,本文包含大量文字,且无配图,请做好充分心理准备后,再进行阅读!
严重警告,本文包含大量文字,且无配图,请做好充分心理准备后,再进行阅读!
序言
HTML+CSS作为前端入门语言,其使用难度并不大,但其复杂度并不低。想学会HTML+CSS不难,想写好就很难了。君不见,达到同样的页面效果,有人div、float、position等等齐上阵,洋洋洒洒上千行的代码。有人header、footer、flex,几百行就可以搞定。其区别就在于结构的设计,以及CSS属性之间的关联,还有最重要的,就是默认的属性的应用。玩过游戏的人都知道,隐藏的剧情或者BOSS往往在难度上要高于主线剧情。但发现隐藏BOSS,打倒隐藏BOSS这个过程的成就感,以及隐藏BOSS的奖励之吸引人,都让人无法抵挡其诱惑。HTML以及CSS的默认属性,就像隐藏BOSS一样,了解它们,掌握它们,运用它们,可以大大提高代码质量以及工作效率。
---------------------------------正文开始---------------------------------
隐藏BOSS一:百分比(%)声明的计算
在进行元素的宽高、或者margin、padding、position、translate等设置时,通常我们声明一个固定值,但在自适应,或者盒模型水平、垂直居中时,多少会用到百分比(%)声明。这时候,就会出现想象中的效果 VS 实际效果的差别。
那么,了解百分比(%)声明的计算方式,就必不可少,下面针对常用的百分比(%)声明,我将进行一个简单的小总结:
- width、height:默认以父元素的width、height按百分比(%)计算。
需要注意的地方有3点:
1、父元素为inline属性时,子元素百分比(%)声明后,因为inline元素width、height的无效。子元素的百分比(%)声明将跳过父元素,继续向上需要
符合条件的计算基数。所以在inline元素内嵌套block或inline-block时,记得给inline元素display改变属性;
2、子元素设置了position:absolute;后,百分比(%)声明将根据设置了position:relative;或position:absolute;的父元素或更上级的元素为基数计算;
3、父元素中只有一个子元素,且父元素为inline-block,width、height均为auto时,百分比(%)声明无效;
- margin、padding:不论是margin-left还是margin-top,默认都以父元素的widh按百分比(%)计算。(在确定宽度计算基数的方式上,与width百分比(%)的
计算基数确定方法一致)。
- position:position分两种情况,relative和absolute。
1、relative:relative由于未脱离文档流,所以width、height、margin、padding,都是按照正常逻辑计算的。而top、right、bottom、left,
则是按照对应的width、height,按照父元素的值为基数进行计算;例如:top:50%;right:50%;,则是根据父元素的width与height,
计算出结果——top:height * 50%;right:width * 50%;结合margin的计算方式,当我们通过relative方法想让一个盒模型水平居中时,
left:50%;再margin-left:50%;是在原地不动的,就是这个道理。所以要用translative或者给一个固定的margin-left值才可以;
2、absoulte:在计算方式上,absolute与relative并无区别,两者的区别就在于absolute脱离文档流后,计算基数的寻找不再是遵循父元素原则,
而是以position:relative;的上级元素为计算基数。
理解起来的话,absolute就是个拜金女,上边的大佬谁有relative,谁就是她干爹;当然了,拜金女的精力也不是无限的,所以干爹也只能有一个,
也就是离她最近的那个,近水楼台先得月嘛~
- translate:默认以自身的width、height按百分比(%)计算。(结合position,实现不定宽或不定高元素,水平或垂直居中的关键属性)
- background-position:这个解释起来几句话说不清楚,请阅读我之前的文章《深入浅出CSS:关于雪碧图、background-position与steps函数的三角恋情》进行理解
隐藏BOSS二:float的隐性改变元素属性以及BFC的形成
float是我们常用的将元素居左或居右的方法,同时,float之后进行元素间的对齐也是常常需要解决的问题。那么就必须知道float之后,元素本身的哪些属性被默认改变了。
经过我个人的实践观察,主要影响为4点:
- 元素属性的改变:float会隐性改变元素的属性为display:inline-block;这也是为什么inline元素float之后,不需要属性声明,就可以直接设置width、height等;
- 改变元素vertical-align:top:float后的元素会自动顶端对齐。相比于display: inline-block;令元素一行排列后,元素基线对齐的不良影响,以及修正对齐方式的繁琐。
vertical-align:top;显然在操作及显示上优势更加明显;
- 清除HTML换行符的影响:float之后,元素间由于换行符产生的间隔将清除。在display:inline-block;将元素一行排列时,受HTML书写时换行产生的换行符影响,每个
元素间会产生一段间隔。要消清除这段间隔,可以设置父元素font-size: 0; 或在HTML结构中取消标签间的间隔。
- 形成BFC盒模型:margin-top叠加的问题是BFC盒模型的经典问题,通常在操作中,如果想让父元素内的元素相对于父元素的顶端向下移动一段距离,可通过给父元素
加padding-top来实现,或者让父元素形成BFC盒模型。形成BFC盒模型的方法有很多,float就是其中之一。所以float后元素都会形成BFC盒模型,其子元素相对父元素
的margin-top溢出问题,自动解决~
隐藏BOSS三:vertical-align对img嵌套的高度影响
实际项目中,常常会有img作为子元素嵌套的情况。而这种情况通常会伴随一个问题,那就是在不设置img父元素高度的情况下,img父元素高度要高于img的高度。而且父元素高度还会根据font-size值而改变大小。
出现这种问题,原因就在于元素默认的基线对齐——也就是受vertical-align:baseline;的影响。那么要解决这种问题,根据不同的需求,通常有三种做法:
- img设置float属性:多见于图文左右搭配,本质上是通过float隐性改变vertical-align:top;解决影响;
- img属性改为display: block;:利用vertical-align只对inline或inline-block元素有效的性质,解决影响;
- 父元素设置font-size:0;:抹除文字,改变基线位置,解决影响;
更多隐藏BOSS,等我发现并打到它后再来添加攻略~
感谢阅读!
深入浅出CSS(三):隐藏BOSS大盘点之默认属性小总结的更多相关文章
- 当今游戏大作share的特性大盘点
极品游戏制作时的考虑要素大盘点 不知不觉入坑Steam已近4年,虽然说Steam的毒性让很多人走向一条不归路,但是想我这样即使"中毒"还是很快乐很感恩的.那么本期文章就谈谈我对其中 ...
- 回望2017,基于深度学习的NLP研究大盘点
回望2017,基于深度学习的NLP研究大盘点 雷锋网 百家号01-0110:31 雷锋网 AI 科技评论按:本文是一篇发布于 tryolabs 的文章,作者 Javier Couto 针对 2017 ...
- 世界名校网络课程大盘点,美国大学CS专业十三大研究方向,世界50所知名大学提供开放课程
世界名校网络课程大盘点 加州大学伯克利分校http://webcast.berkeley.edu/ 加州大学伯克利分校与斯坦福大学. 麻省理工学院等一同被誉为美国工程科技界的学术 领袖,其常年位居 ...
- Python玩转硬件:TPYBoard-Micropython开发板大盘点
学习python能做什么? 可以快速搭建一个漂亮的网站 可以写爬虫 实现微信机器人助手 可以实现很多自动化的任务 -- IEEE发布2017年编程语言排行榜:Python更是高居首位,那么Python ...
- 2018 AI产业界大盘点
2018 AI产业界大盘点 大事件盘点 “ 1.24——Facebook人工智能部门负责人Yann LeCun宣布卸任 Facebook人工智能研究部门(FAIR)的负责人Yann LeCun宣布卸 ...
- 您可能不知道的CSS元素隐藏“失效”以其妙用——张鑫旭
一.CSS元素隐藏 在CSS中,让元素隐藏(指屏幕范围内肉眼不可见)的方法很多,有的占据空间,有的不占据空间:有的可以响应点击,有的不能响应点击.后宫选秀——一个一个看. { display: non ...
- 深入浅出CSS(二):关于雪碧图、background-position与steps函数的三角恋情
[测试代码] HTML <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- 深入浅出CSS(一):line-height与vertical-align的性质
[测试代码] <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- CSS元素隐藏的display和visibility
一.CSS元素隐藏 在CSS中,让元素隐藏(指屏幕范围内肉眼不可见)的方法很多,有的占据空间,有的不占据空间:有的可以响应点击,有的不能响应点击. { display: none; /* 不占据空间, ...
随机推荐
- IO文件的读取,以及写入文件内容
package zxc; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.Fi ...
- Leetcode题库——35.搜索插入位置
@author: ZZQ @software: PyCharm @file: searchInsert.py @time: 2018/11/07 19:20 要求:给定一个排序数组和一个目标值,在数组 ...
- GC 年轻代 老年代 持久代
转载自:http://www.cnblogs.com/yaoyuan23/p/5587548.html 虚拟机中的共划分为三个代:年轻代(Young Generation).老年代(Old Gener ...
- PAT 1024 科学计数法
https://pintia.cn/problem-sets/994805260223102976/problems/994805297229447168 科学计数法是科学家用来表示很大或很小的数字的 ...
- js中的extend,可实现浅拷贝深拷贝
js中的extend 1. JS中substring与substr的区别 之前在项目中用到substring方法,因为C#中也有字符串的截取方法Substring方法,当时也没有多想就误以为 ...
- [转帖]超能课堂 CPU制作过程
http://www.expreview.com/50814.html 一般来说,我们对IC芯片的了解仅限于它概念,但是对于已经应用到各式各样的数码产品中IC芯片是怎么来的?大家可能只知道制作IC芯片 ...
- BAT等公司必问的8道Java经典面试题,你都会了吗?
工作多年以及在面试中,我经常能体会到,有些面试者确实是认真努力工作,但坦白说表现出的能力水平却不足以通过面试,通常是两方面原因: 1.“知其然不知其所以然”.做了多年技术,开发了很多业务应用,但似乎并 ...
- SPOJ_SUBLEX
经典题目:给一个字符串,求字典序第k小的子串是什么. 涉及子串问题,上自动机. 首先我们可以用记忆化搜索的方法,求出到达某一个状态后,能产生多少个新状态. 首先,到达这个状态就不走了,这肯定是一种状态 ...
- java 静态方法 java 类中的方法无论静态还是非静态的都可以使用静态变量 而静态方法只能使用静态变量 (因为对象还没创建 所以不能在静态方法里面用this)
- springmvc+json 前后台数据交互
1. 配置(1) 文件配置参考这里(2) 导入jackson相关包:jackson-annotations-2.9.4.jar,jackson-core-2.9.4.jar,jackson-datab ...