CSS概述
1、CSS指层叠样式表 (Cascading Style Sheets)
2、样式定义如何显示 HTML 元素
3、样式通常存储在样式表中
4、把样式添加到HTML 4.0 中,是为了解决内容与表现分离的问题
5、外部样式表可以极大提高工作效率
6、外部样式表通常存储在 CSS 文件中
7、多个样式定义可层叠为一
用途
1、HTML标签原本被设计为用于定义文档内容。通过使用<h1>、<p>、<table>这样的标签,HTML的初衷是表达“这是标题”、“这是段落”、“这是表格”之类的信息。同时文档布局由浏览器来完成,而不使用任何的格式化标签。由于两种主要的浏览器(Netscape 和 Internet Explorer)不断地将新的HTML标签和属性(比如字体标签和颜色属性)添加到HTML规范中,创建文档内容清晰地独立于文档表现层的站点变得越来越困难。因此为了解决这个问题,所有的主流浏览器均支持层叠样式表
2、样式表定义如何显示HTML元素,样式通常保存在外部的.css文件中。通过仅仅编辑一个简单的CSS文档,外部样式表使你有能力同时改变站点中所有页面的布局和外观
3、样式表允许以多种方式规定样式信息。样式可以规定在单个的HTML元素中,在HTML页的头元素中,或在一个外部的CSS文件中。甚至可以在同一个HTML文档内部引用多个外部样式表
层叠次序
一般而言,所有的样式会根据下面的规则层叠于一个新的虚拟样式表中,其中数字4拥有最高的优先权
1、浏览器缺省设置
2、外部样式表
3、内部样式表(位于<head>标签内部)
4、内联样式(在HTML元素内部)
因此,内联样式(在HTML元素内部)拥有最高的优先权,这意味着它将优先于以下的样式声明:<head> 标签中的样式声明,外部样式表中的样式声明,或者浏览器中的样式声明(缺省值)
CSS基础语法
CSS规则由两个主要的部分构成:选择器,以及一条或多条声明(这种是写在head标签中的格式)
selector {declaration1; declaration2; ... declarationN }
注:
1、选择器通常是您需要改变样式的HTML元素
2、每条声明由一个属性和一个值组成
3、属性是您希望设置的样式属性:每个属性有一个值。属性和值被冒号分开selector {property: value}
4、请使用花括号来包围声明
例1:
h1 {color:red; font-size:14px;}
注:如果值为若干单词,则要给值加引号,如p {font-family: "sans serif";}
多重声明
1、如果要定义不止一个声明,则需要用分号将每个声明分开
2、最后一条声明后是不需要加分号的,只是通常大家都会在每条声明的末尾都加上分号(包括末尾的声明后)
3、应该在每行只描述一个属性,这样可以增强样式定义的可读性,如:
例2:
p { text-align: center; color: black; font-family: arial; }
空格和大小写
1、大多数样式表包含不止一条规则,而大多数规则包含不止一个声明。多重声明和空格的使用使得样式表更容易被编辑
2、是否包含空格不会影响CSS在浏览器的工作效果
3、CSS对大小写不敏感。不过存在一个例外:如果涉及到与HTML文档一起工作的话,class和id名称对大小写是敏感的
例3:
body { color: #000; background: #fff; margin: 0; padding: 0; font-family: Georgia, Palatino, serif; }
内部样式表
1、在<head>标签对中通过<style>标签定义内部样式表,并为<style>标签增加属性type="text/css"
2、在<head>标签中可以对整个HTML文档中的标签对进行样式设置(<style>标签对),格式为:标签名{属性:属性值;}
内联样式
1、需要对某个标签对设置样式时,可以使用内联样式,格式为:标签名 style="属性:属性值;" (在开始标签中设置样式属性)
2、当设置了内部样式表但未设置内联样式时,就使用的是内部样式表;当设置了内部样式表且设置了内联样式时,就使用的是内联样式
例4:
<html> <head> <meta charset="utf-8"> <style type="text/css"> p{background-color: gray; padding: 20px;} </style> </head> <body> <p style="background-color: red">这是段落</p> <p class="no2">这个段落设置了内边距。</p> </body> </html>
CSS高级语法
选择器的分组
你可以对选择器进行分组,这样被分组的选择器就可以分享相同的声明。用逗号将需要分组的选择器分开
例5:
<html> <head> <style type="text/css"> h1,h2,h3,h4,h5,h6,p{color: green;} </style> </head> <body> <h1>这是标题 1</h1> <h2>这是标题 2</h2> <h6>这是标题 2</h6> <p>这是段落</p> </body> </html>
继承
根据CSS语法规则子元素将从父元素继承属性
例6:
<html> <head> <style type="text/css"> body { font-family: Verdana, sans-serif; color: green; } </style> </head> <body> <h1>这是一个标题</h1> <p class="normal">这是一个段落</p> <p class="italic">这是一个段落</p> <ol style="color: red";> <li>Apples</li> <li>Bananas</li> <li>Lemons</li> <li>Oranges</li> </ol> </body> </html>
注:
1、上面例子中:我们只是对body标签对进行了属性设置,未对其子标签(元素:h1、p)设置属性,但根据输出结果可以看出其子标签也使用(继承)了父标签的属性
2、通过CSS继承,子元素将继承最高级元素(在本例中是body)所拥有的属性。不需要另外的规则,所有 body 的子元素都应该显示 Verdana 字体,子元素的子元素也一样。并且在大部分的现代浏览器中,也确实是这样的。
3、这些子元素诸如p, td, ul, ol, ul, li, dl, dt,和dd也会继承父元素的样式
4、如果不希望子元素继承父元素的样式,则可以对子元素设置特定的样式
例6_1:
<html> <head> <style type="text/css"> body { font-family: Verdana, sans-serif; color: green; } p.italic {font-style:oblique; color: blue; } </style> </head> <body> <h1>这是一个标题</h1> <p class="normal">这是一个段落</p> <p class="italic">这是一个段落</p> <ol style="color: red";> <li>Apples</li> <li>Bananas</li> <li>Lemons</li> <li style="color: green";>Oranges</li> </ol> </body> </html>
如何插入样式表
当读到一个样式表时,浏览器会根据它来格式化HTML文档。插入样式表的方法有三种:
外部样式表
当样式需要应用于很多页面时,外部样式表将是理想的选择。在使用外部样式表的情况下,你可以通过改变一个文件来改变整个站点的外观。每个页面使用<link>标签链接到样式表。<link>标签在(文档的)头部
例7:
<head> <link rel="stylesheet" type="text/css" href="mystyle.css" /> </head>
注:
1、浏览器会从文件mystyle.css中读到样式声明,并根据它来格式文档
2、外部样式表应用于多个HTML文档,对于某个HTML而言它是作用于整个HTML文档的(把内部样式写在了一个外部文档里面,只是声明方式不一样?)
3、外部样式表可以在任何文本编辑器中进行编辑。文件不能包含任何的html标签。样式表应该以.css扩展名进行保存
4、link 元素是空元素,它仅包含属性
5、此元素只能存在于head部分,不过它可出现任何次数
例7_1:
body {background-image: url("images/back40.gif");} hr {color: sienna;} p {margin-left: 20px;}
注:
不要在属性值与单位之间留有空格。假如将"margin-left: 20px" 写成了"argin-left: 20 px",它可能在在Mozilla/Firefox中却无法正常工作
内部样式表
当单个文档需要特殊的样式时,就应该使用内部样式表。你可以使用<style>标签在文档头部定义内部样式表,就像这样:
例8:
<head> <style type="text/css"> hr {color: sienna;} p {margin-left: 20px;} body {background-image: url("images/back40.gif");} </style> </head>
内联样式
由于要将表现和内容混杂在一起,内联样式会损失掉样式表的许多优势。请慎用这种方法,例如当样式仅需要在一个元素上应用一次时。要使用内联样式,需要在相关的标签内使用样式(style)属性。Style属性可以包含任何CSS属性
例9:
<p style="color: sienna; margin-left: 20px"> This is a paragraph </p>
多重样式
如果某些属性在不同的样式表中被同样的选择器定义,那么属性值将从更具体的样式表中被继承过来,优先级为内联->内部->外部
例10:
外部样式表拥有针对 h3 选择器的三个属性:
<p style="color: sienna; margin-left: 20px"> This is a paragraph </p>
而内部样式表拥有针对 h3 选择器的两个属性
h3 { text-align: right; font-size: 20pt; }
假如拥有内部样式表的这个页面同时与外部样式表链接,那么h3得到的样式是:
color: red;
text-align: right;
font-size: 20pt;
派生选择器
1、通过依据元素在其位置的上下文关系来定义样式;在CSS1中,通过这种方式来应用规则的选择器被称为上下文选择器,这是由于它们依赖于上下文关系来应用或者避免某项规则
2、派生选择器允许你根据文档的上下文关系来确定某个标签的样式。通过合理地使用派生选择器,我们可以使 HTML 代码变得更加整洁
例7:希望列表中的strong元素变为斜体字,而不是通常的粗体字
<html> <head> <style type="text/css"> li strong { font-style: italic; font-weight: normal; } </style> </head> <body> <p> <strong>我是粗体字,不是斜体字,因为我不在列表当中,所以这个规则对我不起作用</strong> </p> <ol> <li> <strong>我是斜体字。这是因为 strong 元素位于 li 元素内。</strong> </li> <li>我是正常的字体。</li> </ol> </body> </html>
注:
1、首先看在定义样式时的定义方法:li strong表示li标签下的strong,即需要满足这两个条件才会生效
2、上面的例子中,只有li元素中的strong元素的样式为斜体字,无需为strong元素定义特别的class或id
例7_1:
<html> <head> <style type="text/css"> strong { color: red; } h2 { color: red; } h2 strong { color: blue; } </style> </head> <body> <p>The strongly emphasized word in this paragraph is<strong>red</strong>.</p> <h2>This subhead is also red.</h2> <h2>The strongly emphasized word in this subhead is<strong>blue</strong>.</h2> </body> </html>