css之解读浏览器默认样式

Created at 2016-08-20 Updated at 2017-01-06 Category Front-End Tag CSS

理念上的转变


浏览器加载了html之后只为一件东西——dom树,浏览器把html变为dom树结构,就完成了对html的结构化。至于后来对视图的渲染,p是blockbr换行,那是整合了css之后的事情。而浏览器整合css又是另一个路线,和解析html是分开的。这里的“css”就包含了浏览器默认样式。

一句话,浏览器将载入的html变为dom树,但是此时没有任何显示样式。所以显示的样式,都是css定义的,浏览器只会通过css来渲染视图样式

block元素


为何默认情况下ph1uldiv都是block显示,就是这里定义的。所以,不要再说div天生就是block——这句话应该换成:浏览器默认样式天生规定了div是block——所以才导致了div是block!是默认样式规定的,不是浏览器的内核规定的。

没有设置block的元素,默认为inline显示

display: list-item


我们在使用display,常用的值一般是:inline/block/inline-block,用不到list-item。那这里的list-item到底有什么作用?

出现了ul-li中的效果了吧,如果再加一个margin-left是不是就跟ul-li一样了?所以,ul-li为什么会默认显示成那种样子?——list-item才是“罪魁祸首”

diplay:table


先给出一个快速思考题:<table><div>在容器尺寸上最大区别是什么(只是容器尺寸,不考虑内容区别)?请在两秒钟内说出答案。

答案是——div宽度和父容器相同,table宽度根据内容而定——即table具有“包裹性”

第一个div默认是block,宽度撑满整个页面。第二div设置了display:table,宽度根据内容而定。这就是“包裹性”

display: table-cell


这里的大部分都是我们一直都不会用到的,用不到的了解即可,没必要深究。但是这个table-cel我们却能用得到,而且是用它来干一件很重要的事情——多列布局

传统模式下大家都使用float来解决这一问题,但是float写出来的东西代码复杂,宽度调整不灵活,浏览器兼容性有问题。所以才有了新方案——table-cell,注意,IE6、7不行

你可以用table-cell,像用table一样做多列布局,做出来的效果和table做出来的效果是一模一样的

body样式


body中,定义了两个样式

  • 不同浏览器为body设置的margin值可能不一样,因此大家都知道在css中用 *{margin:0}来解决这一兼容性问题

  • 浏览器默认样式还为body设置了line-heightline-height这个值1.12是对英文比较友好,中文状态下就显得有点拥挤。Line-height是具有继承性的,在body中设置了,body下面所有的文字都会继承生效

这里的line-height: 1.12是一个相对值,即是文字高度的1.12倍。看到这里,我们在写line-height的时候,也一定要注意使用相对值,不要使用绝对值。如下:

上图是编写line-height的三种形式,大家觉得哪种形式最好?区别是什么?

  • 情况1:永远按照文字的1.4倍计算,不管文字的高度如何,可适应任何变化;
  • 情况2:永远按照1.4em计算,随着em的值改变,不管文字高度如何(此时文字高度可能已经通过绝对的px值该表了大小,而不是随em改变的);
  • 情况3:就是25px,绝对的。

相信看到这里大家会发现,通过一个line-height我能能窥探到的道道有很多。如果大家看懂了这三种情况,从软件设计和系统扩展的角度说,当然我们都会选择第一种

em和px


因为px是固定大小,一目了然。——当然,它也不利于扩展
因此,我们推荐大家用em。而且浏览器的默认样式也建议我们这样书写:

em是什么?——em是一个浏览器识别的长度单位,但是它不是绝对的、固定的,而是相对的。大家都知道px是一个绝对的长度单位制,它永远不会改变。浏览器默认情况下令1em === 16px。现在你知道为何p默认是16px了吧。而且你还知道了h1p高度的两倍,h2是p高度的1.5

粗体和斜体


上图中,标注了在整个html中,哪些元素设置了粗体/斜体。重点还是一个思维转换的问题:h1不是天生的粗体,而是设置了font-weight:bolder的样式而已

inline-block


看看浏览器默认样式告诉你的捷径:buttoninput就是inline-block!这样以点播你就会一下子明白,最起码能给你一个很好的形象的概念。看看buttoninput的表现,你就知道inline-block是什么样子了

Site by Poetry using Hexo & Random
© 2015 - 2017

技术改变生活

Hide