CSS学习笔记

一. 概述

CSS指层叠样式表,定义了如何显示HTML元素。样式通常存储在样式表中,可以解决内容和表现分离的问题,极大提高工作效率。外部样式表通常存储在CSS文件中,多个样式定义可层叠为一。

  • 样式解决了一个普遍的问题
    HTML标签原本被设计为用于定义文档内容,同时文档布局由浏览器来完成,而不使用任何的格式化标签。但由于两个主要的浏览器不断地将新的HTML标签和属性添加到HTML规范中,导致创建文档内容清晰地独立于文档表现层的站点变得越来越难,样式拯救了一切。

  • 样式表极大地提高了工作效率
    通过仅仅编辑一个简单的CSS文档,外部样式表使你有能力同时改变站点中所有页面的布局和外观。

  • 多重样式将层叠为一个
    所有的样式会根据下面的规则层叠于一个新的虚拟样式表中,4的优先权最高。

  1. 浏览器缺省设置
  2. 外部样式表
  3. 内部样式表(位于<head>标签内部)
  4. 内联样式(在HTML元素内部)

二. 基础语法

CSS规则由两个主要的部分构成:选择器,以及一条或多条声明:

selector {declaration1; declaration2...} 

如以下代码的作用是将h1元素内的文字定义为红色,且字体大小为14像素。

h1 {
    color:red; 
    font-size:14px;
}

1. 继承

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

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

根据继承,子元素将继承最高级元素所拥有的属性(如p, td, ul, ol, li, dl, dt, dd),不需要另外的规则。但是对于一些不支持继承的老浏览器,则需要这样写:

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

p, td, ul, ol, li, dl, dt, dd {
    font-family:Verdana, sans-serif;
}

如果你希望段落的字体并不跟随父元素,则可以这样写:

body {
    font-family:Verdana, sans-serif;
}
td, ul, ol, li, dl, dt, dd {
    font-family:Verdana, sans-serif;
}

p {
    font-family:Times, "Times New Roman", serif;
}

2. 派生选择器

派生选择器允许你根据文档的上下文关系来确定某个标签的样式,通过合理地使用派生选择器,我们可以使HTML代码更加简洁:

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

<p><strong>我是粗体字,不是斜体字,因为我不在列表当中,所以这个规则对我不起作用</strong></p>

<ol>
<li><strong>我是斜体字。这是因为 strong 元素位于 li 元素内。</strong></li>
<li>我是正常的字体。</li>
</ol>

在上面的例子中,只有li元素中的strong元素的样式为斜体字,无需为strong元素定义特别的class或者id,代码更加简洁。

3. id选择器

id选择器可以为标有特定id的HTML元素指定特定的样式。

#red {color:red;}
#green {color:green;}

<p id = "red">这个段落是红色。</p>
<p id = "green">这个段落是绿色。</p>

也可以用id作为派生选择器:

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

#sidebar h2 {
    font-size: 1em;
    font-weight: normal;
    font-style: italic;
    margin: 0;
    line-height: 1.5;
    text-align: right;
    }

id选择器也可以不被用来创建派生选择器,从而独立发挥作用:

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

这样定义的div只会拥有一个像素宽的黑色点状边框,同时其周围有10个像素宽的内边距。

4. 类选择器

CSS中,类选择器以一个点号显示:

.center {text-align:center}

<h1 class = "center">
This heading will be center-aligned
</h1>

<p class = "center">
This heading will be center-aligned
</p>

和id一样,class也可以被用作派生选择器:

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

上面的例子中,类名为fancy的更大的元素内部的表格单元都会以灰色背景显示橙色文字(适用于比td更大的元素)。

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

上面的例子中,类名为fancy的表格单元将是带有灰色背景的橙色(仅适用于td)。

5. 属性选择器

为拥有指定属性的HTML元素设置样式,而不仅限于class和id属性。为不带有class或id的表单设置样式的时候特别有用。

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

input[type="button"]
{
  width:120px;
  margin-left:35px;
  display:block;
  font-family: Verdana, Arial;
}

<form name="input" action="" method="get">
<input type="text" name="Name" value="Bill" size="20">
<input type="text" name="Name" value="Gates" size="20">
<input type="button" value="Example Button">

三. 创建一个CSS

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

1. 外部样式表

当样式需要应用于很多页面时,外部样式表是理想的选择。在使用外部样式表的情况下,可以通过改变一个文件来改变整个站点的外观。每个页面使用<link>标签链接到样式表,<link>标签在文档的头部:

<head>
<link rel = "stylesheet" type = "text/css" href = "mystyle.css" />
</head>

浏览器会从文件mystyle.css中读到样式声明,并根据它来格式文档。

外部样式表可以在任何文本编辑器中进行编辑,文件中不能包含任何的HTML标签,样式表应该以.css扩展名进行保存:

hr {color: red;}
p {margin-left:20px;}
body {background-image:url("images/back.gif");}

2. 内部样式表

当单个文档需要特殊的样式时,应使用内部样式表。可以使用<style>标签在文档头部定义内部样式表:

<head>
<style type = "text/css">
hr {color: red;}
p {margin-left: 20px;}
body {background-image: url("images/back.gif");}
</style>
</head>

3.内联样式

由于要将表现和内容混杂在一起,内联样式会损失掉样式表的许多优势,当样式仅需要在一个元素上应用一次的时候才用这种方法:

<p style = "color: red; margin-left: 20px">
a paragraph
</p>

四. CSS背景

Background-color不能继承,其默认值是transparent,即透明,如果一个元素没有指定背景色,则背景为透明的。

如果需要在页面上对背景图像平铺,可以使用background-repeat属性,导致图像在x、y或者都平铺。

如果需要背景定位,则使用background-position属性,将背景图像放在相应位置,当然,也可以设定百分数值,如:

body {
    background-image: url('/I/aa.gif');
    background-repeat: no-repeat;
    background-position: 66% 33%;
}

上面的代码会放在水平2/3、竖直1/3处。

如果文档比较长,那么文档向下滚动时,背景图像也会随之滚动,当文档滚动到超过图像的位置时,图像会消失,这时候,就可以通过background-attachment属性防止滚动,以确保图像对于可视区是固定(fixed)的。

body {
    background-image: url('/I/aa.gif');
    background-repeat: no-repeat;
    background-attachment:fixed;
}

五. CSS框模型

在CSS中,widthheight指的是内容区域的宽度和高度,增加内边距、边框和外边距不会影响内容区域的尺寸,但是会增加元素框的总尺寸。

如果希望一个元素框达到100个像素,则需要将内容的宽度、内边距和外边距设置好对应数值。

#box {
  width: 70px;
  margin: 10px;
  padding: 5px;
}
  • 外边距合并:当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于max(两个合并的外边距)。

六. CSS定位机制

div、h1或p元素常常被称为块级元素,意味着这些元素显示为一块内容,即“块框”,而span、strong等元素称为“行内元素”,即行内框。

CSS有三种基本的定位机制:普通流(默认)、浮动和绝对定位。

块级框从上到下一个接一个地排列,框之间的垂直距离是由框的垂直外边距计算出来的。

行内框在一行中水平布置,可以使用水平内边距、边框和外边距调整它们的间距。但是,垂直内边距、边框和外边距不影响行内框的高度。由一行形成的水平框称为行框,它的高度总是足以容纳它所包含的所有行内框。不过,设置行高可以增加这个框的高度。

position属性有以下四种类型:

  • static
    元素框正常生成,块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或多个行框,置于其父元素中。

  • relative(相对于一个元素的正常位置来定位)
    元素框偏移某个距离,元素仍保持未定位前的状态,它原本所占的空间仍保留。

  • absolute(利用绝对值对元素定位)
    元素框从文档流完全删除,并相对于其包含块定位。包含块可能是文档中另一个元素或者初始包含块。元素原先在正常文档流所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。

  • fixed(相对于浏览器窗口对元素进行定位)
    类似于absolute,不过其包含块是视窗本身。

1. 相对定位

如果对一个元素进行相对定位,则该元素将会相对于自己的起点进行移动。

在使用相对定位时,无论是否进行移动,元素仍然占据原来的空间,因此,移动元素会导致它覆盖其他框。

2. 绝对定位

设置为绝对定位的元素框从文档流完全删除,并相对于其包含块定位。绝对定位的元素的位置相对于最近的已定位祖先元素,如果元素没有已定位的祖先元素,那么他的位置相对于最初的包含块(画布或者HTML元素)

绝对定位的框与文档流无关,所以它们可以覆盖页面上的其他元素。可以通过设置z-index属性来控制这些框的堆放次序。(z越大,优先级越高)

3. 浮动

浮动的框可以向左或者向右移动,知道它的外边缘碰到包含框或者另一个浮动框的边框为止。

浮动框不在文档的普通流中,因此文档的普通流中的块框表现得就像浮动框不存在一样。

但是,float的元素是不会遮挡住content的,框内的content会自动避开float的元素,使得content始终可见。(当然,框还是那么大,只不过content会避开float而已)

Clear会使图像的旁边不允许出现浮动元素。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • 1.CSS基本概念 1.1 CSS的定义 CSS(Cascading Style Sheets)层叠样式表,主要用...
    寥寥十一阅读 1,803评论 0 6
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,727评论 1 92
  • 转载请声明 原文链接地址 关注公众号获取更多资讯 第一部分 HTML 第一章 职业规划和前景 职业方向规划定位...
    程序员poetry阅读 16,511评论 32 459
  • 学会使用CSS选择器熟记CSS样式和外观属性熟练掌握CSS各种选择器熟练掌握CSS各种选择器熟练掌握CSS三种显示...
    七彩小鹿阅读 6,304评论 2 66
  • 一:CSS轮廓## 轮廓(outline)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。 C...
    朝槿123阅读 402评论 0 1