了解HTML标签在各浏览器当中的默认样式,可以让我们了解,为什么会要写Reset.css,Reset.css当中要怎么写样式最合理。
试着思考下面的问题:

  • 为什么会有默认样式?
  • 每个浏览器的默认样式有什么不同?
  • Reset.css具体怎么写,每个浏览器展示的效果才会一致?

默认样式

这里说的默认样式其实是每个浏览器自己的默认样式,我们通常使用style或者link的形式应用的样式内容被成为“用户样式”。
浏览器加载完一个页面之后的工作流程大概如下:
1、转换
2、令牌化
3、词法分析
4、DOM树构建
5、CSSOM树构建
6、DOM树与CSSOM树合并后形成渲染树
7、通过布局计算每个对象显示的位置和大小
8、绘制页面

按照上面的流程,浏览器会查看文档当中是否有“用户样式”,如果没有就使用浏览器的默认样式,如果有就会用“用户样式”,就使用用户样式覆盖“浏览器默认样式”进行后面的渲染

隐藏元素

我们知道HTML标签当中的head,title,meta,link,style,script元素默认是不展示的,就是因为浏览器的默认样式当中定义了display:none属性。

head,meta,title,link,style,script{
display:none;
}

您可以通过定义如下代码在浏览器当中查看下效果

head{
display:block;
width:80px;
height:80px;
background:#f00;
}

block元素

块元素的特点:

  1. 每个块元素都是从新的一行开始(独占一行)
  2. 可以设置width,height,margin,border,padding
  3. 可以嵌套其它标签元素
  4. 默认块元素的宽度等于父元素的宽度
  5. 可以通过定义display:block,把元素设置为块元素

HTML标签当中,那些被称为块元素的标签之所以有块元素的属性,是因为浏览器默认给它定义了display:block
而不是因为是块元素才会有display:block属性。

所有定义了display:block的元素,都是块元素

html,
body,
p,
div,
layer,
article,aside,footer,header,hgroup,main,nav,section,
address,
blockquote,
figure,
center,
hr,
ol,ul,menu,dir,dd,dl,form,legend,fieldset,frameset,frame,details,summary
h1,h2,h3,h4,h5,h6{
display:block;
}

inline元素

行内元素的特点:

  1. 和其它元素在同一行
  2. width,height,margin-top,margin-bottom不可以控制元素的展现形式(定义无效)
  3. margin-left,margin-right,和padding可以定义
  4. 默认宽度是它所容纳内容的宽度
  5. 通过定义display:block,可以把行内元素设置为块元素

所有的元素默认都是行内元素,也就是display:inline

q,
map,
area,
output
{
display:inline;
}

display属性

html标签在浏览器当中是以那种布局形式展示,都是因为display属性的定义,display属性包含以下值:

基本值:    none | inline | block | list-item | inline-block
table系列: table | inline-table | table-caption | table-cell | table-row | table-row-group | table-column | table-columen-group | table-footer-group | table-header-group
css3新增: box | inline-box | flexbox | inline-flexbox | flex | inline-flex | run-in

基本值

  • none 隐藏元素
  • inline 设置为行内元素
  • block 设置为块元素
  • inline-block 设置为inline-block
  • list-item 设置为list-item

li标签默认定义的display:list-item,尝试定义如下的代码,在浏览器中查看:

    html
<div class="list">
<span class="item">1</span>
<span class="item">2</span>
<span class="item">3</span>
</div>
CSS
.item{
display:list-item;
}

table系列

  • table 块元素的表格
  • inline-table 行内元素的表格
  • table-caption 定义表格头
  • table-cell 表格单元格
  • table-row 表格单元行
  • table-row-group 单元行组
  • table-column 表格列
  • table-column-group 表格列组
  • table-footer-group 表格底
  • table-header-group 表格头

看下面一段代码

    <table>
<caption>年龄列表</caption>
<thead>
<tr>
<th>姓名</th>
<th>年龄</th>
</tr>
</thead>
<tfoot>
<tr>
<td>年龄综合</td>
<td>27</td>
</tr>
</tfoot>
<tbody>
<tr>
<td>张三</td>
<td>12</td>
</tr>
<tr>
<td>李四</td>
<td>15</td>
</tr>
</tbody>
</table>

当我们使用thead定义表头的时候,默认显示的样式就是因为thead标签定义了display:table-header-group;
同样,tfoot就是因为定义了display:table-footer-group;
caption 就是因为定义了display:table-caption;

关于table系列,我们简单了解两个问题:

  1. display:table和display:block的区别
  2. display:table-cell如何做多列布局

block和table的区别
1、block宽度默认撑满父元素
2、table宽度根据内容而定

table-cell的多列布局

    <div class="main">
<div class="left"></div>
<div class="middle"></div>
<div class="right"></div>
</div> .main{
width:500px;
display:table;
}
.left,.middle,.right{
display:table-cell;
height:100px;
}
.left{
width:20%;
background:#ff0;
}
.middle{
background:green;
}
.right{
width:10%;
background:red;
}

在线查看

CSS3系列,主要定义了弹性布局相关的内容

  • box 弹性伸缩盒版本1
  • inline-box 内联块弹性伸缩盒版本1
  • flexbox 弹性伸缩盒版本2
  • inline-flexbox内联块弹性伸缩盒版本2
  • flex 弹性伸缩盒版本3
  • inline-flex 内联块缩盒版本3
  • run-in 根据上下文定义对象是内联还是块级

弹性伸缩盒以后我们有机会详细聊聊,这里说说几个点
1、box和inline-box,flexbox和inline-flexbox,flex和inline-flex之间的差异
2、run-in是如何根据上下文作用的

第一个问题

在需要有固定宽度的情况下的弹性布局使用flex,
如果元素的宽度不固定,里面的标签还需要弹性布局的话,就是用inline-flex

我们通过以下代码来了解
flex布局;
inline-flex布局

第二个问题

这里有详细的解释

其它

块元素

行内元素

可变元素

文章七七八八,扯了很多东西,有点乱,让看官们受累了

参考

GitHub仓库

Chrom-blink
Chrom-webkit
Opera-10.51
Internet Explorer
HTML4
HTML5
浏览器渲染
解读默认样式

本文转载于猿2048:CSS系列——浏览器默认样式

CSS系列——浏览器默认样式的更多相关文章

  1. css清除浏览器默认样式

    css清除浏览器默认样式(代替 *{}) 将代码放入 css 文件,使用 link 引入. /* v2.0 | 20110126 http://meyerweb.com/eric/tools/css/ ...

  2. CSS之浏览器默认样式设置

    今天自己写css样式时,其中用到了<ul>标签,设置了一系列效果后运行,发现位置与设置有出入.chrome上打开检查项,发现<ul>标签的styles底部多了以下一段: ul, ...

  3. CSS之浏览器默认样式问题

    今天自己写css样式时,其中用到了<ul>标签,设置了一系列效果后运行,发现位置与设置有出入.chrome上打开检查项,发现<ul>标签的styles底部多了以下一段: ul, ...

  4. reset.css(重置浏览器默认样式)

    @charset "utf-8";html{background-color:#fff;color:#000;font-size:12px} body,ul,ol,dl,dd,h1 ...

  5. css知多少(4)——解读浏览器默认样式

    上一节<css知多少(3)——样式来源与层叠规则>介绍了样式的五种来源,咱们再通过一张图回顾一下. 对于上面的三层,咱们大概都比较熟悉了.下面的两层中,用户自定义样式一般也就是改一改字号大 ...

  6. css 框架——base.css,作用是重设浏览器默认样式和提供通用原子类。自己留存

    今天发下我自己的 css 框架——base.css,作用是重设浏览器默认样式和提供通用原子类. @charset "utf-8"; /*! * @名称:base.css * @功能 ...

  7. css知多少(4)——解读浏览器默认样式(转)

    css知多少(4)——解读浏览器默认样式   上一节<css知多少(3)——样式来源与层叠规则>介绍了样式的五种来源,咱们再通过一张图回顾一下. 对于上面的三层,咱们大概都比较熟悉了.下面 ...

  8. CSS 浏览器默认样式

    不要再说div天生就是block——这句话应该换成:浏览器默认样式天生规定了div是block——所以才导致了div是block!是默认样式规定的,不是浏览器的内核规定的. 没有设置block的元素, ...

  9. CSS改变浏览器默认滚动条样式

    前言 最近总是看到某网站滚动条不是浏览器默认样式,而是自定义样式   比如我博客的滚动条,自定义滚动条样式和hover前后的效果 顿时来了兴致和有一个疑问,这是怎么实现的呢? 解决   注:经测试,目 ...

随机推荐

  1. MySQL第四讲

    昨日内容回顾 表与表之间建关系(外键) """ 表与表之间最多只有四种关系 一对多 多对多 一对一 没有关系 在确定表与表之间的关系的时候记住一句话 换位思考 " ...

  2. STP详解-STP、RSTP、MSTP

    STP详解 01 冗余链路中存在的问题 如图所示LSW1和LSW2之间有两条线路相连,它们之间任何一条链路出现故障另外一条线路可以马上顶替出现故障的那条链路,这样可以很好的解决单链路故障引起的网络中断 ...

  3. laravel 框架 ajax无页面刷新删除

    ....................HTML页面<!doctype html><html lang="en"><head> <meta ...

  4. 拉格朗日插值法--python

    数据插补 常见插补方法 插值法--拉格朗日插值法 根据数学知识可知,对于平面上已知的n个点(无两点在一条直线上可以找到n-1次多项式 ,使次多项式曲线过这n个点. 1)求已知过n个点的n-1次多项式: ...

  5. 解决vue单页面应用做微信JSSDK注入权限时出现“invalid signature”(ios端)

    --都说微信开发多坑,没想到遇到一个天坑. 在做一个vue项目时,要用到微信JS-SDK,官方文档详见:https://developers.weixin.qq.com/doc/offiaccount ...

  6. LGP6011题解

    昨天考试考到了这道题,那就来补一下题解吧. 题意简单不再阐述. 首先删除之后还要向左移动,很容易想到 ODT 平衡树,这个过于一眼,不再阐述. 重点说第二种方法. 向左平移的这个操作,我们是否可以用别 ...

  7. 使用flask进行mock接口

    在测试日常过程中,我们经常会遇到因为环境问题,或者是因为上下游,前后端开发进度不一,提测时间不一等情况.这时候我们可以通过mock的方式去完成一些操作.今天给大家分享一个通过flask去mock接口, ...

  8. 【机器学习基础】无监督学习(2)——降维之LLE和TSNE

    在上一节介绍了一种最常见的降维方法PCA,本节介绍另一种降维方法LLE,本来打算对于其他降维算法一并进行一个简介,不过既然看到这里了,就对这些算法做一个相对详细的学习吧. 0.流形学习简介 在前面PC ...

  9. VMware15安装 CentOS7 步骤

  10. ASP.NET Core 6.0对热重载的支持

    .NET 热重载技术支持将代码更改(包括对样式表的更改)实时应用到正在运行的程序中,不需要重启应用,也不会丢失应用状态. 一.整体介绍 目前 ASP.NET Core 6.0 项目都支持热重载.在以下 ...