• CSS
    • 简介
      • 代码结构
    • 样式与目标
    • 选择器
    • 更有趣的 CSS

    CSS

    如果说 HTML 是建筑的框架,CSS 就是房子的装修。那么 JavaScript 呢,我听到的最有趣的说法是小三——还是先让我们回到代码上来吧。

    下面就是我们之前说到的代码,CSS 将 Red 三个字母变成了红色。

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. </head>
    5. <body>
    6. <p id="para" style="color:red">Red</p>
    7. </body>
    8. <script type="text/javascript" src="app.js"></script>
    9. </html>

    只是,

    1. var para=document.getElementById("para");
    2. para.style.color="blue";

    将字体变成了蓝色,CSS+HTML 让页面有序的工作着,但是 JavaScript 却打乱了这些秩序,有着唯恐世界不乱的精彩,也难怪被冠以小三之名了——或许终于可以理解,为什么以前人们对于 JavaScript 没有好感了——不过这里要讲的是正室,也就是 CSS,这时还没有 JavaScript。

    Red Fonts

    简介

    这不是一篇专业讲述 CSS 的书籍,所以我不会去说 CSS 是怎么来的,有些东西我们既然可以很容易从其他地方知道,也就不需要花太多时间去重复。诸如重构等这些的目的之一也在于去除重复的代码,不过有些重复是不可少的,也是有必要的,而通常这些东西可能是由其他地方复制过来的。

    到目前为止我们没有依赖于任何特殊的硬件或者是软件,对于我们来说我们最基本的需求就是一台电脑,或者可以是你的平板电脑,当然也可以是你的智能手机,因为他们都有个浏览器,而这些都是能用的,对于我们的 CSS 来说也不会有例外的。

    CSS(Cascading Style Sheets),到今天我也没有记得他的全称,CSS 还有一个中文名字是层叠式样式表,事实上翻译成什么可能并不是我们关心的内容,我们需要关心的是他能做些什么。作为三剑客之一,它的主要目的在于可以让我们方便灵活地去控制 Web 页面的外观表现。我们可以用它做出像淘宝一样复杂的界面,也可以像我们的书本一样简单,不过如果要和我们书本一样简单的话,可能不需要用到 CSS。HTML 一开始就是依照报纸的格式而设计的,我们还可以继续用上面说到的编辑器,又或者是其他的。如果你喜欢 DreamWeaver 那也不错,不过一开始使用 IDE 可无助于我们写出良好的代码。

    忘说了,CSS 也是有版本的,和 Windows,Linux 内核等等一样,但是更新可能没有那么频繁,HTML 也是有版本的,JavaScript 也是有版本的,复杂的东西不是当前考虑的内容。

    代码结构

    对于我们的上面的 Red 示例来说,如果没有一个好的结构,那么以后可能就是这样子。

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. </head>
    5. <body>
    6. <p style="font-size: 22px;color: #f00;text-align: center;padding-left: 20px;">如果没有一个好的结构</p>
    7. <p style="font-size: 44px;color: #3ed;text-indent: 2em;padding-left: 2em;">那么以后可能就是这样子。。。。</p>
    8. </body>
    9. </html>

    虽然我们看到的还是一样的:

    No Style

    于是我们就按各种书上的建议重新写了上面的代码

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <title>CSS example</title>
    5. <style type="text/css">
    6. .para{
    7. font-size: 22px;
    8. color: #f00;
    9. text-align: center;
    10. padding-left: 20px;
    11. }
    12. .para2{
    13. font-size: 44px;
    14. color: #3ed;
    15. text-indent: 2em;
    16. padding-left: 2em;
    17. }
    18. </style>
    19. </head>
    20. <body>
    21. <p class="para">如果没有一个好的结构</p>
    22. <p class="para2">那么以后可能就是这样子。。。。</p>
    23. </body>
    24. </html>

    总算比上面好看也好理解多了,这只是临时的用法,当文件太大的时候,正式一点的写法应该如下所示:

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <title>CSS example</title>
    5. <style type="text/css" href="style.css"></style>
    6. </head>
    7. <body>
    8. <p class="para">如果没有一个好的结构</p>
    9. <p class="para2">那么以后可能就是这样子。。。。</p>
    10. </body>
    11. </html>

    我们需要

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <title>CSS example</title>
    5. <link href="./style.css" rel="stylesheet" type="text/css" />
    6. </head>
    7. <body>
    8. <p class="para">如果没有一个好的结构</p>
    9. <p class="para2">那么以后可能就是这样子。。。。</p>
    10. </body>
    11. </html>

    然后我们有一个像 app.js 一样的 style.css 放在同目录下,而他的内容便是

    1. .para{
    2. font-size: 22px;
    3. color: #f00;
    4. text-align: center;
    5. padding-left: 20px;
    6. }
    7. .para2{
    8. font-size: 44px;
    9. color: #3ed;
    10. text-indent: 2em;
    11. padding-left: 2em;
    12. }

    这代码和 JS 的代码有如此多的相似

    1. var para={
    2. font_size: '22px',
    3. color: '#f00',
    4. text_align: 'center',
    5. padding_left: '20px',
    6. }

    而22px、20px以及#f00都是数值,因此:

    1. var para={
    2. font_size: 22px,
    3. color: #f00,
    4. text_align: center,
    5. padding_left: 20px,
    6. }

    目测差距已经尽可能的小了,至于这些话题会在以后讨论到,如果要让我们的编译器更正确的工作,那么我们就需要非常多这样的符号,除非你乐意去理解:

    1. (dotimes (i 4) (print i))

    总的来说我们减少了符号的使用,但是用 lisp 便带入了更多的括号,不过这是一种简洁的表达方式,也许我们可以在其他语言中看到。

    1. \d{2}/[A-Z][a-z][a-z]/\d{4}

    上面的代码,是为了从一堆数据中找出“某日/某月/某年”。如果一开始不理解那是正则表达式,就会觉得那个很复杂。

    这门语言可能是为设计师而设计的,但是设计师大部分还是不懂编程的,不过相对来说这门语言还是比其他语言简单易懂一些。

    样式与目标

    如下所示,就是我们的样式

    1. .para{
    2. font-size: 22px;
    3. color: #f00;
    4. text-align: center;
    5. padding-left: 20px;
    6. }

    我们的目标就是

    如果没有一个好的结构

    所以样式和目标在这里牵手了,问题是他们是如何在一起的呢?下面就是 CSS 与 HTML 沟通的重点所在了:

    选择器

    我们用到的选择器叫做类选择器,也就是 class,或者说应该称之为 class 选择器更合适。与类选择器最常一起出现的是 ID 选择器,不过这个适用于比较高级的场合,诸如用 JS 控制 DOM 的时候就需要用到 ID 选择器。而基本的选择器就是如下面的例子:

    1. p.para{
    2. color: #f0f;
    3. }

    将代码添加到 style.css 的最下面会发现“如果没有一个好的结构”变成了粉红色,当然我们还会有这样的写法

    1. p>.para{
    2. color: #f0f;
    3. }

    为了产生上面的特殊的样式,虽然不好看,但是我们终于理解什么叫层叠样式了,下面的代码的权重比上面高,也因此有更高的优先规则。

    而通常我们可以通过一个

    1. p{
    2. text-align: left;
    3. }

    这样的元素选择器来给予所有的 p 元素一个左对齐。

    还有复杂一点的复合型选择器,下面的是 HTML 文件

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <title>CSS example</title>
    5. <link href="./style.css" rel="stylesheet" type="text/css" />
    6. </head>
    7. <body>
    8. <p class="para">如果没有一个好的结构</p>
    9. <div id="content">
    10. <p class="para2">那么以后可能就是这样子。。。。</p>
    11. </div>
    12. </body>
    13. </html>

    还有 CSS 文件

    1. .para{
    2. font-size: 22px;
    3. color: #f00;
    4. text-align: center;
    5. padding-left: 20px;
    6. }
    7. .para2{
    8. font-size: 44px;
    9. color: #3ed;
    10. text-indent: 2em;
    11. padding-left: 2em;
    12. }
    13. p.para{
    14. color: #f0f;
    15. }
    16. div#content p {
    17. font-size: 22px;
    18. }

    更有趣的 CSS

    一个包含了 para2 以及 para_bg 的例子

    1. <div id="content">
    2. <p class="para2 para_bg">那么以后可能就是这样子。。。。</p>
    3. </div>

    我们只是添加了一个黑色的背景

    1. .para_bg{
    2. background-color: #000;
    3. }

    重新改变后的网页变得比原来有趣了很多,所谓的继承与合并就是上面的例子。

    我们还可以用 CSS3 做出更多有趣的效果,而这些并不在我们的讨论范围里面,因为我们讨论的是 be a geek。

    或许我们写的代码都是那么的简单,从 HTML 到 JavaScript,还有现在的 CSS,只是总有一些核心的东西,而不是去考虑那些基础语法,基础的东西我们可以在实践的过程中一一发现。但是我们可能发现不了,或者在平时的使用中考虑不到一些有趣的用法或者说特殊的用法,这时候可以通过观察一些精致设计的代码中学习到。复杂的东西可以变得很简单,简单的东西也可以变得很复杂。