CSS简介

CSS

  • CSS 指层叠样式表 (Cascading Style Sheets)
  • 把样式添加到 HTML 4.0 中,是为了解决内容与表现分离的问题
  • 多个样式定义可层叠为一

当同一个 HTML 元素被不止一个样式定义时,会使用哪个样式呢?

  • 一般而言,所有的样式会根据下面的规则层叠于一个新的虚拟样式表中,其中数字 4 拥有最高的优先权。
  • 1.浏览器缺省设置
  • 2.外部样式表
  • 3.内部样式表(位于 标签内部)
  • 4.内联样式(在 HTML 元素内部)
    例如,外部样式表拥有针对 h3 选择器的三个属性:
h3 
{
    color: red;
    text-align: left;
    font-size: 8pt;
}

而内部样式表拥有针对 h3 选择器的两个属性:

h3 
{
    text-align: right; 
    font-size: 20pt;
}

那么 h3 得到的样式是(作用域覆盖得到):

color: red; 
text-align: right; 
font-size: 20pt;

即颜色属性将被继承于外部样式表,而文字排列(text-alignment)和字体尺寸(font-size)会被内部样式表中的规则取代。

CSS语法

selector {declaration1; declaration2; ... declarationN }

选择器通常是您需要改变样式的 HTML 元素。如:

h1 
{
     color:red; 
     font-size:14px;
     font-family: Georgia, Palatino, serif;
}


选择器的分组

对所有标题进行分组,区别于派生选择器,各元素以’,’隔开,而不是空格

h1,h2,h3,h4,h5,h6 
{
    color: green;
}


通配符选择器 [universal selector]

使用星号(*),与任何元素匹配,等价于列出了文档中所有元素的一个分组选择器:

* { color:red; }

则页面中的所有元素字体颜色都将是红色。

样式继承

根据CSS,子元素从父元素继承属性。

body 
{
    font-family: Verdana, sans-serif;
}

所有body的子元素诸如p,td,ul,ol,ul,li,dl,dt,和dd都应该显示Verdana字体(假如访问者的系统中存在该字体的话),子元素的子元素也一样。
但是并不是所有的浏览器都支持,请测试验证!

派生选择器(或后代选择器)descendant selector

派生选择器允许你根据文档的上下文关系来确定某个标签的样式,以空格隔开,如:

li strong 
{
    font-style: italic;
    font-weight: normal;
}

那么在列表(li)中的 所有 strong元素将变为斜体字。

假设有一个文档,其中有一个边栏,还有一个主区。边栏的背景为蓝色,主区的背景为白色,这两个区都包含链接列表。不能把所有链接都设置为蓝色,因为这样一来边栏中的蓝色链接都无法看到。
解决方法:

div.sidebar            { background:blue; }
div.maincontent        { background:white;}
div.sidebar a:link     { color:white;     }
div.maincontent a:link { color:blue;      }

有关后代选择器有一个易被忽视的方面,即两个元素之间的层次间隔可以是无限的
例如,如果写作 ul em,这个语法就会选择从ul元素继承的所有em元素,而不论em的嵌套层次多深。如:

<ul>
  <li>List item 1
    <ol>
      <li>List item 1-1</li>
      <li>List item 1-2</li>
      <li>List item 1-3
        <ol>
          <li>List item 1-3-1</li>
          <li>List item <em>1-3-2</em> </li> <!-- em元素将应用'ul em'样式 -->
          <li>List item 1-3-3</li>
        </ol>
      </li>
      <li>List item 1-4</li>
    </ol>
  </li>
  <li>List item 2</li>
  <li>List item 3</li>
</ul>


子元素选择器 child selector

如果您不希望选择任意的后代元素,而是希望缩小范围,只选择某个元素的子元素,可使用子元素选择器,如:

h1 > strong {color:red;}

子结合符(大于号)两边可以有空白符,这是可选的。可以解释为: 选择作为h1元素子元素的 所有 strong元素,这个规则会把第一个h1下面的两个 strong 元素变为红色,但是第二个 h1 中的 strong 不受影响:

<h1>This is <strong>very</strong> <strong>very</strong> important.</h1>
<h1>This is <em>really <strong>very</strong></em> important.</h1>

结合后代选择器和子选择器:

table.company td > p

上面的选择器会选择作为td元素子元素的所有p元素,这个td元素本身从table元素继承,该table元素有一个包含company的class属性。


相邻兄弟选择器 adjacent sibling selector

如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器。
注意:用一个结合符只能选择两个相邻兄弟中的第二个元素,如:

li + li { font-weight:bold; }
<div>
  <ul>
    <li>List item 1</li>
    <li>List item 2</li>
    <li>List item 3</li>
  </ul>
  <ol>
    <li>List item 1</li>
    <li>List item 2</li>
    <li>List item 3</li>
  </ol>
</div>

上面这个选择器只会把列表中的第二个和第三个列表项变为粗体。第一个列表项不受影响。

id选择器

id选择器可以为标有特定id的HTML元素指定特定的样式,以#来定义,如:

#red   { color:red;  } <!-- 相当于'*#red { color:red; }' --> 
#green { color:green;}
<p id="red">这个段落是红色。</p>
<p id="green">这个段落是绿色。</p>

id选择器建立派生选择器(对id元素的子元素也适用)

#sidebar p 
{
    font-style: italic;
    text-align: right;
    margin-top: 0.5em;
}

上面的样式只会应用于出现在id是sidebar的元素内的段落,如下:

<div id="sidebar">
    <p>use id descendant selector</p>
</div>

元素基于id创建选择器(只针对id元素)

div#sidebar 
{
    border: 1px dotted #000;
    padding: 10px;
}

id为sidebar的div块将使用这个样式,那些没有分配id为sidebar的div不受影响。如:

<div id="sidebar">
    <p>use id element selector</p>
</div>


类选择器

类选择器以一个点号.定义,如:

.center { text-align: center }  <!-- 相当于'*.center { text-align: center }' --> 
<h1 class="center">
    This heading will be center-aligned
</h1>

<p class="center">
    This paragraph will also be center-aligned.
</p>

class选择器创建派生选择器(对class元素的子元素也适用)

.fancy td 
{
    color: #f60;
    background: #666;
}

类名为fancy的元素内部的表格单元都会以灰色背景显示橙色文字,如下所示:

<table class="fancy">
    <tr>
        <td>use class descendant selector</td>
    </tr>
</table>

元素基于类创建选择器(只针对class元素)

td.fancy 
{
    color: #f60;
    background: #666;
}

类名为fancy的td将使用上面的样式,那些没有被分配类名fancy的单元格不会受这条规则的影响。如:

<td class="fancy">


多类选择器

在 HTML 中,一个 class 值中可能包含一个词列表,各个词之间用空格分隔。如:

<p class="important warning">
    This paragraph is a very important warning.
</p>

这两个词的顺序无关紧要,写成 warning important 也可以。
我们假设 class 为 important 的所有元素都是粗体,而 class 为 warning 的所有元素为斜体,class 中同时包含 important 和 warning 的所有元素还有一个银色的背景 。如下所示:

.important         { font-weight:bold;  }
.warning           { font-style:italic; }
.important.warning { background:silver; }

则应用此样式后,文字将显示成粗休加斜体,同时背景色为银色。
如果类列表包含多于上面定义的数,则也将显示多类样式,如下所示:

<p class="important urgent warning">
    This paragraph is a very important and urgent warning.
</p>


id选择器 VS. 类选择器

  • 两者都是区分大小写的
  • id选择器只能在文档中使用一次
  • id选择器不能使用id词列表
  • id的优先级(100)高于class(010)
  • 一般而言,ID is for JavaScript, Class is for CSS.
  • id选择器能包含更多含义(因为只出现一次,可以提前定义某一个)

属性选择器

可以为拥有指定属性的HTML元素设置样式,而不仅限于class和id属性。如:

[title]
{
    color:red;
}

为带有 title 属性的所有元素设置样式。

[title=W3School]
{
    border:5px solid blue;
}

为 title=”W3School” 的所有元素设置样式。

[title~=hello] { color:red; }

为包含指定值(hello)的title属性的所有元素设置样式。适用于由空格分隔的属性值。

[lang|=en]     { color:red; }

为带有包含指定值(en)开头的lang属性的所有元素设置样式。适用于由连字符分隔的属性值。

input[type="text"]
{
  width:150px;
  display:block;
  margin-bottom:10px;
  background-color:yellow;
  font-family: Verdana, Arial;
}

为所有属性type=”text”的input元素设置样式。
属性选择器在为不带有class或id的表单设置样式时特别有用。

CSS伪类 pseudo-class

CSS 伪类用于向某些选择器添加特殊的效果。伪类的语法为:

selector : pseudo-class { property: value }

也可与类搭配使用:

selector.class : pseudo-class { property: value }

伪类有以下常用的几种:关于超链接的:

:link, :visited, :hover, :active

其中a:hover必须位于a:link和a:visited 之后,a:active必须位于a:hover之后,以及其他的:

:focus, :first-child, :lang

其中:first-child一般可能认为这会选择作为段落第一个子元素的元素,但事实上并非如此,如果要选择段落的第一个子元素,应当写为p > *:first-child

  • 设置超链接的各个状态:
a:link    { color: #FF0000 }
a:visited { color: #00FF00 }
a:hover   { color: #FF00FF }
a:active  { color: #0000FF }


  • 当输入框获取焦点时,设置背景色:
input:focus
{
    background-color:yellow;
}


  • 对于所有作为首个子元素的段落(p),字体设置成粗体:
p:first-child { font-weight: bold; }
<div>
    <p>This paragraph will use the style.</p>
    <p>This paragraph will not use the style.</p>
</div>
<div>
    <p>This paragraph will use the style.</p>
    <p>This paragraph will not use the style.</p>
</div>


  • 为lang类带有值为”no”的引用(q)定义引号的类型:
q:lang(no)
{
    quotes: "~" "~"
}
<p>一些文本 <q lang="no">段落中的引用</q> 一些文本。</p>


CSS伪元素 pseudo-element

CSS伪元素用于向某些选择器设置特殊效果。伪元素的语法为:

selector:pseudo-element {property:value;}

伪元素也可与类配合使用:

selector.class:pseudo-element {property:value;}

伪元素有以下常用的几种:

:first-letter, :first-line, :before, :after


  • 为段落的第一行设置特殊样式:
p:first-line 
{
    color: #ff0000;
    font-variant: small-caps
}

“first-line” 伪元素只能用于块级元素。

  • 为段落的首字母设置特殊样式:
p:first-letter 
{
    color: #ff0000;
    font-size:xx-large
}

“first-letter” 伪元素只能用于块级元素。

  • 在标题1之前插入一幅图片:
h1:before 
{
    content:url(/i/w3school_logo_white.gif)
}

默认地,这个伪元素是行内元素,不过可以使用属性display改变这一点。

  • 在标题1之后插入一幅图片:
h1:after 
{
    content:url(/i/w3school_logo_white.gif)
}

默认地,这个伪元素是行内元素,不过可以使用属性display改变这一点。



更多请参考:W3School

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值