HTML 元素默认样式和 reset

元素默认样式

默认样式

HTML 元素的默认样式是由浏览器提供的,它们在浏览器中被称为 " 用户代理样式表 "(user agent stylesheet)。

User agent stylesheets

不同的浏览器提供的默认样式可能有所不同,但是通常包括以下内容:

默认样式的意义

默认样式带来的问题

CSS Reset

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>default style</title>
</head>

<body>
    <div>DIV 元素</div>  // [!code focus:5]
    <ul>
        <li>LI 元素</li>
        <li>LI 元素</li>
    </ul>
</body>

</html>

浏览器提供的默认样式也会带来一些问题:

那处理这个问题的解决方案呢?就是 CSS reset。

通用选择器

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>default style</title>
    <style>  // [!code focus:6]
        * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>

<body>
    <div>DIV 元素</div>  // [!code focus:5]
    <ul>
        <li>LI 元素</li>
        <li>LI 元素</li>
    </ul>
</body>

</html>

这种方式因为使用通用选择器,所以会带来性能的问题。

样式归零

把默认样式都干掉归零。

样式调整

Normalize.css makes browsers render all elements more consistently and in line with modern standards. It precisely targets only the styles that need normalizing.

Normalize.css 使用了一种不同的思路。它的基本策略是这样的,既然浏览器给了我们默认样式,那它就是有意义的,那我为什么要把这个默认样式干掉呢?我应该处理的是,如果这个默认样式不一致,我把它变得一致就好了,所以这就是 normalize 的出发点。

normalize 会保留一些元素的 margin 和 padding。同时它会去做一些修正,比如说输入框在各个浏览器下面的宽度,高度的定义是不统一的。那么它会尝试去做一些修正,让你的定义变得更统一。

<link rel="stylesheet" type="text/css" href="https://yarnpkg.com/en/package/normalize.css" />