基于Eclipse平台的JSP应用教程(第2版)
上QQ阅读APP看书,第一时间看更新

1.2 CSS

我们不需要使用复杂的工具来创建CSS文件,可以使用文本编辑器或者Web开发工具来创建。无论采用哪种方式,都是要创建一个以.css为扩展名的文件。

1.2.1 CSS基本语法

CSS的语法由三部分构成:选择符(selector)、属性(property)和属性值(value)。语法格式如下:

        选择符 {
            属性:属性值
        }

选择符用来指定针对哪个HTML标签应用样式表,任何一个HTML标签都可以是一个CSS的选择符。如:

        body {
            color: blue
        }

其中,body是选择符,color是属性,blue是属性值。该规则表示在网页body标签里的内容为蓝色。为选择符指定多个样式,需要在属性之间用分号加以分隔。下面的选择符p就包含两个样式:一个是对齐方式居中;另一个是字体颜色为红。

        p {
            text-align: center;
            color: red
        }

可以将相同的属性和属性值赋予多个选择符(组合)。选择符之间用逗号分隔。例如:

        h1, h2, h3, h4, h5, h6
        {
            /∗字体颜色为蓝色∗/
            color: blue
        }

该规则是将所有正文标题(<h1>到<h6>)的字体颜色都变成蓝色。“/∗”和“∗/”之间的内容为CSS的注释,但要注意不要将注释嵌入到选择符语句里面。

1.2.2 在网页中添加CSS的方法

CSS在网页中按其位置可以分为三种:内嵌样式、内部样式和外部样式。

1. 内嵌样式

内嵌样式是将样式代码写在标记里面的,使用style作为属性,样式语句作为属性值。内嵌样式只对所在标记有效。如:

        <p style="font-size:20pt; color:red">
            这个 style定义<p></p>里面的文字是 20pt字号,字体颜色是红色。
        </p>

2. 内部样式

内部样式是使用<style>标记将样式代码写在HTML的<head></head>里面的。内部样式只对所在网页有效。如:

        <html>
        <head>
        <style type="text/css">
            h1 {
                border-width:1;
                text-align:center;
                color:red
            }
        </style>
        </head>
        <body>
            <h1>这个标题使用了 style。</h1>
        </body>
        </html>

3. 外部样式

1)链接样式表

将样式代码写在一个以.css为扩展名的CSS文件里,然后在每个需要用到这些样式的网页里引用这个CSS文件。通过HTML的link元素将外部的样式文件链接到网页里。如:

        <! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Insert title here</title>
        <link rel="stylesheet" href="mystyle.css" type="text/css" />
        </head>
        <body>
            <h1>标题</h1>
            <p>段落内容</p>
        </body>
        </html>

其中,rel和type属性表明这是一个样式文件,href属性指定了外部样式文件的相对地址。外部的样式文件不能含有任何像<head>或<style>这样的HTML标记,样式表文件仅仅由样式规则或声明组成。mystyle.css文件内容如下:

        p{
            background: yellow;
        }

2)导入样式表

在<style>标签内,使用@import导入外部样式文件。例如:

        <! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Insert title here</title>
        <style type="text/css">
            <! --
            @import url("mystyle.css");
            h1{color:red}
            -->
        </style>
        </head>
        <body>
            <h1>标题</h1>
            <p>段落内容</p>
        </body>
        </html>

使用外部样式,相对于内嵌样式和内部样式,有以下优点:

(1)样式代码可以复用。一个外部CSS文件,可以被很多网页共用。

(2)便于修改。如果要修改样式,只需要修改CSS文件,而不需要修改每个网页。

(3)提高网页显示的速度。如果样式写在网页里,会降低网页显示的速度,如果网页引用一个CSS文件,这个CSS文件已经在缓存区(其他网页早已经引用过),网页显示的速度就比较快。

因此,在实际开发中一般使用外部样式,不推荐使用内嵌样式和内部样式。

1.2.3 选择符的分类

1. 普通选择符

任意的HTML标记都可以作为选择符,这样的选择符称为普通选择符。其样式仅仅作用在选择符指定的HTML标记上。如:

        p {
            color:red
        }

2. 类选择符

HTML标记名加上类名,中间用“.”号分开,类名供该HTML标记的class属性使用。希望<p>有两种样式:一种是居中对齐;另一种是居右对齐。那么可以写成如下的样式:

        p.right {
            text-align:right
        }
        p.center {
            text-align:center
        }

其中,right和center就是两个class。在网页中可以引用这两个class设置段落的对齐方式。示例代码如下:

        <p class="center">这一段内容是居中显示。</p>
        <p class="right">这一段内容是居右显示。</p>

省略HTML标记名只写“.类名”表示这个类名适用于所有的HTML标记的class属性,这种选择符称为通用类选择符。

3. id选择符

HTML标记名加上id名,中间用“#”号分开,id名供该HTML标记的id属性使用。如:

        p#svp {
            font-size:12pt
        }

其中,svp是一个id选择符的名字,在网页中可以引用这个id选择符设置<p>的样式。示例代码如下:

        <p id="svp">这一段话的字体大小为 12pt。</p>

如果省略HTML标记名只写“#id名”表示这个id名适用于所有的HTML标记的id属性,这种选择符称为通用id选择符。

1.2.4 伪类及伪对象

伪类及伪对象由CSS自动支持,属于CSS的一种扩展类型。名称不能被用户自定义,使用时只能按照标准格式进行应用。

1. 超链接伪类

超链接伪类共有4个,它们是a:link、a:visited、a:hover和a:active。a:link表示未被访问的链接,a:visited表示已被访问过的链接,a:hover表示鼠标悬浮在其上的链接,a:active表示鼠标点中激活链接。由于优先级的关系,在写超链接<a>的CSS时,一定要按照a:link、a:visited、a:hover、a:active的顺序书写。如:

        a:link {color: red}          /∗未被访问的链接 红色∗/
        a:visited {color: green}     /∗已被访问过的链接 绿色∗/
        a:hover {color: yellow}      /∗鼠标悬浮在其上的链接 黄色∗/
        a:active {color: blue}       /∗鼠标点中激活的链接 蓝色∗/

2. 常用伪对象

:first-letter设置对象内的第一个字符的样式表属性,如设置段落p标记的第一个字符的样式代码如下:

        p:first-letter {
            color: red;
            font-size: 16px
        }

:first-line设置对象内的第一行的样式表属性,如设置body对象里第一行的样式代码如下:

        body:first-line {
            color: red;
            font-size: 16px
        }

1.2.5 常见的DIV+CSS布局类型

DIV+CSS布局是当前网页布局中最流行的类型之一。

1. DIV

DIV是一个放置内容的容器,用于大面积、大区域的块状排版,样式需要编写CSS来实现。示例代码如下:

        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>div_css1</title>
        <style type="text/css">
        mainBox {
            border: 1px dashed #0099CC;
            margin: 3px;
            padding: 0px;
            float: left;
            height: 300px;
            width: 192px;
        }
        mainBox h3 {
            float: left;
            height: 20px;
            width: 179px;
            color: #FFFFFF;
            padding: 6px 3px 3px 10px;
            background-color: #0099CC;
            font-size: 16px;
        }
        mainBox p {
            line-height: 1.5em;

            text-indent: 2em;
            margin: 35px 5px 5px 5px;
        }
        </style>
        </head>
        <body>
            <div class="mainBox">
                <h3>前言</h3>
                <p>正文内容</p>
            </div>
            <div class="mainBox">
                <h3>CSS盒子模式</h3>
                <p>正文内容</p>
            </div>
            <div class="mainBox">
                <h3>转变思想</h3>
                <p>正文内容</p>
            </div>
          </body>
        </html>

上述代码运行效果如图1.11所示。

图1.11 DIV示例

2. 一列固定

宽度的属性值是固定像素,无论怎样改变浏览器窗口的大小,DIV的宽度都不改变。示例代码如下:

        <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <title>div_css2</title>
          <style type="text/css">
          oneFixed {
}

      border: 1px dashed #0099CC;
      background-color: cyan;
      height: 300px;
      width: 300px
    </style>
    </head>
    <body>
      <div class="oneFixed">
          一列固定宽度
      </div>
    </body>
  </html>

上述代码运行效果如图1.12所示。

图1.12 一列固定宽度

3. 两列固定宽度

两列的布局需要用到两个DIV,宽度的属性值是固定像素。示例代码如下:

    <html>
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>div_css3</title>
      <style type="text/css">
      #left {
        border: 1px dashed #0099CC;
        background-color: cyan;
        height: 200px;
        width: 300px;
        float: left
      }
      #right{
        border: 1px dashed #0099CC;
        background-color: LightSkyBlue;
        height: 200px;
        width: 300px;
        float: left
      }
      </style>
      </head>
      <body>
        <div id="left">
            左边
        </div>
        <div id="right">
            右边
        </div>

          </body>
        </html>

上述代码的运行效果如图1.13所示。

图1.13 两列固定宽度

4. 三列浮动中间宽度自适应

三列浮动中间宽度自适应就是要求左边DIV固定宽度且左显示,右边DIV固定宽度且右显示,中间DIV根据左右DIV的间距变化宽度自适应。示例代码如下:

        <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <title>div_css4</title>
          <style type="text/css">
          body{
            margin: 0px
          }
          #left {
            border: 1px solid #0099CC;
            background-color: cyan;
            height: 300px;
            width: 100px;
            position: absolute;
            top: 0px;
            left: 0px
          }
          #center{
            border: 1px solid #0099CC;
            background-color: #7FFFAA;
            margin-left: 100px;
            margin-right: 100px;
            height: 300px
          }
          #right{
            border: 1px solid #0099CC;
            background-color: cyan;
            height: 300px;

            width: 100px;
            position: absolute;
            right: 0px;
            top: 0px
          }
          </style>
          </head>
          <body>
            <div id="left">
                左边
            </div>
            <div id="center">
                中间自适应
            </div>
            <div id="right">
                右边
            </div>
          </body>
        </html>

上述代码的运行效果如图1.14所示。

图1.14 三列浮动中间宽度自适应

5. 三行两列居中高度自适应

三行两列居中高度自适应就是要求整个网页内容居中,第一行DIV固定高度且居顶端显示,第三行DIV固定高度且居底端显示,中间DIV根据内容的变化高度自适应。示例代码如下:

        <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <title>div_css5</title>
          <style type="text/css">
          body {
    background: #999;
    text-align: center;
    color: #333;
    font-family: arial, verdana, sans-serif;
  }

  #header {
    width: 776px;
    margin-right: auto;
    margin-left: auto;
    padding: 0px;
    background: #EEE;
    height: 60px;
    text-align: left;
  }

  #contain {
    margin-right: auto;
    margin-left: auto;
    width: 776px;
  }

  #mainbg {
    width: 776px;
    padding: 0px;
    background: #60A179;
    float: left;
  }

  #right {
    float: right;
    margin: 2px 0px 2px 0px;
    padding: 0px;
    width: 574px;
    background: #ccd2de;
    text-align: left;
  }

  #left {
    float: left;
    margin: 2px 2px 0px 0px;
    padding: 0px;
    background: #F2F3F7;
    width: 200px;
    text-align: left;
    }

    #footer {
      clear: both;
      width: 776px;
      margin-right: auto;
      margin-left: auto;
      padding: 0px;
      background: #EEE;
      height: 60px;
    }

    .text {
      margin: 0px;
      padding: 20px;
    }
    </style>
    </head>
    <body>
      <div id="header">header</div>
      <div id="contain">
          <div id="mainbg">
              <div id="right">
                  <div class="text">
                      right
                      <p>1</p>
                      <p>1</p>
                      <p>1</p>
                      <p>1</p>
                      <p>1</p>
                  </div>
              </div>
              <div id="left">
                  <div class="text">left</div>
              </div>
          </div>
      </div>
      <div id="footer">footer</div>
    </body>
  </html>

上述代码的运行效果如图1.15所示。

图1.15 三行两列居中高度自适应

1.2.6 实践环节——页面布局

按照下面的步骤编写网页practice1_2.html。

步骤1:使用DIV定义结构。

一个典型的版面分栏结构包括页头、导航栏、内容、版权。

结构代码如下:

        <div id="header"></div>
        <div id="navigator"></div>
        <div id="content"></div>
        <div id="footer"></div>

将这4个盒子装进一个更大的盒子——body中,如下:

        <body>
            上面 4行代码
        </body>

步骤2:定义body的属性。

        body {
            font-family: Arial, Helvetica, sans-serif;
            font-size: 12px;
            margin: 0px auto;
            height: auto;
            width: 800px;
            border: 1px solid #006633;
        }

步骤3:定义页头(header)的属性。

        #header {
            height: 100px;
            width: 800px;

      background-image: url(plane.jpg);
      background-repeat: no-repeat;
      margin: 0px 0px 3px 0px;
  }

步骤4:定义导航栏(navigator)的属性。

  #navigator {                        /∗定义一个导航栏的长盒子∗/
      height: 25px;
      width: 800px;
      font-size: 14px;
      list-style-type: none;
            /∗让 nav这个大盒子下面的小盒子 li列表样式不显示,这对于标准浏览器很重要∗/
  }

  #navigator li {
      float: left; /∗让 li这些小盒子左对齐∗/
  }

  #navigator li a {
      color: #000000;
      text-decoration: none; /∗让 li盒子里面的链接样式没有下画线∗/
      padding-top: 4px;
      display: block;
            /∗让 li里面的链接块状呈现,就像一个按钮,而不必一定要点中链接文字才起作用∗/
      width: 131px;
      height: 22px;
      text-align: center;
      background-color: #009966;
      margin-left: 2px;
  }

  #navigator li a:hover {
      background-color: #006633; /∗鼠标移到链接盒子上面时改变盒子背景色∗/
      color: #FFFFFF;
  }

步骤5:定义内容部分(content)的属性。

  #content {
      height: auto;
      width: 780px;
      line-height: 1.5em;
      padding: 10px;
  }

  #content p {
      text-indent: 2em;

    }
    #content h3 {
        font-size: 16px;
        margin: 10px;
    }

步骤6:定义页脚(footer)的属性。

    #footer {
        height: 50px;
        width: 780px;
        line-height: 2em;
        text-align: center;
        background-color: #009966;
        padding: 10px;
    }

步骤7:定义各标记的边界和填充(开头处)。

    ∗ {
        margin: 0px;
        padding: 0px;
    }

步骤8:结构代码如下。

    <body>
        <div id="header"></div>
        <div id="navigator">
            <ul id="navigator">
                <li><a href="#">首页</a></li>
                <li><a href="#">文章</a></li>
                <li><a href="#">相册</a></li>
                <li><a href="#">Blog</a></li>
                <li><a href="#">论坛</a></li>
                <li><a href="#">帮助</a></li>
            </ul>
        </div>
        <div id="content">
            <h3>前言</h3>
            <p>CSS是英文 Cascading Style Sheet的缩写,又称为“层叠样式表”,简称为样式表。
    它是W3C定义的标准,一种用来为结构化文档(如HTML文档)添加样式(字体、间距和背景等)的计算
    机语言。</p>
            <h3>理解 DIV+CSS布局</h3>
            <p>简单地说,DIV+CSS(DIV CSS)被称为“Web标准”中常用术语之一。首先认识 DIV是
    用于搭建 HTML网页结构(框架)标签,再认识 CSS是用于创建网页表现(样式/美化)样式表统称,通
    过 CSS来设置 DIV标签样式,通常称为 DIV+CSS。
            </p>

            </div>
            <div id="footer">
                <p>关于|广告服务|招聘|客服中心|Q Q留言|网站管理|会员登录|购物车</p>
                <p>Copyright ©清华大学出版社</p>
            </div>
        </body>

步骤9:页面运行效果如图1.16所示。

图1.16 DIV+CSS布局