【杂记】前端初探:CSS

10 minute read

前端三部曲之一。CSS 描述了网页的布局。整理自「菜鸟教程」。

2.0 什么是 CSS

CSS(Cascading Style Sheets,层叠样式表),是一种用来为结构化文档(如 HTML 文档或 XML 应用)添加样式(字体、间距和颜色等)的计算机语言,CSS 文件扩展名为 .css

通过使用 CSS 可以大大提升网页开发的工作效率。

2.1 CSS 选择器

如果要在 HTML 元素中设置 CSS 样式,需要在元素中设置一些选择器——告诉网页在什么地方运用什么样的样式

  • 权重 1000:内联样式表

    在标签内部加上 style="" 属性即可。属性内部的条目以分号分隔。

    推荐在比较特殊的个别元素身上使用。

    1<h3 style="color:red;"> Redemption </h3>
    
  • 权重 100:ID 选择器

    如果我们想让 body 里面的代码看起来更紧凑一些…… 为何不在 head 中事先声明某个 ID 的样式呢?

     1<!DOCTYPE html> <html> <head>
     2    <meta charset="utf-8"> 
     3    <style>
     4    #para1
     5    {
     6        text-align:center;
     7        color:red;
     8    } 
     9    </style>
    10</head>
    11<body>
    12    <p id="para1">Hello World!</p>
    13    <p>这个段落不受该样式的影响。</p>
    14</body></html>
    

    效果是,「Hello world」变成了居中红色文本。

  • 权重 10:Class 选择器

    如果想让一类元素都变成一个样式,试试 class 选择器。

     1<!DOCTYPE html> <html> <head>
     2    <meta charset="utf-8"> 
     3    <style>
     4    .fuck
     5    {
     6        text-align:center;
     7        color:red;
     8    } 
     9    </style>
    10</head>
    11<body>
    12    <p class="fuck">Hello World!</p>
    13    <p>这个段落不受该样式的影响。</p>
    14</body></html>
    

    效果同上。

  • 权重 1:HTML 标签选择器

     1<!DOCTYPE html> <html> <head>
     2    <meta charset="utf-8"> 
     3    <style>
     4    p
     5    {
     6        text-align:center;
     7        color:red;
     8    } 
     9    </style>
    10</head>
    11<body>
    12    <p>Hello World!</p>
    13    <p>这个段落受该样式的影响。</p>
    14</body> </html>
    

    效果是,两行字都居中变红了。

  • CSS 优先级法则:

    • A 选择器都有一个权值,权值越大越优先;
    • B 当权值相等时,后出现的样式表设置要优于先出现的样式表设置;
    • C 创作者的规则高于浏览者:即网页编写者设置的 CSS 样式的优先权高于浏览器所设置的样式;
    • D 继承的 CSS 样式不如后来指定的 CSS 样式;
    • E 在同一组属性设置中标有 !important 规则的优先级最大。关于 !important 的使用,后面会再次涉及。

2.2 CSS 的创建

插入 样式表 的方法有三种:

  • 外部样式表(External style sheet)
  • 内部样式表(Internal style sheet)
  • 内联样式(Inline style)

在 2.1 中,我们介绍的四种选择方式,给出的示例代码都属于 内部样式表 或者 内联样式。而我们最常用的其实是 外部样式表,也就是我们常见的 .css 文件。

当样式需要应用于很多页面时,外部样式表将是理想的选择。在使用外部样式表的情况下,我们可以通过改变一个文件来改变整个站点的外观。

每个页面使用 <link> 标签即可链接到某个样式表,<link> 标签位于文档头部。具体如下:

1<head>
2<link rel="stylesheet" type="text/css" href="mystyle.css">
3</head>
  • rel="stylesheet" 表示这个链接关联的是一个样式表文档。它同时说明这个 link 将在文档初始化时被使用。
  • type="text/css" type 属性规定被链接资源的 MIME 类型。根据试验这个属性没有的时候也能正常工作?
  • href="mystyle.css" 告知了 CSS 的地址。
  • 注意 <link> 标签没有对应的结束标签。这意味着你不需要在结尾再来一个 </link>

浏览器会从文件 mystyle.css 中读到样式声明,并根据它来格式文档。你可以想象成,把 CSS 文件插入到 html 文件的 head > style 中。

下面是一个样式表文件的例子:

1hr {color:sienna;}
2p {margin-left:20px;}
3body {background-image:url("/images/back40.gif");}

2.3 基本的 CSS 参数表

1)背景 Background
KeysExample ValuesMeaning
background-color#b0c4de设置背景颜色
background-imageurl('bg.png')设置背景图片
background-repeatrepeat-x设置背景平铺方式
background-attachmentno / fixed设置背景图像是否固定或者随着页面的其余部分滚动
background-positionright top设置背景贴合位置

当使用简写属性时,属性值的顺序为上述 Keys 的列顺序。例如:

1body {background:#ffffff url('img_tree.png') no-repeat right top;}
2)文本 Text
KeysExample ValuesMeaning
colorrgb(255,0,0)设置文字颜色
text-aligncenter / right / justify(等宽)文本对齐方式
text-indent3px设置文本缩进
line-height200%设置文字行高
text-decorationunderline(下划线)/ blink(闪烁)向文本添加修饰

更多文本属性参见 这里

3)字体 Font
KeysExample ValuesMeaning
font-family"Times New Roman", Times, serif设置文本字体系列
font-styleitalic / normal设置字体样式属性
font-size14px / 2.5em / 90%设置文本字体大小

提示:

  • font-family 属性应该设置几个字体名称作为一种「后备」机制,如果浏览器不支持第一种字体,将尝试下一种字体。
  • font-size 换算:px / 16 = em。
  • 同样的,可以使用 font:15px arial,sans-serif; 类似语句一次性设定某个文本的字体属性。

我们定制链接的样式时,采用下列语句:

1<style>
2    a:link {color:#000000;}      /* 未访问链接*/
3    a:visited {color:#00FF00;}  /* 已访问链接 */
4    a:hover {color:#FF00FF;}  /* 鼠标移动到链接上 */
5    a:active {color:#0000FF;}  /* 鼠标点击时 */
6</style>

{} 内部的内容和 2)3)通用。不同的是,在进行选择的时候,链接这一元素 a 被分为了四类:link, visited, hover & active。它们分别代表链接的四种状态,而我们也可以为这四种状态分别编写不同的样式。

5)列表 List

让我们先复习一下有序列表和无序列表的语法。有序列表是

1<ol>
2  <li>Coffee</li>
3  <li>Tea</li>
4</ol>

而无序列表是

1<ul>
2  <li>Coffee</li>
3  <li>Tea</li>
4</ul>
KeysExample ValuesMeaning
list-style-typecircle / square确定 无序 列表的编号样式
list-style-typeupper-roman / lower-alpha确定 有序 列表的编号样式
list-style-imageurl('a.gif')将无序列表的编号换成一个小图像
6)表格 Table

2.4 CSS 盒子模型

  • 盒子模型(Box Model)简介:

    • Margin | 清除边框外的区域,外边距是透明的。
    • Border | 围绕在内边距和内容外的边框。
    • Padding | 清除内容周围的区域,内边距是透明的。
    • Content | 盒子的内容,显示文本和图像。

  • 盒子模型实例:

     1<!DOCTYPE html>
     2<html>
     3<head>
     4<meta charset="utf-8"> 
     5<style>
     6div {
     7    background-color: lightgrey;
     8    width: 300px;
     9    border: 25px solid green;
    10    padding: 25px;
    11    margin: 25px;
    12}
    13</style>
    14</head>
    15<body>
    16
    17<h2>盒子模型演示</h2>
    18<p>CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。</p>
    19<div>这里是盒子内的实际内容。有 25px 内间距,25px 外间距、25px 绿色边框。</div>
    20
    21</body>
    22</html>
    

    运行结果如下(注意 margin 和 padding 是完全不可见的):

    这里是盒子内的实际内容。有 25px 内间距,25px 外间距、25px 绿色边框。