目录标题
一、认识CSS
1、什么是CSS
CSS:Cascading Style Sheet 层叠级样式表
表现(美化网页),字体、颜色、边距、高度、宽度、背景图片、网页定位…
2、CSS发展史
CSS 1.0
CSS 2.0 DIV(块)+CSS,HTML与CSS结构分离的思想,网页变得简单,SEO
CSS 2.1 浮动、定位
CSS 3.0 圆角,阴影,动画…(浏览器兼容性)
3、快速入门
建议使用html和css文件分离
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CSS</title>
<!--引入css文件-->
<link rel="stylesheet" href="../css/style1.css">
</head>
<body>
<h1>我是Ben</h1>
</body>
</html>
/*规范,<style> 可以编写css的代码
语法:
选择器{
声明1;
声明2;
声明3;
}
每一个声明,用分号分割
*/
h1{
color : darkorange;
}
css的优势:
- 内容和表现分离,易于开发与管理
- 网页结构变现统一,可以实现复用
- 样式十分丰富
- 建议使用独立于html的css文件(解耦合)
- 利于SEO,容易被搜索引擎收录(Vue不易SEO)
二、导入CSS的四种方式
- 行内样式
- 内部样式
- 外部样式(链接式、导入式)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--内部样式-->
<style>
h1{
color: blueviolet;
}
</style>
<!--外部样式-->
<link rel="stylesheet" href="../css/style1.css">
</head>
<body>
<!--行内样式:在标签元素中,编写一个style属性,编写样式即可-->
<h1 style="color: red">这是一个标题</h1>
</body>
</html>
那问题来了:如果不同方式的css同时指向一个标签,标签会使用哪种样式?
优先级:就近原则(行内样式>内部样式>外部样式)
其中,外部链接两种写法
- 链接式:
<link rel="stylesheet" href="../css/style1.css">
- 导入式:
<style>@import url("css/style1.css")</style>
区别:使用链接方式时,会在装载页面主体部分之前装载css文件,这样显示出来的网页从一开始就是带有样式
导入式,会在整个页面装载完成后再装载css文件,对于有的浏览器来说,在一些情况下,如果网页文件的体积比较大,则会出现先显示无样式页面,闪一下之后再出现设置样式后的效果。
对于较大网站,为了便于维护,可能会希望把所有的css样式分类别放到几个css文件中,这样如果使用链接式引入,就需要几个语句分别导入css,如果要调整css的文件分类,就需要同是调整HTML文件。这对于维护工作来说,是一个缺陷。如果使用导入式,则可以只引进一个总的css文件,在这个文件中再导入其他独立css文件;而链接则不具备这个特性
三、选择器
作用:选择页面上一个或一类元素
1、基本选择器(重要)
标签选择器:选择一类标签,标签名{}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
h1{
color: rebeccapurple;
}
</style>
</head>
<body>
<h1>
你好
</h1>
</body>
</html>
类选择器:选择所有class属性一致的标签,.类名{}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*
类选择器的格式,.class的名称{}
可以多个标签归类,可以复用
*/
.ben{
color: coral;
}
.qin{
color: crimson;
}
</style>
</head>
<body>
<h1 class="ben">123</h1>
<h1 class="qin">456</h1>
</body>
</html>
id选择器:全局唯一,#id名{}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*
id选择器:id可以重复使用,但建议全局唯一
#id名称{}
*/
#ben{
color: magenta;
font-size: 40px;
}
</style>
</head>
<body>
<h1 id="ben">我是Ben</h1>
<h1>我是Ben</h1>
<h1>我是Ben</h1>
</body>
</html>
三类选择器优先级: id选择器 > class选择器 > 标签选择器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*
选择器优先级
id选择器 > class选择器 > 标签选择器
*/
h1{
color: deepskyblue;
}
.style1{
color: brown;
}
#ben{
color: wheat;
}
</style>
</head>
<body>
<h1 class="style1" id="ben">标题1</h1>
<h1 class="style1">标题2</h1>
<h1 class="style1">标题3</h1>
<h1>标题4</h1>
</body>
</html>
2、层次选择器
后代选择器:
/*
后代选择器 在某个元素的后面的元素
*/
body p{
background: red;
}
子选择器:
/*
子选择器 只选择在某个元素后面的一代元素
*/
body>p{
background: coral;
}
相邻兄弟选择器:
/*
相邻兄弟选择器,只有一个,相邻(向下)
*/
.active+p{
background: purple;
}
通用选择器:
/*
通用选择器,当前选中元素的向下所有兄弟元素
*/
.active~p{
background: orange;
}
3、结构伪类选择器(了解即可)
伪类:它们是CSS语言的关键字,可让您与外部因素或事件进行交互,例如将鼠标移到元素上或访问链接。带冒号的选择器。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*ul的第一个子元素*/
ul li:first-child{
background: darkred;
}
/*ul的最后一个子元素*/
ul li:last-child{
background: wheat;
}
/*
选中p1:定位到父元素,选择当前的第一个元素
选择当前p元素的父级元素的子元素的第一个,并且此元素为当前类型元素才生效
*/
p:nth-child(2){
background: red;
}
/*选中父元素,下的p元素的第二个,类型*/
p:nth-of-type(3){
background: yellow;
}
p:hover{
color: black;
}
</style>
</head>
<body>
<p>p1</p>
<p>p2</p>
<p>p3</p>
<ul>
<li>li1</li>
<li>li2</li>
<li>li3</li>
</ul>
</body>
</html>
4、属性选择器(常用)
该选择器用属性来定位元素,更加准确
属性选择器:属性名:属性值(正则)
= 绝对等于
*= 包含这个元素
^= 以该元素开头
$= 以该元素结尾
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>attrribute</title>
<style>
body a{
margin-right: 10px;
font-size: 20px;
color: purple;
background: wheat;
float: left;
display: block;
width: 30px;
height: 30px;
text-align: center;
border-radius: 10px;
text-decoration: none;
}
/*属性选择器:属性名:属性值(正则)
= 绝对等于
*= 包含这个元素
^= 以该元素开头
$= 以该元素结尾
*/
/*选中带有id属性的a标签*/
/*a[id=item]{*/
/*background: yellow;*/
/*}*/
/*选中class中有links的元素*/
/*a[class*="links"]{*/
/*background: magenta;*/
/*}*/
/*选中href以http开头的元素*/
/*a[href^=http]{*/
/*background: yellow;*/
/*}*/
a[href$=html]{
color: red;
}
</style>
</head>
<body>
<p>
<a href="choose1.html" class="abc links" id="item">1</a>
<a href="choose2.html" class="abc links">2</a>
<a href="choose3.html" class="abc links">3</a>
<a href="choose4.html" class="links yi">4</a>
<a href="choose5.html" class="yi">5</a>
<a href="choose6.html" class="yi">6</a>
<a href="https://www.baidu.com" id="q" class="yi">7</a>
</p>
</body>
</html>
四、美化网页元素
目的:
1.有效传递页面信息
2.美化网页,提升用户使用体验
3.凸显页面主题
1、span标签
一般用于配合css修改网页中的一一些局部信息
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#l{
font-size: 50px;
}
</style>
</head>
<body>
<p>我爱<span id="l">Java</span></p>
</body>
</html>
2、字体
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>三国演义</title>
<!--
font-family:字体
font-size: 字体大小
font-weight: 字体粗细
color:颜色
-->
<style>
body{
font-family: 华文楷体;
color: saddlebrown;
}
h1{
font-size: 50px;
}
.p1{
font-weight: bold;
}
</style>
</head>
<body>
<h1>黄巾起义 群雄逐鹿</h1>
<p class="p1">大将军何进在与十常侍的斗争中被杀,袁绍、曹操等大臣以平“十常侍之乱”为名冲入皇宫,剿杀宦官。在保护汉少帝的过程中,西凉刺史董卓引兵入关,随即掌控大权,废汉少帝,另立陈留王刘协为汉献帝。生性残暴的董卓倒行逆施,引发多方愤然。曹操假借圣旨之名,召集十八路诸侯联合讨伐董卓。虎牢关前,志在匡扶汉室的刘备、关羽、张飞三兄弟大战吕布。讨董盟军声威浩大,迫使董卓挟献帝逃至长安,最终被司徒王允设连环计除掉。</p>
<p> 然而十八路诸侯各怀异心,联盟开始分崩离析。袁绍欲谋取长沙太守孙坚手中的传国玉玺,联合刘表将孙坚杀死。同时,袁绍又在界桥之战中击败公孙瓒,成为北方最强势力。此时的曹操也广招贤才,积聚实力。群雄逐鹿的雏形初成。</p>
</body>
</html>
3、文本
- 颜色: color rgb rgba
- 文本对齐方式: text-align(左右排版)
- 首行缩进:text-indent:段落首行缩进
- 行高:line-height:行高,与块的高度一致就能上下居中
- 装饰:text-decoration
- 文本图片水平对齐:vertical-align(多个属性参照)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文本样式</title>
<style>
/*
颜色:
RGB:0-F
RGBA:A:0-1
text-align:排版(左右)
text-indent:段落首行缩进
line-height:行高,与块的高度一致就能上下居中
*/
h1{
color: rgba(0,255,255,0.5);
text-align: center;
}
.p1{
text-indent:2em;
}
.p2{
line-height: 100px;
}
/*下划线*/
.l1{
text-decoration: underline;
}
/*中划线*/
.l2{
text-decoration: line-through;
}
/*上划线*/
.l3{
text-decoration: overline;
}
/*水平对齐,参照物*/
img,span{
vertical-align: middle;
}
</style>
</head>
<body>
<p class="l1">123456</p>
<p class="l2">123456</p>
<p class="l3">123456</p>
<h1>黄巾起义 群雄逐鹿</h1>
<p class="p1">大将军何进在与十常侍的斗争中被杀,袁绍、曹操等大臣以平“十常侍之乱”为名冲入皇宫,剿杀宦官。在保护汉少帝的过程中,西凉刺史董卓引兵入关,随即掌控大权,废汉少帝,另立陈留王刘协为汉献帝。生性残暴的董卓倒行逆施,引发多方愤然。曹操假借圣旨之名,召集十八路诸侯联合讨伐董卓。虎牢关前,志在匡扶汉室的刘备、关羽、张飞三兄弟大战吕布。讨董盟军声威浩大,迫使董卓挟献帝逃至长安,最终被司徒王允设连环计除掉。</p>
<p class="p2"> 然而十八路诸侯各怀异心,联盟开始分崩离析。袁绍欲谋取长沙太守孙坚手中的传国玉玺,联合刘表将孙坚杀死。同时,袁绍又在界桥之战中击败公孙瓒,成为北方最强势力。此时的曹操也广招贤才,积聚实力。群雄逐鹿的雏形初成。</p>
<img src="../image/u=4080914432,1502333241&fm=253&fmt=auto&app=120&f=JPEG.webp">
<span>魏武帝曹操(155年 [1] —220年3月15日 [2] ),字孟德,小字阿瞒</span>
</body>
</html>
4、阴影与超链接伪类
阴影:text-shadow:阴影颜色,水平偏移,垂直偏移,阴影半径
超链接伪类:只需记a:hover
#price{
text-shadow: deepskyblue 10px -10px 3px;
}
/*鼠标悬浮的状态*/
a:hover{
color: blue;
font-size: 50px;
}
5、列表
html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>practice</title>
<link rel="stylesheet" href="../css/practice.css">
</head>
<body>
<div id="nav">
<h1>全部商品分类</h1>
<ur>
<li><a href="#">家用电器</a></li>
<li><a href="#">手机</a> / <a href="#">运营商</a> / <a href="#">数码</a></li>
<li><a href="#">办公</a> / </li>
<li><a href="#">家居</a> / <a href="#">家具</a> / <a href="#">家装</a> / <a href="#">厨具</a></li>
<li><a href="#">男装</a> / <a href="#">女装</a> / <a href="#">童装</a> / <a href="#">内衣</a></li>
<li><a href="#">美妆</a> / <a href="#">个护清洁</a> / <a href="#">宠物</a></li>
<li><a href="#">女鞋</a> / <a href="#">箱包</a> / <a href="#">钟表</a> / <a href="#">珠宝</a></li>
<li><a href="#">男鞋</a> / <a href="#">运动</a> / <a href="#">户外</a></li>
</ur>
</div>
</body>
</html>
css:
#nav{
width: 300px;
background: #f5f4dd;
}
h1{
background: brown;
font-size: 40px;
text-indent: 1em;
line-height: 50px;
}
ur li{
text-decoration: none;
height: 30px;
text-indent: 2em;
list-style: none;
}
a:hover{
color: brown;
text-decoration: underline;
}
a{
color: black;
text-decoration: none;
}
6、背景
background:颜色,图片,图片位置,平铺方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>backgroundTest</title>
<style>
div{
height: 1000px;
width: 1500px;
/*边框样式 粗细 样式 颜色*/
border: 1px solid darkred;
/*默认全部平铺*/
/*颜色,图片 图片位置 平铺方式*/
background: red url("../image/u=4080914432,1502333241&fm=253&fmt=auto&app=120&f=JPEG.webp");
}
#div2{
/*水平平铺*/
background-repeat: repeat-x;
}
#div3{
/*垂直平铺*/
background-repeat: repeat-y;
}
</style>
</head>
<body>
<div id="div1"></div>
<div id="div2"></div>
<div id="div3"></div>
</body>
</html>
7、渐变
background-image: linear-gradient();
background-image: linear-gradient(225deg, #FFFFFF 0%, #6284FF 50%, #FF0000 100%);
五、盒子模型
1、认识盒子模型
margin:外边距
border:边框
padding:外边距
2、边框
颜色,图片,图片位置,平铺方式
border: 1px solid red;
3、内外边距
上右下左
/*居中,前提是一个有固定宽度的块元素*/
margin: 0 auto;
padding: 0 0 0 0;
盒子计算方式:元素大小=margin+border+padding+内容宽度
4、圆角边框
左上 右上 右下 左下
border-radius: 60px;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*左上 右上 右下 左下*/
/*圆圈:圆角=半径+边距*/
div{
width: 100px;
height: 100px;
border: 10px solid red;
border-radius: 60px;
}
img{
border-radius: 15px;
}
</style>
</head>
<body>
<div></div>
<img src="../image/u=4080914432,1502333241&fm=253&fmt=auto&app=120&f=JPEG.webp" alt="">
</body>
</html>
六、浮动
1、块级元素和行内元素
块级元素(独占一行)
h1~h6 p div 列表...
行内元素(不独占一行)
span a img strong...
行内元素可以包含在块级元素内,反之不行
2、display
/*
display:
block 块元素
inline 行内元素
inline-block:是块元素,但是可以内联在一行
none
*/
div{
width: 100px;
height: 100px;
border: 2px solid red;
display: inline-block;
}
/*行内元素和高度、宽度没关系*/
span{
width: 100px;
height: 100px;
border: 2px solid red;
display: inline-block;
}
3、float浮动元素
float:元素浮动,可以理解为元素脱离来到了新的平面
觉得难理解的可以前往:(图文详细)最通俗易懂的CSS 浮动float属性详解
.l1{
width: 400px;
height: 600px;
border: 1px solid red;
display: inline-block;
float: right;
}
.l2{
width: 400px;
height: 600px;
border: 1px solid red;
display: inline-block;
float: right;
}
.l3{
width: 400px;
height: 600px;
border: 1px solid red;
display: inline-block;
float: right;
}
4、父级边框塌陷问题
如果元素都浮动,则父级边框塌陷:
解决塌陷问题的方法:
①增加父级元素高度
#f{
border: 1px solid black;
height: 400px;
}
②在所有元素下增加一个空的div标签,清除浮动
.clear{
clear: both;
margin: 0;
padding: 0;
}
③在父级元素中增加一个overflow:hidden属性
#f{
border: 1px solid black;
overflow: hidden;
}
④父类添加一个伪类:after
#f:after{
content: "";
display:block;
clear:both;
}
总结
- 浮动元素后面添加空div,简单
- 设置父元素的高度,不方便添加元素(不灵活)
- overflow,简单,但下拉场景避免使用
- 父类添加一个伪类:after(推荐),写法稍微复杂,但推荐使用
5、display和float对比
- display,方向不可控制
- float,浮动起来的话会脱离标准
七、定位
默认模板
1、相对定位
position: relative;
top向上偏移
bottom向下偏移
left向左偏移
right向右偏移
它仍然在标准文档中,原来的位置会被保留
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--相对定位
相对自己现在的位子进行偏移\
可以理解为负号为向设定的方向移动
-->
<style>
div{
margin: 10px;
padding: 5px;
font-size: 12px;
line-height: 25px;
}
#father{
padding: 0;
border: 1px solid #e8aaf5;
}
#first{
background: yellow;
border: 1px dashed #38acf5;
position: relative;
top: 10px;
right: 30px;
}
#second{
background: purple;
border: 1px dashed #f58d13;
position: relative;
top: 10px;
left: 30px;
}
#third{
background: grey;
border: 1px dashed #cef506;
position: relative;
bottom: 10px;
left: 10px;
}
</style>
</head>
<body>
<div id="father">
<div id="first">第一个盒子</div>
<div id="second">第二个盒子</div>
<div id="third">第三个盒子</div>
</div>
</body>
</html>
2、绝对定位
position: absolutely;
1、没有父级元素定位的前提下,相对于浏览器定位
2、假设父级元素存在定位,我们通常会相对父元素进行偏移
3、固定定位
position: fixed;
固定定位,定在了浏览器的某一位置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*position: fixed;
固定定位,定在了浏览器的某一位置
*/
body{
height:1000px
}
div:nth-of-type(1){
width: 100px;
height: 100px;
background: yellow;
position: absolute;
right: 0;
bottom: 0;
}
div:nth-of-type(2){
width: 50px;
height: 50px;
background: red;
position: fixed;
right: 0;
bottom: 0;
}
</style>
</head>
<body>
<div>div1</div>
<div>div2</div>
</body>
</html>
4、z-index
图层:元素是分层的,最低0,没有最高~
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
width:380px;
padding: 0;
margin: 0;
overflow: hidden;
font-size: 12px;
line-height: 25px;
border: 1px solid #000;
}
ul,li{
padding: 0;
margin: 0;
list-style: none;
}
/*父级元素相对定位*/
ul{
position: relative;
}
.f1{
color:white;
font-size: 25px;
position: absolute;
width: 380px;
height: 25px;
top:300px;
z-index: 1;
}
.f3{
width: 380px;
height: 25px;
background: black;
position: absolute;
top:300px;
z-index: 0;
}
</style>
</head>
<body>
<div>
<ul>
<li class="f2"><img src="../image/u=369454234,524738727&fm=253&fmt=auto&app=120&f=PNG.webp" alt=""></li>
<li class="f3"></li>
<li class="f1">Huawei nova11</li>
</ul>
</div>
</body>
</html>