[转]CSS学习笔记
原文:http://www.fx114.net/qa-266-93710.aspx
01.什么是CSS.
CSS指层叠样式表(Cascading Style Sheets).
·样式定义如何显示HTML元素
·样式通常存储在样式表中
·把样式添加到HTML中,是为了解决内容与表现分离的问题
·外部样式表可以极大提高工作效率
·外部样式表通常存储在 CSS 文件中
·多个样式定义可层叠为一
学习CSS需要具备的基础知识: HTML,XHTML
样式解决了一个普遍的问题:
·HTML标签原本被设计为用于定义文档内容。通过使用 <h1>、<p>、<table> 这样的标签,HTML 的初衷是表达“这是标题”、“这是段落”、“这是表格”之类的信息。同时文档布局由浏览器来完成,而不使用任何的格式化标签。
·由于两种主要的浏览器(Netscape和Internet Explorer)不断地将新的HTML标签和属性(比如字体标签和颜色属性)添加到 HTML 规范中,创建文档内容清晰地独立于文档表现层的站点变得越来越困难。
·为了解决这个问题,万维网联盟(W3C,World Wide Web Consortium)这个非营利的标准化联盟,肩负起了HTML标准化的使命,并在HTML4.0之外创造出样式(Style)。
·所有的主流浏览器均支持层叠样式表。
样式表极大地提高了工作效率:
·样式表定义如何显示 HTML 元素,就像HTML3.2的字体标签和颜色属性所起的作用那样。样式通常保存在外部的.css文件中。通过仅仅编辑一个简单的 CSS 文档,外部样式表使你有能力同时改变站点中所有页面的布局和外观。
·由于允许同时控制多重页面的样式和布局,CSS可以称得上WEB设计领域的一个突破。作为网站开发者,你能够为每个HTML元素定义样式,并将之应用于你希望的任意多的页面中。如需进行全局的更新,只需简单地改变样式,然后网站中的所有元素均会自动地更新。
CSS可以作为HTML,XHTML,XML的样式控制语言.
02.Web标准
Web标准是一系列技术标准,在使用时是组合使用.
Web标准的构成: 结构(Structure)、表现(Presentation)和行为(Behavior).
·结构标准对应的主要语言: XHTML
·表现标准对应的主要语言: CSS
·行为标准对应的主要语言: JavaScript
使用Web标准的好处是将内容与样式分开,制作一个静态页面,主要用到的就是XHTML与CSS.
内容、结构、表现和行为:
·内容: 就是制作者放在页面内真正想要让访问者浏览的信息.
·结构: 使内容更加具有逻辑性和易用性(类似于1级2级标题、正文、列表等把它们称为结构).
·表现: 用于修饰内容的外观的样式的东西称为表现.
·行为: 对内容的交互及操作效果,如通过javascript判断表单提交等.
网页开发测试用到的一个小工具--火狐浏览器的附加组件firebug插件: 可以对任何网页的CSS,HTML和JavaScript进行实时编辑、调试和监控.
Web前端开发,需要兼容的浏览器: IE6/7/8/9浏览器,火狐浏览器、谷歌浏览器,苹果浏览器.
03.CSS的语法结构
语法: 选择符{属性:值; 属性:值; ...;}
例如: body{font-size:12px;}
参数说明:
·选择符(Selector): 指明这组样式所要针对的对象,可以是一个XHTML标签,如body,h1,也可以是定义了特定的id或class的标签,如#main选择符表示选择<div id="main">,即一个被指定了main为id的对象.
·属性(property): 选择符的样式属性,如颜色、大小、定位、浮动方式等.
·值(value): 是指属性的值.
·同时可以为一个选择符定义多个属性,每个属性之间用分号(;)隔开.
CSS的例子:
<style type="text/css">
body{font-size:12px;color:red;}
h1{font-size:12px;color:blue;}
span{font-size:2em;color:green;}
</style>
CSS定义的技巧
·为了将来的css代码优化,建议所有的属性值后面加分号(;).
·某些xhtml标签,有自己默认的css属性值.例如h1标签自动就是加粗显示、字号比较大.
·为了兼容主流浏览器,建议在设置时,将所有元素的css属性重置为标准的.
·不同的浏览器,有各自不同的css属性值,兼容性.
·对于比较特殊的字体,可以转为图片.
04.几种选择符(选择器)的写法
(1)标签选择器: 样式所要针对的对象是一个标签 h1{color:green;}
(2)选择器分组: 将同样的样式定义用于多个选择符(集体控制),选择符之间用逗号分隔.
h1,h2,h3,h4,h5,h6{color:green;}
(3)派生选择器: 也可以叫嵌套选择器,包含选择器
CSS: li strong{font-style: italic;}
XHTML: <li><strong>文字</strong></li>
(4)id选择器: 如果使用程序控制网页中的某些内容,为了便于区分,给内容加一个唯一的标识符号id
CSS: #red{color:red;}
XHTML: <p id="red">文字</p>
(5)类选择器: 为class="类名"的元素加一个样式,就是加一个类
CSS: .center{text-align:center;}
XHTML: <h1 class="center">文字</h1>
(6)标签指定式选择器: 既使用id或class,也同时使用标签选择符.
CSS: h1.p1{color: #f60;} //针对所有class为p1的h1标签
h1#content{color: #f60;} //针对所有id为content的h1标签
XHTML: <h1 class="p1">
<h1 id="content">
同一个元素,应用多个类,类名与类名之间用空格分隔
<p class="al a2">
(7)组合选择符: 将以上选择符组合使用
h1.p1,#content h1{}
(8)选择所有元素: 星号(*) (作用范围很广,但效率最低)
选择符就是你将定义的样式用给谁
05.CSS在网页中的应用方式
网页中加CSS的方式有四种:
(1)内联样式表: 在HTML元素内部,直接写在现有的标记中,应用于一个标签.
如: <p style="color:red"></p>
(2)嵌入式样式表(内部样式表): 使用<style></style>标签嵌入到HTML文件的头部<head>标签内,应用于一类标签.
<style type="text/css">
<!--
body{background:white;color:block;}
-->
</style>
说明: <!-- -->用于当浏览器不支持样式表时,不会将样式表内容显示出来.
(3)外部链接式样式表: 将样式表写在一个独立的.css文件中,然后在页面<head>标记内用<link>标签调用它,主要用于实现表现与结构分离.
如: <link href="main.css" rel="stylesheet" type="text/css" />
推荐使用外部链接式.
(4)导入式样式表: 与链接式样式表的功能基本相同,也是将样式写到一个文件中,再导入到网页中,只是语法和动作方式上略有不同,同样也将导入样式代码写在<head>标记内.
<style type="text/css">
@import url("basic.css")
</style>
其实导入式与内嵌式是相类似的,都是将样式加入到网页里.
·导入式会占用html文件空间.
·有些浏览器解析会有问题,浏览器会最后读取@import中的内容.
·可以将多个样式文件,导入到一个样式文件中.
06.CSS的特性
(1)继承: 网页中子元素,将继承父元素的样式.
例如: 要控制段落p中的文字大小,可以直接给body标记加样式.
(2)层叠: 网页中子元素定义了与父元素相同的样式,则子元素的样式将覆盖掉父元素的样式.
后面定义的样式,会覆盖前面定义的样式.
07.CSS样式的优先权
多重样式将层叠为一个:
·样式表允许以多种方式规定样式信息。样式可以规定在单个的HTML元素中,在HTML页的头元素中,或在一个外部的 CSS 文件中。甚至可以在同一个HTML文档内部引用多个外部样式表。
层叠次序:
当同一个 HTML 元素被不止一个样式定义时,会使用哪个样式呢?
一般而言,所有的样式会根据下面的规则层叠于一个新的虚拟样式表中,其中数字4拥有最高的优先权。
1.浏览器缺省设置
2.外部样式表
3.内部样式表(位于<head>标签内部)
4.内联样式(在HTML元素内部)
因此,内联样式(在 HTML元素内部)拥有最高的优先权,这意味着它将优先于以下的样式声明:<head>标签中的样式声明,外部样式表中的样式声明,或者浏览器中的样式声明(缺省值)。
CSS优先权:
就近原则,作用范围越小,优先权越高,离要修饰目标越近的样式优先权越高.
行内>id>class>标签选择符
特殊情况,可以采用!important语法来提升优先权(IE6不支持):
p{}
08.CSS长度单位
相对长度单位:
·em 相对与当前对象内文本的字体尺寸
·px 像素(pixel),推荐使用
绝对长度单位: 基本上用不到
·in 英寸
·cm 厘米
·mm 毫米
·pt 点(Point)
09.CSS控制字体
设置字号: font-size:12px
设置颜色: color:#00000
设置字体: font-family:Arial,"宋体"
设置行高: line-height:150% line-height:1.5em
设置字体的粗细: font-weight:normal(正常) bold(粗体)
设置字体样式: font-style:nomal(正常) italic(斜体)
修饰文字: text-decoration:none(正常) underline(下划线) overline(上划线) line-through(删除线)
字符间距: letter-spacing:normal(默认) length(长度单位)
单词间距: word-spacing:normal(默认) length(长度单位)
10.CSS控制文本
设置对象中文本缩进: text-indent:2em 可以为负值
文本水平对齐方式: text-align:left(左) center(中) right(右)
对象中空白处理: white-space:normal(自动换行) pre(换行和空白受保护) nowrap(强制在同一行显示)
文本大小写控制: text-transform:none(正常大小) capitalize(每个单词的第一个字母转换成大写)
uppercase(转换成大写) lowercase(转换成小写)
元素的垂直对齐方式: vertical-align:sub(设置文字为下标) super(设置文字为上标)
top(把元素的顶端与行中最高元素的顶端对齐)
text-bottom(把元素的底端与父元素字体的底端对齐)
11.CSS控制链接--CSS伪类
CSS伪类用于向某些选择器添加特殊的效果.
伪类语法:
选择符:伪类名称{属性:值}
未访问的链接: a:link{color:#FF0000}
已访问的链接: a:visited{color:#00FF00}
鼠标移动到链接上: a:hover{color:#FF00FF}
鼠标按下链接: a:active{color:#0000FF}
自定义链接的CSS类
a.类名称:状态
:focus设置对象在成为输入焦点(该对象的onfocus事件发生)时的样式(IE6/7不支持)
12.CSS选择符命名
规范的命名也是Web标准中的重要一项,标准的命名可以使代码更加易读,而且利于搜索引擎搜索,提高团队合作工作效率,因此需要规范化命名(语义化命名)
·一种是除第一个单词首字母小写外,其余所有单词首字母都大写.
·一种是所有单词首字母都大写
·一种是单词之间用下划线隔开.
原则是要容易理解,便于协同工作.
13.页面模块的常用CSS命名
头: header 热点: hot
内容: content 新闻: news
尾: footer 下载: download
导航: nav 广告: banner
侧栏: sidebar 页面主体: main
栏目: column 子导航: subnav
页面外围控制整体布局宽度: wrapper 菜单: menu
左右中: left right center 子菜单: submenu
登录条: loginbar 版权: copyright
标志: logo 友情链接: friendlinks
14.CSS盒子模型
以物品和包装盒的构成为例,讲述页面构成的名词:
content 盒子中物品(内容)
border 盒子的厚度(边框)
padding 盒子填充泡沫的厚度(边框与内容之间的距离,内边距)
margin 多个盒子存在,盒子与盒子之间的距离(外边距,边界)
W3C组织建议:
·把所有网页上的对象都放在一个盒(box)中--盒子模型
·设计师可以通过创建定义来控制这个盒子的属性,这些对象包括段落、列表、标题、图片以及层<div>.
·盒子模型主要定义四个区域: 内容(content)、填充(padding)、边框(border)和边界(margin)。
·这里的边界也称为: 外边距、外补丁; 填充也叫: 内边距、内补丁.
·以宽度为例,整个盒子模型在页面中所占的宽度=左边界+左边框+左填充+内容+右填充+右边框+右边界.
盒子模型的立体层次(从底层到上层):
margin background-color background-image padding content border
15.CSS盒子模型相关属性
设置元素的宽度: width:100px
设置元素的高度: height:100px
设置元素的某一个方向外边距: margin-top/right/bottom/left:10px;
参数个数不同设置外边距: margin:10px; (上下左右四个方向)
margin:10px 10px; (上下 左右)
margin:10px 10px 10px; (上 左右 下)
margin:10px 10px 10px 10px; (上 右 下 左)
设置元素某一个方向的内填充: padding-top/right/bottom/left:10px;
参数个数不同设置内填充: padding:10px; (上下左右四个方向)
padding:10px 10px; (上下 左右)
padding:10px 10px 10px; (上 左右 下)
padding:10px 10px 10px 10px;(上 右 下 左)
设置边框粗细: border-top-width:12px;
设置边框样式: border-top-style:solid(实线)、dashed(虚线)
设置边框颜色: border-top-color:#000000;
设置某一边框属性的简捷方式: border-边框位置:线宽 线型 颜色;
设置某一元素四条边框属性: border:线宽 线型 颜色; (仅限四条边框属性完全相同)
注意:
·在定义盒子的宽度时,要考虑到内填充、边框、边界的存在
·如果增加了内填充,整个盒子宽度值,要再减去你增加的内填充值
·在使用外边距时要注意浏览器的兼容性.
·由于各浏览器存在内外边距的默认值,并且默认值不同,需要在CSS将所有的内外边距都置零.
·虽然CSS的属性有继承性,但并不是所有属性都继承.
·CSS布局主要是通过盒子模型来实现--W3C将网页内容,放置在一些盒子中,对盒子的一些属性进行修改.
DIV元素是用来为HTML文档内大块(block-level的内容提供结构和背景的元素。DIV的起始标签和结束标签之间的所有内容都是用来构成这个块的,其中所包含元素的特性由DIV标签的属性来控制,或者是通过使用样式表格式化这个块来进行控制。
16.边框的CSS语法与属性:
border:border-width border-style border-color
如果只写border,则后面要跟着的是三个不同的子属性: 粗细 样式 颜色
例如: border:2px solid blue;
17.列表的CSS语法与属性:
list-style:list-style-image list-style-position list-style-type
列表的样式:列表的图片 列表符号位置 列表的样式
列表存在兼容性问题,推荐使用none.
list-style:none;
18.CSS小技巧
(1)CSS第一步将默认元素归零,避免兼容性问题
(2)让盒子水平居中: 将对象的左右外边界设置为auto
margin:30px auto 0;
(3)让盒子中的内容垂直居中: 设置行高=盒子的高度,但是不要换行.
(4)在调试的时候,可以适当加背景颜色
19.CSS对HTML元素的分类(块状元素和内联元素)
我们在布局页面的时候,会将HTML标签(元素)分成两种: 块状元素和内联元素,我们平时用到的标签div和p就是块状元素,链接标签a就是内联元素。
可以通过CSS修改元素的类型.
(1)块状元素: {display:block}
块状元素一般是其他元素的容器,可容纳内联元素和其他块状元素,块状元素排斥其他元素与其位于同一行(独占一行),宽度(width)和高度(height)起作用.
常见的块状元素为: div、p、body、h1~h6
ul与li默认情况下是块元素.
(2)内联元素: {display:inline}
内联元素只能容纳文本或者其他内联元素,它允许其他内联元素与其位于同一行,但宽度(width)和高度(height)不起作用。
常见的内联元素为: a、em、span等.
20.CSS控制背景
背景的语法:
background:background-color background-image background-repeat background-attachment background-position
背景:颜色 图片 平铺方式 固定方式 位置
背景颜色
背景图像 background-image:url(背景图像的位置及全称);
背景图像的重复方式 background-repeat:repeat(no-repeat、repeat-x、repeat-y)
背景图像的位置 background-position:垂直方向 水平方向
background-position:top left(center right)
center left(center right)
bottom left(center right)
background-position:x坐标(水平位置) y坐标(垂直位置)
背景图像的依附方式 background-attachment:scroll(fixed)
说明:
·背景图片,默认情况下是进行水平与垂直方向上的平铺.
·默认背景图片,在元素的左上角显示.
·背景图片的依附方式: 固定的含义是,将图片固定在屏幕(可视区域)的某个区域.
·对于background-attachment:fixed; IE6兼容性问题,只有html与body两个元素支持这个属性值.
21.CSS精灵(Sprites)--制作翻转按钮效果
制作翻转按钮效果的两种方法:
(1)需要两张图片,一张正常状态的图片,一张鼠标经过的图片.
做这种按钮的思路就是: 设置链接a的背景为第一张图片,使用伪类a:hover的背景为第二张图片.
CSS: a{width:88px; height:44px; background:url(images/link.gif); display:block;}
a:hover{background:url(images/hover.gif);}
HTML: <a href="#"></a>
(2)精灵技巧,将上面两张图片合并成一张图片.
设置图片为按钮的背景,然后将a:hover的背景向上移动响应的像素即可.
CSS: #btn{width:88px; height:44px; background:url(images/button.gif); display:block;}
#btn:hover{background-position:0 -44px;}
HTML: <a href="#" id="btn"></a>
说明: CSS精灵技巧,主要是为了减少http请求.
22.CSS布局方式
CSS的三种布局方式:
·默认文档流方式: 以默认的html元素的结构顺序显示
·浮动布局方式: 通过设置html元素的float属性显示
·定位布局方式: 通过设置html元素的position属性显示
浮动(float)布局:
包括div在内的任何元素都可以以浮动的方式进行显示,浮动是将块元素的独占一行的行为取消,允许别人和它在同一行,其实是这个块从原来的文档流模式分离出来,它后面的对象就视为它不存在(不在一个立体层次,浮动的块上浮一个层次,但还在父元素内,不同的块元素可能不同).
float:none(left/right)
·none: 不浮动
·left: 对象向左浮动,而后面的内容流向对象的右侧
·right:对象向右浮动,而后面的内容流向对象的左侧
说明:
·常用的布局效果,有一行并列式,在一行中显示几个块元素.
·ul与li默认情况下是块元素,要想让他们在一行中显示,就要用到浮动.
·在IE6中,子元素的高度超过了父元素的高度,会把父元素的高度自动增加.
·如果想让多个块显示在同一行中,可以将这些块都设置为浮动,并且浮动的方向相同.
·浮动,先浮后动,浮动的对象会先漂浮起来,离开原来的位置,后动就是它后面的对象会向它原来的位置上动起来.
清除浮动:
当元素有浮动属性时,会对其父元素或后面的元素产生影响,会出现一个布局错乱现象,可以通过在后面的元素中加清除浮动的方法来解决浮动元素的影响.
clear:none(left/right/both)
·none: 默认值,允许两边都可以有浮动对象.
·left: 不允许左边有浮动对象
·right: 不允许右边有浮动对象
·both: 左右两侧不允许有浮动对象
当父元素没有指定高度时,并且它的子元素有浮动,这时,这个父元素的高度不会自动增加.
这种情况清除浮动的方法:
(1)额外标签法:
这种方法应该说是最简单的一种,W3C建议在容器的末尾增加一个"clear:both"的元素,强迫容器适应它的高度以便装下所有的float元素.
CSS: .clear{clear:both;}
HTML: <div id="main">
<div id="left">左盒子</div>
<div id="right">右盒子</div>
<div class="clear"></div> (增加一个空div)
</div>
<div id="footer">底部</div>
确定会增加代码
(2)父元素使用overflow的方法
CSS中溢出的使用
设置当对象的内容超过其指定高度及宽度时如何管理内容.
overflow:visible(auto/hidden/scroll)
·visible: 默认值,不剪切内容也不添加滚动条
·auto: 在必需时对象内容才会被裁切或显示滚动条
·hidden: 不显示超过对象尺寸的内容
·scroll: 总是显示滚动条
通过设置父元素的overflow值设置为hidden,是最简单的清除浮动的方法,但如果子元素使用了定位布局,就会很难实现.
*{margin:0;padding:0;}
#main,#footer{margin:0 auto;}
#main{width:800px;background:#ccc;overflow:hidden;zoom:1;position:relative;}
#left{width:200px;height:200px;background:blue;position:absolute;left:-100px;top:100px;}
#right{width:300px;height:300px;background:green;float:right;}
#footer{width:800px;height:50px;background:red;}
(3)利用伪对象after方法:
定义一个类,使用伪对象after,控制浮动元素的影响
网上最流行的清除浮动代码:
.clearFix:after{
clear:both;
display:block;
visibility:hidden;
height:0;
line-height:0;
content:"";
}
.clearFix{zoom:1;} //解决IE6/7兼容问题.
zoom只有IE内核大浏览器支持缩放比例
zoom:normal(number:百分数|无符号浮点实数,实数为1与百分数100%相当于normal)
zoom:1解决IE6高度自适应问题.
定位布局:
可以通过元素的position属性控制元素的位置.
position:static(absolute/relative)
·static: 静态定位,页面中的每一个对象的默认值
·absolute: 绝对定位,将对象从文档流中分离出来,通过设置left,right,top,bottom四个方向相对于父级对象进行绝对定位,如果不存在这样的父对象,则依据body对象.
·relative: 相对定位,对象不从文档流中分离,通过设置left,right,top,bottom四个方向相对于自身位置进行相对定位.
#right{position:absolute;top:100px;left:100px;)
注意: 当我们要想使用绝对定位时: 必须要有两个条件
·必须给父元素加定位属性,一般建议使用相对定位position:relative.
·给子元素加绝对定位position:absolute;同时要加方向属性.
相对定位与绝对定位
·绝对定位是父元素为基准点进行定位. --会脱离文档流.
·相对定位是根据其自身为基准点进行定位. --离开原位置,但还占着原来的空间.