认识CSS
CSS全称为“层叠样式表 (Cascading Style Sheets)”,它主要是用于定义HTML内容在浏览器内的显示样式,如文字大小、颜色、字体加粗等。
使用CSS样式的一个好处是通过定义某个样式,可以让不同网页位置的文字有着统一的字体、字号或者颜色等。
CSS注释代码
用/*注释语句*/ 来标明(Html中使用<!--注释语句-->)
选择器
选择器{
样式;
}
在{}之前的部分就是“选择器”,“选择器”指明了{}中的“样式”的作用对象,也就是“样式”作用于网页中的哪些元素。
标签选择器
标签选择器其实就是html代码中的标签。类选择器
类选择器在css样式编码中是最常用到的ID选择器
ID选择器都类似于类选择符,但也有一些重要的区别:
1、为标签设置id="ID名称",而不是class="类名称"。
2、ID选择符的前面是井号(#)号,而不是英文圆点(.)
类和ID选择器的区别
相同点:可以应用于任何元素
不同点:
- ID选择器只能在文档中使用一次。与类选择器不同,在一个HTML文档中,ID选择器只能使用一次,而且仅一次。而类选择器可以使用多次。
- 可以使用类选择器词列表方法为一个元素同时设置多个样式。我们可以为一个元素同时设多个样式,但只可以用类选择器的方法实现,ID选择器是不可以的(不能使用 ID 词列表)。
子选择器
即大于符号(>),用于选择指定标签元素的第一代子元素。
.food>li{border:1px solid red;}包含(后代)选择器
即加入空格,用于选择指定标签元素下的后辈元素。
.first span{color:red;}通用选择器
它使用一个(*)号指定,它的作用是匹配html中所有标签元素,
* {color:red;}伪类选择符
它允许给html不存在的标签(标签的某种状态)设置样式
a:hover{color:red;}分组选择符
h1,span{color:red;}
继承
CSS的某些样式是具有继承性的,那么什么是继承呢?
继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代。
不可继承的:display、margin、border、padding、background、height、min-height、max-height、width、min-width、max-width、overflow、position、left、right、top、bottom、z-index、float、clear、table-layout、vertical-align、page-break-after、page-bread-before和unicode-bidi。(注:基本上什么盒子外边距、内边距,还有定位什么的是不能被继承的)
所有元素可继承:visibility和cursor。
内联元素可继承:letter-spacing、word-spacing、white-space、line-height、color、font、font-family、font-size、font-style、font-variant、font-weight、text-decoration、text-transform、direction。
终端块状元素可继承:text-indent和text-align。
列表元素可继承:list-style、list-style-type、list-style-position、list-style-image。
表格元素可继承:border-collapse。
特殊性
同一个元素设置了不同的css样式,那么该元素会启用哪一个?
css样式是有权值的,浏览器会选择权值最高的样式。
标签的权值为1,类选择符的权值为10,ID选择符的权值为100,继承的权值最低,为0.1
p{color:red;} /*权值为1*/
p span{color:green;} /*权值为1+1=2*/
.warning{color:white;} /*权值为10*/
p span.warning{color:purple;} /*权值为1+1+10=12*/
#footer .note p{color:yellow;} /*权值为100+10+1=111*/
层叠
如果在html文件中对于同一个元素可以有多个css样式存在并且这多个css样式具有相同权重值怎么办?
层叠就是在html文件中对于同一个元素可以有多个css样式存在,当有相同权重的样式存在时,会根据这些css样式的前后顺序来决定,处于最后面的css样式会被应用。
内联样式表(标签内部)> 嵌入样式表(当前文件中)> 外部样式表(外部文件中)。
继承、特殊性,层叠,重要性的区分。
继承是指标签的样式可以由子代继承,但有些标签是不能继承的,eg:border。
特殊性指用用权重来确定最后起作用的样式,id=100,class=10,标签=1,继承=0.1;
层叠指当权重相同时,后面的样式覆盖前面的样式
重要性
有些特殊的情况需要为某些样式设置具有最高权值,怎么办?
这时候我们可以使用!important来解决。
p{color:red!important;}p{color:green;}
注意:!important要写在分号的前面
浏览器默认的样式 < 网页制作者样式 < 用户自己设置的样式,但记住!important优先级样式是个例外,权值高于用户自己设置的样式。
CSS格式化排版
字体
body{font-family:"宋体";}
现在一般网页喜欢设置“微软雅黑”,因为这种字体即美观又可以在客户端安全的显示出来(用户本地一般都是默认安装的)。
如下代码:
body{font-family:"Microsoft Yahei";}
或
body{font-family:"微软雅黑";}
注意:第一种方法比第二种方法兼容性更好一些。
字号、颜色
body{font-size:12px;color:#666}
粗体
p span{font-weight:bold;}
斜体
p a{font-style:italic;}
下划线
p a{text-decoration:underline;}
删除线
.oldPrice{text-decoration:line-through;}
缩进
p{text-indent:2em;}
注意:2em的意思就是文字的2倍大小。
行间距(行高)
p{line-height:1.5em;}
中文字间距、字母间距
中文字间隔、字母间隔设置:(这个样式使用在英文单词时,是设置字母与字母之间的间距)
h1{ letter-spacing:50px; }
单词间距设置:
h1{ word-spacing:50px; }
对齐
为块状元素中的文本、图片设置居中样式
h1{ text-align:center; } //居中
h1{ text-align:left; } //居左
h1{ text-align:right; } //居右
CSS盒模型
元素分类
常用的 块状元素 有:
<div>、<p>、<h1>...<h6>、<ol>、<ul>、<dl>、<table>、<address>、<blockquote> 、<form>
常用的 内联元素(又叫行内元素)有:
<a>、<span>、<br>、<i>、<em>、<strong>、<label>、<q>、<var>、<cite>、<code>
常用的 内联块状元素 有:
<img>、<input>
块级元素
a{display:block;}
块级元素特点:
1、每个块级元素都从新的一行开始,并且其后的元素也另起一行。(真霸道,一个块级元素独占一行)
2、元素的高度、宽度、行高以及顶和底边距都可设置。
3、元素宽度在不设置的情况下,是它本身父容器的100%(和父元素的宽度一致),除非设定一个宽度。内联元素(又叫行内元素)
同时具备内联元素、块状元素的特点
div{ display:inline; }
内联元素特点:
1、和其他元素都在一行上;
2、元素的高度、宽度及顶部和底部边距不可设置;
3、元素的宽度就是它包含的文字或图片的宽度,不可改变。内联块状元素
display:inline-block
内联块状i元素特点:
1、和其他元素都在一行上;
2、元素的高度、宽度、行高以及顶和底边距都可设置。
盒子模型
盒子模型(块级标签):页面元素+内容(文字、图片、标签元素)
内填充:padding(盒子里内容与盒子的距离)-top、-right、-bottom、-left
外边距:margin(盒子与另一个盒子的距离)-top、-right、-bottom、-left
边框
盒子模型的边框就是围绕着内容及补白的线,这条线你可以设置它的粗细、样式和颜色(边框三个属性)。
div{ border:2px solid red; }
border-style(边框样式)常见样式有:
dashed(虚线)| dotted(点线)| solid(实线)。
单独设置边框:
border-bottom:1px solid red;
border-top:1px solid red;
border-right:1px solid red;
border-left:1px solid red;
宽度和高度
盒模型宽度和高度和我们平常所说的物体的宽度和高度理解是不一样的,css内定义的宽(width)和高(height),指的是填充以里的内容范围。
因此一个元素实际宽度(盒子的宽度)=左边界+左边框+左填充+内容宽度+右填充+右边框+右边界。
填充
元素内容与边框之间是可以设置距离的,称之为“填充”。
填充也可分为上、右、下、左(顺时针)。
padding-top:20px;
padding-right:10px;
padding-bottom:15px;
padding-left:30px;
也可写成:
padding: 20px, 10px, 15px, 30px;
边界
元素与其它元素之间的距离可以使用边界(margin)来设置。
边界也是可分为上、右、下、左。
margin-top:20px;
margin-right:10px;
margin-bottom:15px;
margin-left:30px;
也可写成:
margin:20px 10px 15px 30px;
CSS布局模型
CSS包含3种基本的布局模型:
- 流动模型(Flow)
- 浮动模型 (Float)
- 层模型(Layer)
- 流动模型
流动(Flow)是默认的网页布局模式。
流动布局模型具有2个比较典型的特征:
- 块状元素都会在所处的包含元素内自上而下按顺序垂直延伸分布,因为在默认状态下,块状元素的宽度都为100%。实际上,块状元素都会以行的形式占据位置。
- 在流动模型下,内联元素都会在所处的包含元素内从左到右水平分布显示。(内联元素可不像块状元素这么霸道独占一行)
- 浮动模型
想让两个块状元素并排显示,怎么办呢?
设置元素浮动就可以实现这一愿望。
任何元素在默认情况下是不能浮动的,但可以用 CSS 定义为浮动,如 div、p、table、img 等元素都可以被定义为浮动。
float:left;
float:right;
- 层模型
层布局模型就像是图像软件PhotoShop中非常流行的图层编辑功能一样,每个图层能够精确定位操作,但在网页设计领域,由于网页大小的活动性,层布局没能受到热捧。但是在网页上局部使用层布局还是有其方便之处的。
层模型有三种形式:
1、绝对定位(position: absolute)
将元素从文档流中拖出来,然后使用left、right、top、bottom属性相对于其最接近的一个具有定位属性的父包含块进行绝对定位。如果不存在这样的包含块,则相对于body元素,即相对于浏览器窗口。
2、相对定位(position: relative)
通过left、right、top、bottom属性确定元素在正常文档流中的偏移位置。
相对定位完成的过程是首先按static(float)方式生成一个元素(并且元素像层一样浮动了起来),然后相对于以前的位置移动,移动的方向和幅度由left、right、top、bottom属性确定,偏移前的位置保留不动。
什么叫做“偏移前的位置保留不动”呢?
虽然div元素相对于以前的位置产生了偏移,但是div元素以前的位置还是保留着,所以后面的span元素是显示在了div元素以前位置的后面。
3、固定定位(position: fixed)
与absolute定位类型类似,但它的相对移动的坐标是视图(屏幕内的网页窗口)本身。
由于视图本身是固定的,它不会随浏览器窗口的滚动条滚动而变化,除非你在屏幕中移动浏览器窗口的屏幕位置,或改变浏览器窗口的显示大小,因此固定定位的元素会始终位于浏览器窗口内视图的某个位置,不会受文档流动影响,这与background-attachment:fixed;属性功能相同
Relative与Absolute组合使用
相对于其它元素进行定位:
1、参照定位的元素必须是相对定位元素的前辈元素
2、参照定位的元素必须加入position:relative;
3、定位元素加入position:absolute,便可以使用top、bottom、left、right来进行偏移定位了。
CSS代码缩写,占用更少的带宽...
盒模型代码简写
margin:10px 10px 10px 10px;
margin:10px;
-------------------------
margin:10px 20px 10px 20px;
margin:10px 20px;
-------------------------
margin:10px 20px 30px 20px;
margin:10px 20px 30px;
颜色值缩写
当你设置的颜色是16进制的色彩值时,如果每两位的值相同,可以缩写一半。
p{color:#000000;}
p{color: #000;}
--------------------------
p{color: #336699;}
p{color: #369;}
字体缩写
body{
font-style:italic;
font-variant:small-caps;
font-weight:bold;
font-size:12px;
line-height:1.5em;
font-family:"宋体",sans-serif;
}
body{
font:italic small-caps bold 12px/1.5em "宋体",sans-serif;
}
单位和值
颜色值
字体颜色(color)、背景颜色(background-color)、边框颜色(border)等。
设置颜色的方法也有很多种:
1、英文命令颜色
p{color:red;}
2、RGB颜色
p{color:rgb(133,45,200);}
p{color:rgb(20%,33%,25%);}
3、十六进制颜色
p{color:#00ffff;}
长度值
目前比较常用到px(像素)、em、% 百分比,要注意其实这三种单位都是相对单位。
1、像素
像素为什么是相对单位呢?
因为像素指的是显示器上的小点(CSS规范中假设“90像素=1英寸”)。实际情况是浏览器会使用显示器的实际像素值有关,在目前大多数的设计者都倾向于使用像素(px)作为单位。
2、em
就是本元素给定字体的 font-size 值,如果元素的 font-size 为 14px ,那么 1em = 14px;如果 font-size 为 18px,那么 1em = 18px。
p{font-size:12px;text-indent:2em;}
下面注意一个特殊情况:
当给 font-size 设置单位为em时,此时计算的标准以 p 的父元素的 font-size 为基础。
<p>以这个<span>例子</span>为例。</p>
p{font-size:14px}
span{font-size:0.8em;}
如下代码:
3、百分比
p{font-size:12px;line-height:130%}
设置行高(行间距)为字体的130%(12 * 1.3 = 15.6px)。
css样式设置小技巧
水平居中设置-行内元素
如果被设置元素为文本、图片等行内元素时,水平居中是通过给父元素设置text-align:center; 来实现的。
水平居中设置-块状元素
当被设置元素为块状元素 时用 text-align:center 就不起作用了,这时也分两种情况:定宽块状元素和不定宽块状元素。
- 定宽块状元素:块状元素的宽度width为固定值。
满足定宽和块状两个条件的元素是可以通过设置“左右margin”值为“auto”来实现居中的。
div{
width:200px;/*定宽*/
margin:20px auto;/* margin-left 与 margin-right 设置为 auto */
}
也可以写成:
margin-left:auto;
margin-right:auto;
- 不定宽块状元素:块状元素的宽度width不固定。
不定宽度的块状元素有三种方法居中(这三种方法目前使用的都很多):
1、加入table标签。
为什么选择方法一加入table标签?
是利用table标签的长度自适应性---即不定义其长度也不默认父元素body的长度(table其长度根据其内文本长度决定),因此可以看做一个定宽度块元素,然后再利用定宽度块状居中的margin的方法,使其水平居中。
第一步:为需要设置的居中的元素外面加入一个 table 标签 ( 包括 <tbody>、<tr>、<td>)。
第二步:为这个 table 设置“左右 margin 居中”(这个和定宽块状元素的方法一样)。
2、设置display: inline方法:与第一种类似,显示类型设为行内元素,进行不定宽元素的属性设置。
改变块级元素的 display 为 inline 类型(设置为行内元素,然后使用text-align:center来实现居中效果。
这种方法相比第一种方法的优势是不用增加无语义标签,但也存在着一些问题:它将块状元素的 display 类型改为 inline,变成了行内元素,所以少了一些功能,比如设定长度值。
3、设置position:relative和 left:50%:利用相对定位的方式,将元素向左偏移50%,即达到居中的目的。
通过给父元素设置 float,然后给父元素设置position:relative和left:50%,子元素设置position:relative和left:-50%来实现水平居中。
垂直居中-父元素高度确定的单行文本
父元素高度确定的单行文本的竖直居中的方法是通过设置父元素的height和line-height高度一致来实现的。
这种文字行高与块高一致带来了一个弊端:当文字内容的长度大于块的宽时,就有内容脱离了块。
垂直居中-父元素高度确定的多行文本
父元素高度确定的多行文本、图片等的竖直居中的方法有两种:
使用插入table(包括tbody、tr、td)标签,同时设置vertical-align:middle。
css中有一个用于竖直居中的属性vertical-align,在父元素设置此样式时,会对inline-block类型的子元素都有用。在chrome、firefox及IE8以上的浏览器下可以设置块级元素的display为table-cell(设置为表格单元显示),激活vertical-align属性,但注意IE6、7并不支持这个样式,兼容性比较差。
这种方法的好处是不用添加多余的无意义的标签,但缺点也很明显,它的兼容性不是很好,不兼容IE6、7而且这样修改display的block变成了table-cell,破坏了原有的块状元素的性质。
隐性改变display类型
有一个有趣的现象就是当为元素(不论之前是什么类型元素,display:none除外)设置以下2个句之一:
1.position : absolute
2.float : left 或float:right
简单来说,只要html代码中出现以上两句之一,元素的display显示类型就会自动变为以display:inline-block(块状元素)的方式显示,当然就可以设置元素的width和height了,且默认宽度不占满父元素。