css_note

2020-07-27

前端学习

CSS Study

一、CSS 初步


添加 CSS

把 styles.css 和 index.html 联结起来,可以在HTML文档中,<head>语句模块里面加上下面的代码:

1
<link rel="styesheet" href="styles.css>

二、构建 CSS 块


层叠与继承

1. 冲突规则

  1. 层叠

    Stylesheets cascade(样式表层叠) — 简单的说,css规则的顺序很重要;当应用两条同级别的规则到一个元素的时候,写在后面的就是实际使用的规则。
  2. 优先级

    • 一个元素选择器不是很具体 — 会选择页面上该类型的所有元素 — 所以它的优先级就会低一些。

    • 一个类选择器稍微具体点 — 它会选择该页面中有特定 class 属性值的元素 — 所以它的优先级就要高一点。

  3. 继承

    如果设置一个元素的 color 和 font-family ,每个在里面的元素也都会有相同的属性,除非直接在元素上设置属性。

    2. 理解继承

  4. 控制继承

    CSS 为控制继承提供了四个特殊的通用属性值。每个css属性都接收这些值。
    • inherit设置该属性会使子元素属性和父元素相同。实际上,就是 "开启继承".

    • initial 设置属性值和浏览器默认样式相同。如果浏览器默认样式中未设置且该属性是自然继承的,那么会设置为 inherit 。

    • unset 将属性重置为自然值,也就是如果属性是自然继承那么就是 inherit,否则和 initial一样

  5. 重设所有属性值

    CSS 的 shorthand 属性 all 可以用于同时将这些继承值中的一个应用于(几乎)所有属性。它的值可以是其中任意一个(inherit, initial, unset, or revert)。这是一种撤销对样式所做更改的简便方法,以便回到之前已知的起点。

CSS 选择器

1. 选择器列表

单独的选择器可以被混编为一个“选择器列表”,这样,规则就可以应用到所有的单个选择器上,如果任何一个选择器无效 (存在语法错误),那么整条规则都会被忽略。

1
2
3
h1, .special { 
color: blue;
}

2. 选择器的种类

  1. 类型、类、id选择器

    1
    2
    3
    h1 {}   /*类型选择器*/
    .box {} /*类选择器*/
    #unique {} /*ID 选择器*/
  2. 标签属性选择器

    1
    2
    a[title] { } /*根据一个元素上的某个标签的属性的存在以选择元素的不同方式*/
    a[href="https://example.com"] { } /*根据一个有特定值的标签属性是否存在来选择*/
  3. 伪类和伪元素

    1
    2
    3
    4
    /*包含了伪类,用来样式化一个元素的特定状态*/
    a:hover { } /*:hover伪类会在鼠标指针悬浮到一个元素上的时候选择这个元素:*/
    /*包含了伪元素,选择一个元素的某个部分而不是元素自己*/
    p::first-line { } /*::first-line是会选择一个元素(下面的情况中是<p>)中的第一行,类似<span>包在了第一个被格式化的行外面,然后选择这个<span>。*/
  4. 运算符

    1
    2
    /*将其他选择器组合起来,更复杂的选择元素*/
    article > p { } /*用运算符(>)选择了<article>元素的初代子元素。*/

盒模型

1. 块级盒子(Block box) 和 内联盒子(Inline box)

  1. 块级盒子(Block box)标题(<h1>等)和段落(<p>)默认情况下都是块级的盒子。

    • 盒子会在内联的方向上扩展并占据父容器在该方向上的所有可用空间,在绝大数情况下意味着盒子会和父容器一样宽

    • 每个盒子都会换行

    • width 和 height 属性可以发挥作用

    • 内边距(padding), 外边距(margin) 和 边框(border) 会将其他元素从当前盒子周围“推开”

  2. 内联盒子(Inline box) 用做链接的 <a> 元素、 <span>、 <em> 以及 <strong> 都是默认处于 inline 状态

    • 盒子不会产生换行。

    • width 和 height 属性将不起作用。

    • 垂直方向的内边距、外边距以及边框会被应用但是不会把其他处于 inline 状态的盒子推开。

    • 水平方向的内边距、外边距以及边框会被应用而且也会把其他处于 inline 状态的盒子推开。

      2. CSS 盒模型

      完整的 CSS 盒模型应用于块级盒子,内联盒子只使用盒模型中定义的部分内容。模型定义了盒的每个部分 —— margin, border, padding, and content
  3. 盒模型的各个部分

    BOX

    • Content box: 这个区域是用来显示内容,大小可以通过设置 width 和 height.

    • Padding box: 包围在内容区域外部的空白区域; 大小通过 padding 相关属性设置

    • Border box: 边框盒包裹内容和内边距。大小通过 border 相关属性设置。

    • Margin box: 这是最外面的区域,是盒子和其他元素之间的空白区域。大小通过 margin 相关属性设置。

  4. 标准盒模型

    在标准模型 (标准模型宽度 = 410px (350 + 25 + 25 + 5 + 5),高度 = 210px (150 + 25 + 25 + 5 + 5),padding 加 border 再加 content box) 中,如果你给盒设置 width 和 height,实际设置的是 content box。 padding 和 border 再加上设置的宽高一起决定整个盒子的大小。

    1
    2
    3
    4
    5
    6
    7
    .box {
    width: 350px;
    height: 150px;
    margin: 25px;
    padding: 25px;
    border: 5px solid black;
    }
  5. 替代(IE)盒模型

    css还有一个替代盒模型。使用这个模型,所有宽度都是可见宽度,所以内容宽度是该宽度减去边框和填充部分。使用替代模型,通过为其设置 box-sizing: border-box 来实现。

    1
    2
    3
    .box { 
    box-sizing: border-box;
    }
  6. 使用调试工具来查看盒模型 (F12)

    3. 外边距,内边距,边框 (详细)

  7. 外边距

    外边距属性值可以为正也可以为负。设置负值会导致和其他内容重叠。无论使用标准模型还是替代模型,外边距总是在计算可见部分后额外添加。

    1. 使用margin属性一次控制一个元素的所有边距,或者

    2. 每边单独使用等价的普通属性控制:

      • margin

      • margin-top

      • margin-right

      • margin-bottom

      • margin-left

        参数

    • <length>:指定一个固定的宽度。可以为负数。

    • <percentage> 相对于该元素的包含块的宽度(相对于该块的百分比)。该值可以为负数。

    • margin: auto; /* 该盒子是水平居中的, 上下边距为0 */

      浏览器会自动选择一个合适的margin来应用。它可以用于将一个块居中。比如,div { width:50%; margin:0 auto; } 会把这个div容器水平居中。
      • 只有一个 值时,这个值会被指定给全部的 四个边.
      • 两个 值时,第一个值被匹配给 上和下, 第二个值被匹配给 左和右.
      • 三个 值时,第一个值被匹配给 上, 第二个值被匹配给 左和右, 第三个值被匹配给 下.
      • 四个 值时,会依次按 上、右、下、左 的顺序匹配 (即顺时针顺序).
  8. 边框

    边框是在边距和填充框之间绘制的。标准的盒模型,边框的大小将添加到框的宽度和高度。替代盒模型,那么边框的大小会使内容框更小,因为它会占用一些可用的宽度和高度。有四个边框,每个边框都有样式、宽度和颜色,我们可能需要对它们进行操作。

    1. border属性一次设置所有四个边框的宽度、颜色和样式。

      1
      2
      3
      .box { 
      border: 1px solid black;
      }
      等价于
      1
      2
      3
      4
      5
      .box { 
      border-width: 1px;
      border-style: solid;
      border-color: black;
      }
    2. 分别设置每边的宽度、颜色和样式,可以使用:

      • border-top
      • border-right
      • border-bottom
      • border-left
    3. 设置所有边的颜色、样式或宽度,请使用以下属性:

      • border-width
      • border-style
      • border-color
    4. 设置单边的颜色、样式或宽度,可以使用最细粒度的普通属性之一

      • border-top-width
      • border-top-style
      • border-top-color
      • border-right-width
      • border-right-style
      • border-right-color
      • border-bottom-width
      • border-bottom-style
      • border-bottom-color
      • border-left-width
      • border-left-style
      • border-left-color
    5. 圆角 border-radius

      border-radius属性和与方框的每个角相关的长边来实现方框的圆角。可以使用两个长度或百分比作为值,第一个值定义水平半径,第二个值定义垂直半径。在很多情况下,您将只传递一个值,这两个值都将使用。
      • 使一个盒子的四个角都有10px的圆角半径:
        1
        2
        3
        .box { 
        border-radius: 10px;
        }
      • 右上角的水平半径为1em,垂直半径为10%:
        1
        2
        3
        .box { 
        border-top-right-radius: 1em 10%;
        }
      • 由方形变为圆
        1
        2
        3
        .box{
        border-radius: 50%;
        }
  9. 内边距

    内边距位于边框和内容区域之间。与外边距不同,不能有负数量的内边距,所以值必须是0或正的值。应用于元素的任何背景都将显示在内边距后面,内边距通常用于将内容推离边框。

    1. 使用padding简写属性控制元素所有边

    2. 每边单独使用等价的普通属性:

      • padding-top
      • padding-right
      • padding-bottom
      • padding-left

        4. 使用display: inline-block

        display有一个特殊的值,它在内联和块之间提供了一个中间状态。这对于以下情况非常有用:不希望一个项切换到新行,但希望它可以设定宽度和高度,并避免上面看到的重叠。
  • 一个元素使用 display: inline-block,实现我们需要的块级的部分效果:

    • 设置width 和height 属性会生效。
    • padding, margin, 以及border 会推开其他元素。

背景与边框

1. CSS 的背景样式

  1. 背景颜色 background-color

    background-color属性定义了CSS中任何元素的背景颜色。属性接受任何有效的<color>值。背景色扩展到元素的内容和内边距的下面。
  2. 背景图片 background-image

    background-image属性允许在元素的背景中显示图像。
    • 控制背景平铺 background-repeat

      background-repeat属性用于控制图像的平铺行为。可用的值是:
      • no-repeat — 不重复。
      • repeat-x —水平重复。
      • repeat-y —垂直重复。
      • repeat — 在两个方向重复。
    • 调整背景图像的大小 background-size

      background-size属性,它可以设置长度或百分比值,来调整图像的大小以适应背景。也可以使用关键字:
      • cover —浏览器将使图像足够大,使它完全覆盖了盒子区,同时仍然保持其高宽比。在这种情况下,有些图像可能会跳出盒子外
      • contain — 浏览器将使图像的大小适合盒子内。在这种情况下,如果图像的长宽比与盒子的长宽比不同,则可能在图像的任何一边或顶部和底部出现间隙。
    • 背景图像定位 background-position

      background-position属性允许您选择背景图像显示在其应用到的盒子中的位置。它使用的坐标系中,框的左上角是(0,0) (默认),框沿着水平(x)和垂直(y)轴定位。
      • 常见的背景位置值有两个单独的值——一个水平值后面跟着一个垂直值。`
        1
        2
        3
        4
        5
        .box { 
        background-image: url(star.png);
        background-repeat: no-repeat;
        background-position: top center;
        }
      • 或者使用 长度值, and 百分比:
        1
        2
        3
        4
        5
        .box { 
        background-image: url(star.png);
        background-repeat: no-repeat;
        background-position: 20px 10%;
        }
      • 混合使用关键字,长度值以及百分比
        1
        2
        3
        4
        5
        .box {
        background-image: url(star.png);
        background-repeat: no-repeat;
        background-position: top 20px;
        }
      • 4-value语法来指示到盒子的某些边的距离
        1
        2
        3
        4
        5
        .box { 
        background-image: url(star.png);
        background-repeat: no-repeat;
        background-position: top 20px right 10px;
        }
    • 渐变背景

      使用background-image属性设置。
    • 多背景图像

      在单个属性值中指定多个background-image值,用逗号分隔每个值,会发生图像重叠.其他 background-*属性也可以有值逗号分隔的方式休市对应的的background-image:
      1
      2
      background-image: url(image1.png), url(image2.png), url(image3.png), url(image1.png);
      background-repeat: no-repeat, repeat-x, repeat;
    • 背景附加

      指定如何滚动时,内容滚动。这是由background-attachment属性控制的,它可以接受以下值:
      • scroll:使元素的背景在页面滚动时滚动。如果滚动了元素内容,则背景不会移动。实际上,背景被固定在页面的相同位置,所以它会随着页面的滚动而滚动。
      • fixed: 使元素的背景固定在视图端口上,这样当页面或元素内容滚动时,它就不会滚动。它将始终保持在屏幕上相同的位置。
      • local: 这个值是后来添加的(它只在Internet Explorer 9+中受支持,而其他的在IE4+中受支持),因为滚动值相当混乱,在很多情况下并不能真正实现您想要的功能。局部值将背景固定在设置的元素上,因此当您滚动元素时,背景也随之滚动。

CSS 的值与单位

  1. 数字,长度和百分比

    数值类型 描述
    integer 整数
    number 表示一个小数——它可能有小数点后面的部分,也可能没有
    dimension 有一个附加的单位,例如45deg、5s或10px。是一个伞形类别,包括
    percentage 表示一些其他值的一部分,例如50%。百分比值总是相对于另一个量,例如,一个元素的长度相对于其父元素的长度。
  2. 绝对长度

    单位 名称
    cm 厘米
    mm 毫米
    Q 四分之一毫米
    in 英寸
    pc 十二点活字
    pt
    px 像素
  3. 相对长度与单位

    单位 相对于
    em 在 font-size 中使用是相对于父元素的字体大小,在其他属性中使用是相对于自身的字体大小,如 width
    ex 字符“x”的高度
    ch 数字“0”的宽度
    rem 根元素的字体大小
    lh 元素的line-height
    vw 视窗宽度的1%
    vh 视窗高度的1%
    vmin 视窗较小尺寸的1%
    vmax 视图大尺寸的1%

三、样式化 文本

字体样式

作用于字体的属性,会直接应用到文本中,比如使用哪种字体,字体的大小是怎样的,字体是粗体还是斜体,等等。

  1. 颜色:

    color 属性设置选中元素的前景内容的颜色

    1
    2
    3
    p{
    color = red;
    }
  2. 字体种类:

    font-family 属性, 允许为浏览器指定一个字体 (或者一个字体的列表),然后浏览器可以将这种字体应用到选中的元素上。浏览器只会把在当前机器上可用的字体应用到当前正在访问的网站上;如果字体不可用,那么就会用浏览器默认的字体代替 default font.

    1
    2
    3
    p{
    font-family: arial;
    }
    1. 网络安全字体:

      可以应用到所有系统 (Arial, Courier New, Georgia, Times New Roman, Trebuchet MS, Verdana)

    2. 默认字体:

      serif, sans-serif, monospace, cursive,和 fantasy。

      serif sans-serif monospace cursive fantasy
      有衬线的字体 (衬线一词是指字体笔画尾端的小装饰,存在于某些印刷体字体中) 没有衬线的字体 每个字符具有相同宽度的字体,通常用于代码列表 用于模拟笔迹的字体,具有流动的连接笔画 用来装饰的字体
    3. 字体栈:

      包含一个font-family属性,其值由几个用逗号分离的字体名称组成,便于浏览器多种选择

      1
      2
      3
      p{
      font-family: "Trebuchet MS", Verdana, sans-serif;
      }
  3. 字体大小:

    font-size 属性设置,可以取大多数单位,常用单位为: px, em, rem

    使用 em / rem 时以 父元素/根元素的大小为基础大小

    px(像素) em rem
    绝对单位,任何情况下,页面上的文本所计算出来的像素值都是一样的 1em 等于我们设计的当前元素的父元素上设置的字体大小 ,em可以调整任何东西的大小,不只是文本 1rem 等于 HTML 中的根元素的字体大小 ,而不是父元素,更容易计算字体大小
  4. 字体样式,字体粗细,文本转换和文本装饰

    1. font-style: 用来打开和关闭文本 italic (斜体)。 可能的值如下:

      • normal: 将文本设置为普通字体 (将存在的斜体关闭)
      • italic: 如果当前字体的斜体版本可用,那么文本设置为斜体版本;如果不可用,那么会利用 oblique 状态来模拟 italics。
      • oblique: 将文本设置为斜体字体的模拟版本,也就是将普通文本倾斜的样式应用到文本中。
    2. font-weight: 设置文字的粗体大小。这里有很多值可选 (比如 -light, -normal, -bold, -extrabold, -black, 等等), 不过事实上你很少会用到 normal 和 bold以外的值:

      • normal, bold: 普通, 加粗字体
      • lighter, bolder: 将当前元素的粗体设置为比其父元素粗体更细或更粗一步。100–900: 数值粗体值,如果需要,可提供比上述关键字更精细的粒度控制。
    3. text-transform: 允许你设置要转换的字体。值包括:

      • none: 防止任何转型。
      • uppercase: 将所有文本转为大写。
      • lowercase: 将所有文本转为小写。
      • capitalize: 转换所有单词让其首字母大写。
      • full-width: 将所有字形转换成全角,即固定宽度的正方形,类似于等宽字体,允许拉丁字符和亚洲语言字形(如中文,日文,韩文)对齐。
    4. text-decoration: 设置/取消字体上的文本装饰 (你将主要使用此方法在设置链接时取消设置链接上的默认下划线, 可以接受多个值,同时为一段文本设置上、下、中划线) 可用值为:

      • none: 取消已经存在的任何文本装饰。
      • underline: 文本下划线.
      • overlinre: 文本上划线
      • line-through: 穿过文本的线
    5. 文字阴影: text-shadow 属性。这最多需要 4 个值 (正偏移 1px向右移动,负偏移 -1px向左移动) :

      • 阴影与原始文本的水平偏移,可以使用大多数的 CSS 单位 length and size units, 但是 px 是比较合适的。这个值必须指定。
      • 阴影与原始文本的垂直偏移;效果基本上就像水平偏移,除了它向上/向下移动阴影,而不是左/右。这个值必须指定。
      • 模糊半径 - 更高的值意味着阴影分散得更广泛。如果不包含此值,则默认为0,这意味着没有模糊。可以使用大多数的 CSS 单位 length and size units.
      • 阴影的基础颜色,可以使用大多数的 CSS 颜色单位 CSS color unit. 如果没有指定,默认为 black.
        1
        2
        3
        p{
        text-shadow: 4px 4px 5px red;
        }
      • 多种阴影 包含以逗号分隔的多个阴影值,将多个阴影应用于同一文本
        1
        2
        3
        4
        text-shadow: -1px -1px 1px #aaa,
        0px 4px 1px rgba(0,0,0,0.5),
        4px 4px 5px rgba(0,0,0,0.7),
        0px 0px 7px rgba(0,0,0,0.4);

文本布局

作用于文本的间距以及其他布局功能的属性,比如,允许操纵行与字之间的空间,以及在内容框中,文本如何对齐。

  1. 文本对齐:

    text-align 属性用来控制文本如何和它所在的内容盒子对齐。可用值如下:

    • left: 左对齐文本。

    • right: 右对齐文本。

    • center: 居中文字

    • justify: 使文本展开,改变单词之间的差距,使所有文本行的宽度相同。你需要仔细使用,它可以看起来很可怕。特别是当应用于其中有很多长单词的段落时。如果你要使用这个,你也应该考虑一起使用别的东西,比如 hyphens,打破一些更长的词语。

  2. 行高:

    line-height 属性设置文本每行之间的高,可以接受大多数单位,不过也可以设置一个无单位的值,作为乘数,通常这种是比较好的做法。无单位的值乘以 font-size 来获得 line-height。当行与行之间拉开空间,正文文本通常看起来更好更容易阅读。推荐的行高大约是 1.5–2 (双倍间距。) 所以要把我们的文本行高设置为字体高度的1.5倍,你可以使用这个:

    1
    line-height: 1.5;
  3. 字母和单词间距:

    letter-spacing 和 word-spacing 属性允许你设置你的文本中的字母与字母之间的间距、或是单词与单词之间的间距。你不会经常使用它们,但是可能可以通过它们,来获得一个特定的外观,或者让较为密集的文字更加可读。它们可以接受大多数单位

    1
    2
    3
    4
    5
    把这个样式应用到 <p> 段落的第一行:
    p::first-line {
    letter-spacing: 2px;
    word-spacing: 4px;
    }
  4. 其他可能用到的属性

    • Font 样式:

      • font-variant: 在小型大写字母和普通文本选项之间切换。
      • font-kerning: 开启或关闭字体间距选项。
      • font-feature-settings: 开启或关闭不同的 OpenType 字体特性。
      • font-variant-alternates: 控制给定的自定义字体的替代字形的使用。
      • font-variant-caps: 控制大写字母替代字形的使用。
      • font-variant-east-asian: 控制东亚文字替代字形的使用, 像日语和汉语。
      • font-variant-ligatures: 控制文本中使用的连写和上下文形式。
      • font-variant-numeric: 控制数字,分式和序标的替代字形的使用。
      • font-variant-position: 控制位于上标或下标处,字号更小的替代字形的使用。
      • font-size-adjust: 独立于字体的实际大小尺寸,调整其可视大小尺寸。
      • font-stretch: 在给定字体的可选拉伸版本中切换。
      • text-underline-position: 指定下划线的排版位置,通过使用
      • text-decoration-line 属性的underline 值。
      • text-rendering: 尝试执行一些文本渲染优化。
    • 文本布局样式:

      • text-indent: 指定文本内容的第一行前面应该留出多少的水平空间。
      • text-overflow: 定义如何向用户表示存在被隐藏的溢出内容。
      • white-space: 定义如何处理元素内部的空白和换行。
      • word-break: 指定是否能在单词内部换行。
      • direction: 定义文本的方向 (这取决于语言,并且通常最好让HTML来处理这部分,因为它是和文本内容相关联的。)
      • hyphens: 为支持的语言开启或关闭连字符。
      • line-break: 对东亚语言采用更强或更弱的换行规则。
      • text-align-last: 定义一个块或行的最后一行,恰好位于一个强制换行前时,如何对齐。
      • text-orientation: 定义行内文本的方向。
      • word-wrap: 指定浏览器是否可以在单词内换行以避免超出范围。
      • writing-mode: 定义文本行布局为水平还是垂直,以及后继文本流的方向。

        样式列表

        列表特定样式

        三个属性可以在 <ul> 或 <ol> 元素上设置:
  • list-style-type :设置用于列表的项目符号的类型,例如无序列表的方形或圆形项目符号,或有序列表的数字,字母或罗马数字。
  • list-style-position :设置在每个项目开始之前,项目符号是出现在列表项内,还是出现在其外。
  • list-style-image :允许您为项目符号使用自定义图片,而不是简单的方形或圆形。
  1. 符号样式

    list-style-type 属性允许设置列表元素的 marker(比如圆点、符号、或者自定义计数器样式)
    • disc 实心圆点 (默认值)
    • circle 空心圆点
    • square 实心方块
    • decimal 十进制阿拉伯数字,从1开始
    • cjk-decimal 中日韩十进制数, 例如: 一, 二, 三, ..., 九八, 九九, 一〇〇
    • decimal-leading-zero, E.g. 01, 02, 03, … 98, 99
    • lower-roman, E.g. i, ii, iii, iv, v…
    • upper-roman, E.g. I, II, III, IV, V…
    • lower-greek, E.g. α, β, γ…
    • lower-alpha, E.g. a, b, c, … z
    • upper-alpha, E.g. A, B, C, … Z
  2. 项目符号位置

    list-style-position 设置在每个项目开始之前,项目符号是出现在列表项内,还是出现在其外。默认值为 outside,这使项目符号位于列表项之外。如果值设置为 inside,项目条目则位于行内。
  3. 使用自定义的项目符号图片

    list-style-image 属性允许对于项目符号使用自定义图片,在控制项目符号的位置,大小等方面是有限的,可以对无序排列更改
    1
    2
    3
    4
    5
    6
    7
    ul li {
    padding-left: 2rem;
    background-image: url(star.svg);
    background-position: 0 0;
    background-size: 1.6rem 1.6rem;
    background-repeat: no-repeat;
    }
    管理列表计数
    在有序列表上进行不同的计数方式。例如: 从1以外的数字开始,或向后倒数,或者按步或多于1计数。
  4. start

    start 属性允许你从1 以外的数字开始计数。
    1
    2
    3
    4
    5
    <ol start="4">
    <li></li>
    <li></li>
    <li></li>
    </ol>
  5. reversed

    reversed 属性将启动列表倒计数
    1
    2
    3
    4
    5
    <ol start="4" reversed>
    <li></li>
    <li></li>
    <li></li>
    </ol>
  6. value

    value 属性允许设置列表项指定数值
    1
    2
    3
    4
    5
    <ol start="4" reversed>
    <li value=2></li>
    <li value=4></li>
    <li value=6></li>
    </ol>

    样式化链接

  7. 链接状态

    链接存在时处于不同的状态,每一个状态都可以用对应的 伪类 来应用样式:
    • Visited: 这个链接已经被访问过了(存在于浏览器的历史纪录), 它可以使用 :visited 伪类来应用样式。
    • Hover: 当用户的鼠标光标刚好停留在这个链接,它可以使用 :hover 伪类来应用样式。
    • Focus: 一个链接当它被选中的时候 (比如通过键盘的 Tab 移动到这个链接的时候,或者使用编程的方法来选中这个链接 HTMLElement.focus()) 它可以使用 :focus 伪类来应用样式。
    • Active: 一个链接当它被激活的时候 (比如被点击的时候),它可以使用 :active 伪类来应用样式。
  8. 默认样式

    • 链接具有下划线。
    • 未访问过的 (Unvisited) 的链接是蓝色的。
    • ``访问过的 (Visited) 的链接是紫色的.`
    • 悬停 (Hover) 在一个链接的时候鼠标的光标会变成一个小手的图标。`
    • 选中 (Focus) 链接的时候,链接周围会有一个轮廓,你应该可以按 tab 来选中这个页面的链接 (在 Mac 上, 你可能需要使用Full Keyboard Access: All controls 选项,然后再按下 Ctrl + F7 ,这样就可以起作用)
    • 激活 (Active) 链接的时候会变成红色 (当你点击链接时,请尝试按住鼠标按钮。)
  9. 将样式应用到一些链接 (必需按顺序)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    a {

    }
    a:link {

    }
    a:visited {

    }
    a:focus {

    }
    a:hover {

    }
    a:active {

    }
  10. 在链接中包含图标 (属性选择器——a[href*="http"] 选中 <a> 元素,但是这样只会选中那些拥有 href 属性,且属性的值包含 "http" 的 <a>的元素。指定位置为100%,使其出现在内容的右边,距离上方是0px, padding-right ,为背景图片留出空间,这样就不会和文本重叠。)

    1
    2
    3
    4
    5
    a[href*="http"] {
    background: url('https://mdn.mozillademos.org/files/12982/external-link-52.png') no-repeat 100% 0;
    background-size: 16px 16px;
    padding-right: 19px;
    }
  11. 样式化链接为按钮

    具体请看