根据书写css书写位置的不同,将我们的样式分为:行内式、内嵌式、外链式。
1、通过标签名直接选择相应的标签。标签是什么就用什么选择。
2、标签选择器选中的是页面所有对应的标签。不管嵌套关系多复杂,都能通过标签选择器选中。
因为标签选择器会选中所有的标签,在实际工作中,不会用来更改某一元素属性,因为会影响其他。
用途:利用标签选择所有,进行初始化样式的设置,默认样式的清除。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>标签选择器</title>
<style type="text/css">
p{
font-size: 20px;
color: chocolate;
}
h2{
color: red;
}
</style>
</head>
<body>
<P>这是一个段落标签</P>
<h2>这是一个h2标签</h2>
<P>这是一个段落标签</P>
<h2>这是一个h2标签</h2>
<P>这是一个段落标签</P>
<P>这是一个段落标签</P>
<h2>这是一个h2标签</h2>
<P>这是一个段落标签</P>
</body>
</html>
效果:

示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>id选择器</title>
<style type="text/css">
p{
font-size: 20px;
color: chocolate;
}
h2{
color: red;
}
#para{
color: aqua;
}
</style>
</head>
<body>
<P>这是一个段落标签</P>
<h2>这是一个h2标签</h2>
<P>这是一个段落标签</P>
<h2>这是一个h2标签</h2>
<P id="para">这是一个段落标签</P>
<P>这是一个段落标签</P>
<h2>这是一个h2标签</h2>
<P>这是一个段落标签</P>
</body>
</html>
效果:

通过标签的class属性来选择这个标签。
示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>类选择器</title>
<style type="text/css">
p{
font-size: 20px;
color: chocolate;
}
h2{
color: red;
}
/*原子类,只定义一个css属性*/
.ad{
color: blue;
}
.ft{
font-size: 40px;
}
</style>
</head>
<body>
<P>这是一个段落标签</P>
<!-- 原子类的使用-->
<h2 class="ad ft">这是一个h2标签</h2>
<P>这是一个段落标签</P>
<h2>这是一个h2标签</h2>
<P id="para">这是一个段落标签</P>
<P>这是一个段落标签</P>
<h2 class="ad ft">这是一个h2标签</h2>
<P>这是一个段落标签</P>
</body>
</html>

可以选中包括body在内的所有标签。不常用,效率不高。可以用作简单案例里面的清空默认样式。
*{
margin: 0;
padding: 0;
}
效果:

基础选择器并不能满足我们的所有的需求,在基础选择器上进行一些延伸。
三种:后代选择器、交集选择器、并集选择器。
通过标签直间的嵌套关系、层级关系,限定我们大体范围,在范围内具体查找相关元素。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>后代选择器</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
/*后代选择器*/
.box2 li{
color: chocolate;
}
/*后代选择器*/
.box1 li{
color: bisque;
}
</style>
</head>
<body>
<div class="box1">
<ul>
<li>这里是第一个div的li</li>
<li>这里是第一个div的li</li>
<li>这里是第一个div的li</li>
<li>这里是第一个div的li</li>
</ul>
</div>
<div class="box2">
<ul>
<li>这里是第二个div的li</li>
<li>这里是第二个div的li</li>
<li>这里是第二个div的li</li>
<li>这里是第二个div的li</li>
</ul>
</div>
</body>
</html>
效果:

示例代码:
解释:类名为box1的所有后代里面类名叫做one的标签。
.box1 .one{
color: bisque;
}
效果:

以下是交集的连续书写:表示这个元素既是li标签的类名,还得有lis的类型。
/*交集选择器*/
li.one.lis{
color: green;
}
兼容问题:IE6不支持类的连续交集。
/*清空默认样式*/
div,ul,li,p{
margin: 0;
padding: 0;
}
等价于:

/*并集选择器*/
p,li.one{
color: red;
}
效果:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>继承性</title>
<style type="text/css">
.box{
width: 300px;
height: 300px;
background: chocolate;
border: 1px solid #999999;
font-size: 16px;
color: blue;
}
</style>
</head>
<body>
<div class="box">
<h2>这里是标题</h2>
<p>这里是段落</p>
<p>这里是段落</p>
</div>
</body>
</html>
效果:



font-family:"Aria","Microsoft Yahei"
网页布局三大核心:盒子模型,浮动,定位
盒子模型的组成:边框,内外边距,内容
border:边框
内边距:padding
外边距:margin
内容:content
border-width :边框的粗细,单位是px
border-style:边框的样式
border-color:边框的颜色
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>盒子模型之边框</title>
<style>
div {
/* 字体颜色 */
color: green;
width: 300px;
height: 200px;
/*定义边框的粗细,单位是px */
border-width: 5px;
/* 边框的样式 */
border-style: solid;
/* 边框的颜色 */
border-color: pink;
}
</style>
</head>
<body>
<div>
<p>练习1</p>
<p>练习2</p>
<p>练习3</p>
</div>
</body>
</html>
效果:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>边框的复合写法</title>
<style>
div {
/* 须指定边框样式才能显示边框 */
/* border-color: green;
border-width: 5px;
border-style: solid; */
/* 复合写法 */
width: 300px;
height: 200px;
border: 3px solid pink; /*16行和18行不能互换 */
/* 设置边框线 */
border-top: 10px solid purple ;
}
</style>
</head>
<body>
<div>
<p>练习1</p>
<p>练习2</p>
<p>练习3</p>
</div>
</body>
</html>
效果:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>表格细线边框</title>
<style>
table {
width: 500px;
height: 249px;
}
table, th, td {
border: 1px solid green;
text-align: center;
/* 重叠部分的表格改为细线 */
border-collapse: collapse;
}
a {
text-decoration: none;
}
</style>
</head>
<body>
<table cellspacing="0">
<th>排名</th>
<th>关键词</th>
<th>趋势</th>
<th>今日搜索</th>
<th>最近七日</th>
<th>相关链接</th>
<tr>
<td>1</td>
<td>鬼吹灯</td>
<td>下</td>
<td>456</td>
<td>123</td>
<td><a href="#">百度 新浪 微博</a></td>
</tr>
<tr>
<td>2</td>
<td>西游记</td>
<td>上</td>
<td>654</td>
<td>456</td>
<td><a href="#">百度 新浪 微博</a></td>
</tr>
</table>
</body>
</html>
效果:

注意:边框会影响实际盒子的大小
padding属性用于设置内边距,即内容与边框之间的距离。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>内边距</title>
<style>
div {
width: 300px;
height: 200px;
background-color: rgb(236, 40, 210);
}
p {
padding-left: 20px;
padding-top: 30px;
}
</style>
</head>
<body>
<div>
<p>内容是padding</p>
</div>
</body>
</html>
效果:



<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>padding复合属性写法</title>
<style>
div {
width: 300px;
height: 200px;
background-color: yellow;
/* padding的复合属性写法 */
padding: 10px 10px 20px 30px;
}
</style>
</head>
<body>
<div>内容是padding复合属性写法</div>
</body>
</html>
效果:


注意:内边距会影响盒子的实际大小。
解决办法:让width和height减去多出来的内边距大小。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>圆角边框</title>
<style>
div {
height: 200px;
width: 200px;
background:green;
/* 设置圆角边框,数值越大,边框越圆润 */
border-radius: 17px;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
效果:

圆角边框的设置使用border-radius即可设置。后面可以直接跟数值也可以跟百分比。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>圆角边框</title>
<style>
.radio1 {
height: 200px;
width: 200px;
background:green;
/* 盒子为正方形,圆角设置为宽或高的一半即可*/
border-radius: 100px;
text-align: center;
}
.radio2 {
height: 200px;
width: 300px;
background:blue;
/* 设置圆角矩形,数值设置为高度的一半 */
border-radius: 100px;
text-align: center;
margin: 20px 0;
}
.radio3 {
height: 200px;
width: 200px;
background:purple;
/* 设置圆角边框,数值越大,边框越圆润 */
border-radius: 10% 20% 30% 40%;
text-align: center;
}
</style>
</head>
<body>
<div class="radio1">1.圆形的做法</div>
<div class="radio2">2.圆角矩形的做法</div>
<div class="radio3">3.设置不同的圆角</div>
</body>
</html>
效果:

盒子阴影通过box-shadow设置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>盒子阴影</title>
<style>
div {
height: 200px;
width: 300px;
background-color:purple;
margin: 10px auto;
/* 数值依次代表:水平阴影位置,垂直阴影位置,模糊距离,阴影尺寸,阴影颜色,内外阴影(默认为外阴影,outset为指定外阴影,inset为指定内阴影) */
box-shadow: 10px 10px 10px 10px grey;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
效果:

鼠标经过时显示盒子的阴影
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>盒子阴影</title>
<style>
div {
height: 200px;
width: 300px;
background-color:purple;
margin: 10px auto;
/* 数值依次代表:水平阴影位置,垂直阴影位置,模糊距离,阴影尺寸,阴影颜色,内外阴影(默认为外阴影,outset为指定外阴影,inset为指定内阴影) */
/* box-shadow: 10px 10px 10px 10px grey; */
}
/* 鼠标经过时显现盒子的阴影 */
.shadow:hover {
box-shadow: 10px 10px 10px 10px grey;;
}
</style>
</head>
<body>
<div class="shadow"></div>
</body>
</html>
效果:

用属性text-shadow可以设置文字阴影
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>发光文本悬停效果</title>
<style>
* {
margin: 0;
padding: 0;
background-color: black;
}
h2 {
text-align: center;
font-size: 150px;
color: #f5f5f5;
line-height: 200px;
}
.i:hover{
text-shadow: 0px 0px 10px blue;
text-shadow: 0px 0px 20px blue;
text-shadow: 0px 0px 30px blue;
}
h2:hover {
text-shadow: 0px 0px 10px blue;
text-shadow: 0px 0px 20px blue;
text-shadow: 0px 0px 30px blue;
}
</style>
</head>
<body>
<h2 class="light">
<span class="i">I</span>
<span class="m">M</span>
POSSIBLE
</h2>
</body>
</html>
效果:

传统网页布局的三种方式
网页布局的本质:用CSS来摆放盒子, 把盒子放到相应位置。
CSS提供了三种传统网页布局方式(简单来说,就是盒子如何进行排列顺序)
- 普通流(标准流)
标签按照规定好的默认方式排列
1、块级元素会独占一行,从上到下顺序排列
常见元素:div、hr、h1-h6、ul、ol、dl、form、table、p
2、行内元素会按照顺序从左到右顺序排列,碰到父元素边缘则自动换行。
常见元素:span、a、i、em等
标准流是最基本的布局方式。
浮动最经典的应用:可以让多个块级元素一行并排显示。
网页布局第一准测:多个块级元素纵向排列找标准列,多个块级元素横向排列找浮动
float属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>浮动练习下</title>
<style>
* {
margin: 0;
padding: 0;
}
.box {
width: 1226px;
height: 615px;
background-color:pink;
margin: 0 auto;
}
.left {
float: left;
width: 234px;
height: 615px;
background-color: grey;
}
.right {
float: left;
width: 992px;
height: 615px;
background-color:skyblue;
}
li {
list-style: none;
}
.lin li {
float: left;
width: 234px;
height: 300px;
background-color: rgb(131, 250, 220);
margin-left: 14px;
margin-bottom: 14px;
}
a {
}
</style>
</head>
<body>
<div class="box">
<div class="left">
eleven
</div>
<div class="right">
<ul class="lin">
<li>seven</li>
<li>seven</li>
<li>seven</li>
<li>seven</li>
<li>seven</li>
<li>seven</li>
<li>seven</li>
<li>seven</li>
</ul>
</div>
</div>
</body>
</html>
效果:

定位组成:将盒子定在某一个位置,所以定位也是摆放盒子,按照定位的方式移动盒子。
定位 = 定位模式 + 边偏移。
定位模式用于指定一个元素文档中的定位方式,边偏移则决定了该元素的最终位置。
定位 模式决定元素的定位方式,它通过CSS的position属性来设置,其值可以分为四个:

边偏移就是定位盒子移动到最终位置,有top、bottom、left和right4个属性。

静态定位是元素的默认定位方式,无定位的意思。
语法:
选择器:{position:static}
静态定位按照标准流的特性摆放位置,它没有边偏移
静态定位很少使用
相对定位是元素在移动位置的时候,是相对于它原来的位置来说的。
语法:
选择器:{position:relative;}
相对定位的特点(务必记住)
1、它是相对于自己原来的位置移动的。(移动位置的时候参照自己原来的位置)
2、原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它。(不脱标,继续保留原来的位置)
因此,相对定位并没有脱标。它最典型的应用是给绝对定位当爹的。
绝对定位是元素移动位置的时候,是相对于它祖先元素来说的。
语法:
选择器:{position:absolute;}
绝对定位的特点:(务必记住)
1、如果没有父元素或父元素没有定位,则以浏览器为准定位
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>绝对定位</title>
<style>
.son {
position: absolute;
top: 10px;
left: 10px;
width: 200px;
height: 200px;
background: grey;
}
</style>
</head>
<body>
<div class="son"></div>
</body>
</html>
效果:

2、如果祖先元素有定位(相对、绝对、固定定位),则以最近一级的有定位的祖先元素为参考点移动。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=, initial-scale=1.0">
<title>绝对定位 父级元素有定位</title>
<style>
.father {
position: relative;
width: 500px;
height: 500px;
background-color: skyblue;
}
.son span {
position: absolute;
top: 250px;
right: 10px;
font-size: 20px;
color: green;
}
.lt {
position: absolute;
top: 250px;
left: 10px;
font-size: 20px;
color: green;
}
</style>
</head>
<body>
<div class="father">
<div class="son">
<span>></span>
<span class="lt"><</span>
</div>
</div>
</body>
</html>
效果:

3、绝对定位不再占有原先的位置。(脱标)
子级是绝对定位的话,父级要用相对定位
1、子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子。
2、父盒子需要加定位限制子盒子再父盒子的显示。
3、父盒子布局时,需要占有位置,因此父亲只能是相对定位。
固定定位是元素固定于浏览器可视区的位置。主要使用场景:可以在浏览器页面滚动时位置不变。
语法:
选择器:{position:fixed;}
固定定位的特点:
1、以浏览器的可视窗口为参考点移动元素。
小算法:
1、让固定定位的盒子left:50%,走到浏览器可视区的一半的位置。
2、让固定定位的盒子margin-left:版心宽度的一半距离。多走版心宽度的一半位置
粘性定位可以被认为是相对定位和固定定位的混合。
语法:
选择器 {position :sticky;top:10px}
粘性定位的特点:
1、以浏览器的可视窗口为参照点移动元素(固定定位的特点)
2、粘性定位占有原先的位置(相对定位的特点)
3、必须添加top、left、right、bottom其中一个才有效
跟页面滚动搭配使用。兼容性差,IE不支持。
在使用定位布局时,可能会出现盒子重叠的情况。此时,可以使用z-index来控制盒子的前后次序(z轴)
语法:
选择器:{z-index:1;}
绝对定位和固定定位也和浮动类似
1、行内元素添加绝对或者固定定位,可以直接设置高度和宽度。
2、块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小。
3、脱标的盒子不会触发外边距塌陷。浮动元素,绝对定位(固定定位)元素的都不会触发外边距合并的问题。
4、绝对定位(固定定位)会完全压住盒子
浮动元素不同,只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字(图片),但是绝对定位(固定定位)会完全压住下面标准流的盒子。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>显示隐藏元素display</title>
<style>
.box1 {
width: 200px;
height: 200px;
background: green;
}
.box2 {
display: block;
width: 200px;
height: 200px;
background: grey;
}
</style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
</body>
</html>
后面应用广泛,搭配js可以做出网页特效。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>显示隐藏元素visibility</title>
<style>
.box1 {
visibility:hidden
width: 200px;
height: 200px;
background-color: grey;
}
.box2 {
width: 200px;
height: 200px;
background-color: hotpink;
}
</style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
</body>
</html>
visibility隐藏元素后,继续占有原来的位置。效果:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>显示隐藏元素overflow</title>
<style>
.box1 {
overflow: scroll;
width: 200px;
height: 200px;
background-color: grey;
}
</style>
</head>
<body>
<div class="box1">
<p>
暮色里,小镇名叫泥瓶巷的僻静地方,有位孤苦伶仃的清瘦少年,此时他正按照习俗,一手持蜡烛,一手持桃枝,照耀房梁、墙壁、木床等处,用桃枝敲敲打打,试图借此驱赶蛇蝎、蜈蚣等,嘴里念念有词,是这座小镇祖祖辈辈传下来的老话:二月二,烛照梁,桃打墙,人间蛇虫无处藏。
</p>
</div>
</body>
</html>
效果:


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>土豆案例</title>
<style>
.box {
position: relative;
width: 450px;
height: 288px;
margin: 0 auto;
}
.mask {
/* 隐藏遮罩 */
display: none;
position: absolute;
height: 100%;
width: 100%;
background: rgba(0, 0, 0, .5) url(12.png) no-repeat center
}
/* 当鼠标经过的时候,就让遮罩显示出来 */
.box:hover .mask {
display: block;
}
</style>
</head>
<body>
<div class="box">
<div class="mask"></div>
<img src="1.jpg" alt="动漫">
</div>
</body>
</html>

bug:图片底侧会有一个空白缝隙,原因是行内块元素会和文字的基线对齐。
主要解决办法:
1、给图片添加vertical-align:middle,top,bottom等(提倡使用)
2、把图片转化为块级元素,display:block;

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>单行文本溢出省略号显示</title>
<style>
.box {
width: 150px;
height: 80px;
background-color: pink;
margin: 0 auto;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style>
</head>
<body>
<div class="box">啥也不说,此处省略一万字</div>
</body>
</html>
效果:


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>多行文本溢出省略号显示</title>
<style>
.box {
width: 150px;
height: 80px;
background-color: pink;
margin: 0 auto;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
</style>
</head>
<body>
<div class="box">啥也不说,此处省略一万字啥也不说,此处省略一万字啥也不说,此处省略一万字啥也不说,此处省略一万字啥也不说,此处省略一万字</div>
</body>
</html>
效果:
