css
一、简介
CSS(Cascade Style Sheets)层叠样式表, 是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。
CSS是用来美化网页用的,没有网页则CSS毫无用处,所以CSS需要依赖HTML展示其功能 。
二、基本语法
CSS 样式由选择器和一条或多条以分号隔开的样式声明组成。每条声明的样式包含着一个 CSS属性和属性值。
选择器名{
属性 : 属性值;
......
}
div{
background-color : red;
}
注意:
- css声明要以分号;结束,声明以{}括起来
- 建议一行书写一个属性
- 若值为若干单词,则要给值加引号,如 font-family: “agency fb”;
三、CSS层叠样式表
1.行内样式表
- 行内式式将样式定义在具体html元素的style属性中。以行内式写的CSS耦合度高,只适用于当前元素,在设定某个元素的样式时比较常用。
<p style="color:red;font-size:50px;">这是一段文本</p>
2.内部样式表
- 嵌入式通过在html页面内容开辟一段属于css的代码区域,通常做法为在< head>标签中嵌套<style>标签,在<style>中通过选择器的方式调用指定的元素并设置相关 CSS。
<style type="text/css">
p {
color: blue;
font-size: 40px;
}
</style>
3.外部样式表
- 在实际开发当中,很多时候都使用引入外联样式文件,这种形式可以使html页面更加清晰,而且可以达到更好的重用效果。
style.css
p {
color: green;
font-size: 30px;
}
test.html
<link rel="stylesheet" type="text/css" href="style.css">
四、CSS选择器
- 在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素。CSS选择器有很多,掌握常用的即可;
1.基本选择器
- 通用选择器
选择所有
* {
color: orange;
}
- 元素选择器
元素名称{......}
p{
color: red;
font-size: 20px;
}
- id选择器
#id属性值{......}
#p1 {
font-weight: bold;
}
- 类选择器
.class属性值{......}
.hidden {
display: none;
}
- 属性选择器
选取带有指定属性的元素
[属性名]{......}
[id]{
color: red;
font-size: 20px;
}
用于选取带有指定属性和值的元素
[属性名=属性值]{……}
[id=div3]{
color: green;
font-family: "微软雅黑";
}
选取属性值中包含指定词汇的元素,通常是以空格分隔的多个词汇。
[attribute~=value]
[title~=flower]{
border: 5px solid yellowgreen;
}
<p>title 属性中包含单词 "flower" 的图片会获得黄色边框。</p>
<img src="../img/eg_tulip.jpg" title="tulip flower" />
<br />
<img src="../img/shanghai_lupu_bridge.jpg"title="lupu bridge" />
选取带有以指定值开头的属性值的元素,该值必须是整个单词,通常是一中划线分割的一个单词。
[attribute|=value]
[class|=en]{
border: 5px solid yellowgreen;
}
<p class="en">Hello!</p> <!--英文-->
<p class="en-us">Hi!</p> <!--美式英文-->
<p class="en-gb">Ello!</p>
<p class="zh">nihao!</p>
选取带有以指定值开头的属性值的元素,该值必须是整个单词,通常是一中划线分割的一个单词。
[attribute|=value]
[class|=en]{
border: 5px solid yellowgreen;
}
<p class="en">Hello!</p> <!--英文-->
<p class="en-us">Hi!</p> <!--美式英文-->
<p class="en-gb">Ello!</p>
<p class="zh">nihao!</p>
匹配属性值以指定值结尾的每个元素
[attribute$=value]
[class$=test]{
background:#ffff00;
}
<div class="first_test">第一个 div 元素。</div>
<div class="second">第二个 div 元素。</div>
<div class="test">第三个 div 元素。</div>
<p class="test">这是段落中的文本。</p>
匹配属性值中包含指定值的每个元素
[attribute*=value]
[class*=test]{
background:#ffff00;
}
<div class="first_test">第一个 div 元素。</div>
<div class="second">第二个 div 元素。</div>
<div class="test">第三个 div 元素。</div>
<div class="last-test-example">第四个 div 元素</div>
- 分组选择器
当几个元素样式属性一样时,可以共同调用一个声明,元素之间用逗号分隔
选择器1,选择器2,...{......}
h2 , #pre1 {
color: orange;
font-style: italic;
}
CSS样式的优先级,是根据选择器的精确度/权重来决定的,常见的权重如下,权重越大,优先级越高
- 元素:1
- 类:10
- id:100
- 内联样式:1000
2.组合选择器
CSS组合选择器说明了两个选择器直接的关系。 CSS组合选择符包括各种简单选择符的组合方式。
在 CSS3 中包含了四种组合方式: 后代选取器(以空格分隔),子元素选择器(以大于号分隔),相邻兄弟选择器 (以加号分隔),普通兄弟选择器(以波浪线分隔)。
- 后代选择器(派生选择器)
用于选择指定标签元素下的后辈元素,以空格分隔
选择器1 选择器2 {......}
.food li {
border: 1px solid red;
}
<h1>食物</h1>
<ul class="food">
<li>水果
<ul>
<li>香蕉</li>
<li>苹果</li>
<li>梨</li>
</ul>
</li>
<li>蔬菜
<ul>
<li>白菜</li>
<li>油菜</li>
<li>卷心菜</li>
</ul>
</li>
</ul>
- 子元素选择器
用于选择指定标签元素的所有第一代子元素,以大于号分隔
选择器1 > 选择器2 {......}
.food > li {
border: 1px solid red;
}
Html代码同上
- 相邻兄弟选择器
可选择紧接在另一元素后的元素,且二者有相同父元素。以加号分隔
选择器1 + 选择器2 {......}
#d + div {
border: 1px solid red;
}
<div id=’d’>
相邻兄弟选择器1
<ul>
<li>开心麻花</li>
<li>贾玲</li>
<li>宋小宝</li>
</ul>
</div>
<div>
相邻兄弟选择器2
</div>
- 普通兄弟选择器
选择紧接在另一个元素后的所有元素,而且二者有相同的父元素,以波浪线分隔
选择器1 ~ 选择器2 {......}
li ~ li {
background-color : yellow;
}
<div>
普通兄弟选择器1
<ul>
<li>开心麻花</li>
<li>贾玲</li>
<li>宋小宝</li>
<li>沈腾</li>
<li>王宁</li>
</ul>
</div>
四、CSS常用属性
1.CSS背景
-
CSS 背景属性用于定义HTML元素的背景效果
-
background-color
设置元素的背景颜色
body {background-color:#ff0000;}
- background-image
设置元素的背景图像,默认情况下,背景图像进行平铺重复显示,以覆盖整个元素实体。
body {background-image:url('paper.gif');}
- background-repeat
设置是否及如何重复背景图像
body {
background-image: url(../img/shanghai_lupu_bridge.jpg);
background-repeat: no-repeat;
}
2.文本
- color
设置文本的颜色
body {color:blue;}
h1 {color:#00ff00;}
h2 {color:rgb(255,0,0);}
- text-align
设置文本对齐方式,center(居中),left(左对齐),right(右对齐)
body {text-align:center;}
h1 {text-align:right;}
h2 {text-align:right;}
- text-decoration
规定添加到文本的修饰,属性值:none、underline、overline、line-through- underline
- 对文本添加下划线,与HTML的u元素相同
- overline
- 对文本添加上划线
- line-through
- 对文本添加中划线,与HTML中的s和 strike 元素相同
- none
- 关闭原本应用到元素上的所有装饰
- underline
h3 {text-decoration:underline;}
- text-indent
设置文本首行缩进,2em就是2个字的距离
p.ident2 {text-indent: 2em;}
3.字体
-
font-family
- 文本字体,该属性设置文本的字体
- font-family属性应该设置几个字体名称作为一种"后备"机制,如果浏览器不支持第一种字体,他将尝试下一种字体,所以尽量将不常见的字体靠前,将最常见的字体放置在最后,作为替补。
- 注意
- 只有当字体名中含有空格或#、$之类的符号时(如 New York),才需要在font-family声明中加引号:
body {font-family: "arial black";}
- 多个字体系列是用一个逗号分隔指明
p{font-family: 微软雅黑,黑体,"agency fb";}//靠前的字体先生效
- 只有当字体名中含有空格或#、$之类的符号时(如 New York),才需要在font-family声明中加引号:
-
font-size
文本大小
body {font-size: 50px;}/*字体大小50px*/
#span1 {font-size: 25px;}/*字体大小25px*/
-
font-style
字体风格,该属性最常用于规定斜体文本。 属性值:normal、italic、oblique -
font-weight
字体加粗,该属性设置文本的粗细。
bold:可以将文本设置为粗体。
100 ~ 900:为字体指定了 9 级加粗度。如果一个字体内置了这些加粗级别,那么这些数字就直接映射到预定义的级别。
100 对应最细的字体变形;
900 对应最粗的字体变形;
400 等价于 normal;
700 等价于 bold。
4.列表
- list-style
该属性按如下顺序设置列表样式:
list-style-type:列表项目标记样式。
list-style-position:列表项目标记位置
list-style-image:把图像设置为列表中的项目标记- list-style-type
- list-style-position
- list-style-image
- list-style-type
5.盒子模型
- border、padding、margin三个属性构成了盒子模型。
- border
设置所有的边框属性。
1)可同时设置边框的宽度、样式、颜色
table, th, td { border: 1px solid black; }
table { width:100%; height:50px; }
2)使用border-width、border-style、border-color单独设置
table,td {
border-width: 1px;
border-style: dotted;
border-color: green;
}
3)border-collapse
置是否将表格边框折叠为单一边框,属性值:separate(默认,单元格边框独立)、collapse(单元格边框合并)。
table { border-collapse : collapse; }
4)border-spacing设置分隔单元格边框的距离。
注意:
设置间距,border-collapse: separate;的状态下才有效。
table {border-spacing:10px;}
border-style的属性
- padding
- 设置元素所有内边距的宽度,或者设置各边上内边距的宽度。如果在表的内容中控制文本到边框的内边距,使用td和th元素的填充属性: td { padding:15px; }
- 单独设置各边的内边距:padding-top、padding-left、padding-bottom、padding-right
- 默认按照上右下左的顺序设定
- 注意:通过padding属性设置元素内边距时,会使元素变形。若不想影响格式效果,可以用margin属性设置元素外边距。
td .test1 {padding: 1.5cm}
td .test2 {padding: 0.5cm 2.5cm}
<table border="1">
<tr>
<td class="test1">
这个表格单元的每个边拥有相等的内边距。
</td>
</tr>
</table>
<br />
<table border="1">
<tr>
<td class="test2">
这个表格单元的上和下内边距是0.5cm,左和右内边距是 2.5cm。
</td>
</tr>
</table>
- margin
设置一个元素所有外边距的宽度,或者设置各边上外边距的宽度。
p.margin {margin: 2px 4px 3px 4px;}
单独设置各边的外边距:margin-top、margin-left、margin-bottom、margin-right
p.margin{
margin-top:100px;
margin-bottom:100px;
margin-right:50px;
margin-left:50px;
}
*{margin: auto auto;}
*{margin: 100px auto;}
说明:
auto:自动,可以理解为居中的意思。浏览器自动计算外边距。
margin: auto auto:第一个auto表示上下外边距自动计算,第二个auto表示左右外边距自动计算。但是上下外边距在自动计算时不会生效,而左右外边距会生效,表现为居中状态,效果如下:
若要设置为上下左右居中状态,则要计算好自行设置上下的外边距,效果如下:
6.对齐方式
-
text-align
- 它是针对于元素的内容
属性值
Left
center
right
p{text-align: center;} p是块元素,left、right和center会作用于整个行。
- 它是针对于元素的内容
-
vertical-align
- 它相当于image标签里的align属性,是容器中元素相对于内容的显示
-
display
-
display 属性规定元素应该生成的框的类型。这个属性用于定义建立布局时元素生成的显示框类型。
-
属性值
-
五、定位和浮动
- CSS 定位 (positioning) 属性允许你对元素进行定位 ,定位的基本思想很简单,它允许你定义元素框相对于其正常位置应该出现的位置,或者相对于父元素、另一个元素甚至浏览器窗口本身的位置。
- CSS 有三种基本的定位机制:普通流、浮动和绝对定位
- 除非专门指定,否则所有框都在普通流中定位,即普通流中的元素的位置由元素在HTML 中的位置决定
- 浏览器在读取HTML源代码的时候是根据元素在代码出现的顺序读取,最终元素的呈现方式是依据元素的盒子模型来决定的。行内元素是从左到右,块状元素是从上到下。默认的书写方式即是普通流。
1.position (绝对定位)
- 通过使用 position 属性,我们可以选择 4 种不同类型的定位,这会影响元素框生成的方式
static :元素框正常生成。作为文档流的一部分(默认值)
relative :元素框偏移某个距离。元素仍保持其未定位前的形状,它原本所占的空间仍保留。
absolute :元素框从文档流完全删除,并相对于其包含块定位。包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。
fixed :元素框的表现类似于将 position 设置为 absolute,不过其包含块是视窗本身。
static : 没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)
relative : 生成相对定位的元素,相对于其正常位置进行定位。元素的位置通过 “left”, “top”, “right” 以及 “bottom” 属性进行规定
absolute : 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。元素的位置通过 “left”, “top”, “right” 以及 “bottom” 属性进行规定。
fixed : 生成绝对定位的元素,相对于浏览器窗口进行定位。元素的位置通过 “left”, “top”, “right” 以及 “bottom” 属性进行规定。
<style type="text/css">
div{ width: 100px; height: 50px; line-height: 50px; text-align: center; color: #fff; }
</style>
<div style="background: blue">A</div>
<div style="background: red; position: relative; top: 20px; left: 20px;">B</div>
<div style="background: green">C</div>
2.float(浮动)
float的属性值有none、left、right。
- 只有横向浮动,并没有纵向浮动。
- 当元素应用了float属性后,将会脱离普通流,其容器(父)元素将得不到脱离普通流的子元素高度。
- 会将元素的display属性变更为block。
- 浮动元素的后一个元素会围绕着浮动元素(典型运用是文字围绕图片)
- 浮动元素的前一个元素不会受到任何影响(如果你想让两个块状元素并排显示,必须让两个块状元素都应用float)。
- 解决块浮动可以使用claer关键字
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
/*
一个ul,width200px,高度不定,其中存在6个li标签,每一个li标签的width100px,高度150px
1)123在一排,456在一排 ->inline-block ->浮动
2)li2 高度变成200px了,还是要求 123在一排,456在一排 ->inline-block ->浮动
*/
ul{
width:300px;
font-size: 0;
}
li{
width:100px;
height:150px;
background: pink;
list-style: none;
font-size: 30px;
color: #fff;
text-align: center;
line-height: 150px;
/*行内块*/
/*display: inline-block;*/
/*浮动*/
float:left;
}
li:nth-child(2){
height:200px;
}
li:nth-child(4){
clear: both;
}
</style>
</head>
<body>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
</body>
</html>