CSS3
Cascading Style Sheet 层叠级联样式表
发展史
CSS1.0
CSS2.0 DIV(块)+CSS,HTML与CSS结构分离思想,网页变得简单,SEO
CSS2.1 浮动,定位
CSS3.0 圆角,阴影,动画....... 浏览器兼容性问题呢
基本语法入门
在HTML里编写CSS的规范
语法:
选择器{
声明1;
声明2;
声明3;
}
代码举例
<!DOCTYPE html>
<html>
<head>
<title>MyHtml.html</title>
<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">
<style>
a {
color: blue;
}
</style>
</head>
<body>
<a>top</a>
</body>
</html> 在HTML和CSS分离的规范
CSS中
选择器{
声明1;
声明2;
声明3;
}
HTML中
<link rel="stylesheet" href="路径styles.css">
代码举例
在HTML中
<!DOCTYPE html>
<html>
<head>
<title>MyHtml.html</title>
<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="CSS/test.css">
</head>
<body>
<a>top</a>
</body>
</html>
在CSS中
@CHARSET "UTF-8";
a {
color: red;
} CSS优势
1、内容和表现分离
2、网页结构表现统一,可以实现复用
3、样式十分丰富
4、建议使用独立于html的css文件
5、利用SEO,容易被搜索引擎收录
CSS的三种导入方式
1、外部样式
2、内部样式
3、行内样式
参考基本语法入门(上面)
写在HTML里不分彼此的是内部样式
独立一个css文件的是外部样式
行内样式举例
<!DOCTYPE html>
<html>
<head>
<title>MyHtml.html</title>
<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<a style="color:red">top</a>
</body>
</html> 优先级关系
就近原则,离元素最近的优先级最高
行内样式最近,优先级最高
内部样式和外部样式,谁后出现谁优先级高
拓展外部样式两种写法
链接式:
属于html
<link rel="stylesheet" href="CSS/test.css">
导入式:
属于CSS2.1特有的
<style>
@import url("CSS/test.css");
</style> 首页link和import语法结构不同。前者<1ink>是html标签,只能放入html源代码中使用,后者可看作为css样式,作用是引入css样式功能,。import在html使用时候需要标签,同时可以直接@import ur(CSS文件路径地址);""放如css文件或css代码里引入其它css文件。
本质上两者使用选择区别不大,但为了软件中编辑布局网页html代码,一般使用link较多,也推荐使用link。
选择器
作用:选择页面上的某一个或者某一类元素
基本选择器
1、标签选择器
一个完整的HTML页面是有很多不同的标签组成,标签选择器,则是决定哪些标签
采用相应的CSS样式,(在大环境中你可能处于不同的位置,但是不管怎么样,你总
是穿着同一套衣服,这件衣服就是由标签选择器事先给你限定好的,不管走到哪里
都是这身衣服)比如,在style.css文件中对p标签样式的声明如下:
p{
color:red;
} 复制代码则页面中所有p标签的颜色都是红色
2、类选择器(class)
类选择器根据类名来选择
前面以”.”来标志,如:
.demoDiv{
color:red;
}
在HTML中,定义一个class的属性。
如:
<div class="demoDiv">
这个区域字体颜色为红色
</div> 同时,我们可以再定义一个元素:
<p class="demoDiv">
这个段落字体颜色为红色
</p> 最后,用浏览器浏览,我们可以发现所有class为demoDiv的元素都应用了这个样式。包括了页面中的div元素和p元素。
上例我们给两个元素都定义了class,但如果有很多个元素都会应用这个元素,那得一个个的定义元素,就会造成页面重复的代码太多,这种现象称为“多类症”。
我们可以改成这样来定义。
<div class="demoDiv"> <div> 这个区域字体颜色为红色 </div> 同时,我们可以再定义一个元素: <p> 这个段落字体颜色为红色 </p> </div>
这样,我们就只是定义了一个类,同时把样式应用到了所有的元素当中。
3、id选择器
ID 选择器可以为标有特定 ID 的 HTML 元素指定特定的样式。 根据元素ID来选择元素,具有唯一性,这意味着同一id在同一文档页面中只能出现一次。
前面以”#”号来标志,在样式里面可以这样定义:
#demoDiv{
color:red;
} 这里代表id为demoDiv的元素的设置它的字体颜色为红色。
我们在页面上定义一个元素把它的ID定义为demoDiv,如:
<div id="demoDiv"> 这个区域字体颜色为红色 </div>
优先级关系
id选择器 > 类选择器 > 标签选择器
层次选择器
区分层次关系
爷爷>爸爸>儿子>孙子
后代选择器
在某个元素后面(假设下方p为爸爸,则爸爸、儿子、孙子都包括)
body p{
background: red;
} 这个元素后面所有都会选中
子选择器
某一代(假设下方p为爸爸,则爸爸这一代都包括)
body>p{
background: red;
} 与这个元素同层次的都会选中
相邻兄弟选择器
同辈中的下一个(假设下方p为爸爸,则只包括爸爸的第一个弟弟)
/*active是自己添加的类
<p class="active">p1</p>*/
.active + p{
background: red;
} 与这个元素同层次的下方第一个元素
通用兄弟选择器
同辈中的下方全部(假设下方p为爸爸,则包括爸爸的所有弟弟)
/*active是自己添加的类
<p class="active">p1</p>*/
.active~p{
background: red;
} 与这个元素同层次的下方所有元素
结构伪类选择器
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>结构伪类选择器</title>
<style>
/*ul的第一个子元素*/
ul li:first-child{
background: red;
}
/*ul的最后一个子元素*/
ul li:last-child{
background: blue;
}
/*选中p1*/
/*选择当前p元素的父级元素
选中父级元素的第一个元素
并且是当前选择元素才生效
按顺序第一个*/
p:nth-child(1){
background: green;
}
/*选中p2*/
/*选择当前p元素的父级元素
选中父级元素的第一个p元素
按类型第二个*/
p:nth-of-type(2){
background: yellow;
}
/*鼠标放上去变色*/
a:hover{
background: black;
}
/*鼠标单击未释放*/
a:active{
background: blue;
}
</style>
</head>
<body>
<a href="">hello</a>
<p>p1</p>
<p>p2</p>
<p>p3</p>
<ul>
<li>li1</li>
<li>li2</li>
<li>li3</li>
</ul>
</body>
</html> 属性选择器
id和class选择器的结合
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>结构伪类选择器</title>
<style>
/*属性名,属性名=属性值(正则)
= 绝对等于
*= 包含这个元素
^= 以这个元素开头
$= 以这个元素结尾
*/
/*存在id属性的元素*/
a[id]{
background:blue;
}
/*id为first的元素*/
a[id=first]{
background:blue;
}
/*class中有link的元素*/
a[class*=link]{
background:blue;
}
/*选中href中以http开头的元素*/
a[href^=http]{
background:blue;
}
/*选中href中以com结尾的元素*/
a[href$=com]{
background:blue;
}
</style>
</head>
<body>
<a id="first">a1</a>
<a id="second">a2</a>
<a class="link one">a3</a>
<a class="link two" href="abcdefg.com">a4</a>
<a class="three" href="http//abcdefg">a5</a>
<a href="http//baidu.com">a6</a>
</body>
</html> 美化网页元素
span标签:突出要突出的字用span标签套起来
我是<span id="">梦寐</span>
字体样式
font-family:字体 font-size:大小 font-weight:字体粗细 color:颜色 也可以直接写成 font: 风格 粗细 大小 字体
文本样式
color:颜色
text-align:center 排版居中
text-indent:2em 段落首行缩进
background:背景色
height:当前元素块高度
line-height:每行高度
text-decoration:underline(下划线)
text-decoration:line-through(中划线)
text-decoration:overline(上划线)
text-decoration:none(去下划线)
水平对齐,要参照物a,b
<style>
img,span{
vertical-align:middle;
}
</style>
<body>
<img src="dream.png">
<span>梦寐</span>
</body> 阴影 text-shadow: (阴影颜色 水平偏移 垂直偏移 阴影半径)
四个参数,后三个参数记得带单位
超链接伪类
正常情况下,只用前两个
a{} //正常显示的状态
a:hover{} //鼠标悬停状态
a:active{} //单击未释放
a:link{} //未访问链接
a:visited{} //已访问链接
列表
/*ul li*/
/*height: 行高*/
/*list-style:
none 去掉圆点
circle 空心圆
decimal 数字
square 正方形
*/
/**/
ul li{
height: 30px;
list-style: none;
text-indent: 1em;
} 背景
背景颜色
background没啥好说的
默认参数为 颜色 图片 横坐标 纵坐标 平铺方式
背景图片
background-image: url("路径");/*默认平铺*/
background-repeat: repeat-x;/*水平平铺一行*/
background-repeat: repeat-y;/*垂直平铺一行*/
background-repeat: no-repeat;/*不平铺仅一张*/
background-position: 10px 10px/*背景图片位置*/ 渐变
<!DOCTYPE html>
<html>
<head>
<title>MyHtml.html</title>
<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">
<style>
body{
background-color: #21D4FD;
background-image: linear-gradient(19deg, #21D4FD 0%, #B721FF 100%);
}
</style>
</head>
<body>
</body>
</html> linear-gradient参数(渐变轴,颜色1,颜色2(带透明度))
盒子模型
盒子模型包括
margin:外边距
border:边框
padding:内边距
外边距
边框外面的距离
margin:外边距距离
总有一个默认外边距
外边距的作用:居中元素margin:auto
margin:0;/*上下左右都为0*/ margin:0 0;/*上下,左右都为0*/ margin:0 0 0 0;/*上,下,左,右都为0*/ margin:auto;/*上下左右居中*/ margin:0 auto;/*上下为0,左右居中*/
内边距相似
边框
border:粗细,样式,颜色
样式包括:solid 实线、dashed 虚线
圆角边框
border-radius:50px;/*上左,上右,下右,下左画四分之一圆,半径50px*/ border-radius:50px 0;/*上左,下右画四分之一圆,半径50px*/ border-radius:50px 0 0 0/*上左画四分之一圆,半径50px*/
注意设置边框的宽高,避免宽高不够使圆角被挤压变形
div{
width:50px;
height:50px;
background:red;
border-radius:50px 0 0 0;
}/*画一个四分之一圆*/ 盒子的计算(元素大小)
元素大小为:外边距margin + 边框border + 内边距padding + 内容宽度
浮动
display
块级元素
h1~h6 p div 列表...
行内元素
span a img strong...
行内元素可以被包含在块级元素中,反之不行。
<!DOCTYPE html>
<html>
<head>
<title>MyHtml.html</title>
<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">
<!--
display:是块元素还是行内元素。
block 块元素
inline 行内元素
inline-block 是块元素,但可以内联在一行
none 不显示
-->
<style>
div{
width:100px;
height:100px;
border:1px solid black;
display:inline;
}
spam{width:100px;
height:100px;
border:1px solid black;
display:inline-block;
}
</style>
</head>
<body>
<div>块元素</div>
<span>行内元素</span>
</body>
</html> 一般用float,不用它
float
<body>
<div id="father">
<div class="layer01"><img src="images/1.jpg" alt=""/></div>
<div class="layer02"><img src="images/2.jpg" alt=""/></div>
<div class="layer03"><img src="images/3.jpg" alt=""/></div>
</div>
</body> .layere01{
width:100px;
height:100px;
border:1px solid black;
display:inline-block;
float:left;/*靠左浮动*/
}
.layere02{
width:100px;
height:100px;
border:1px solid black;
display:inline-block;
float:left;//*靠左浮动*/
}
.layer03{
width:100px;
height:100px;
border:1px solid black;
display:inline-block;
float:right;
} 会随着页面变化而变化,浮在对应位置。
clear
clear:right;右侧不允许有浮动元素。
clear:left;左侧不允许有浮动元素。
clear:both;两侧都不允许有浮动元素。
排列到下一行。
父级边框塌陷问题
1、增加父级元素高度
<body>
<div id="father">
<div class="layer01"><img src="images/1.jpg" alt=""/></div>
<div class="layer02"><img src="images/2.jpg" alt=""/></div>
<div class="layer03"><img src="images/3.jpg" alt=""/></div>
</div>
</body> #father{
border:1px #000 solid;
height:800px;
} 2、增加一个空的div标签,清除浮动
<body>
<div id="father">
<div class="layer01"><img src="images/1.jpg" alt=""/></div>
<div class="layer02"><img src="images/2.jpg" alt=""/></div>
<div class="layer03"><img src="images/3.jpg" alt=""/></div>
<div class="clear"></div>
</div>
</body> .clear{
clear:both;
margin:0;
padding:0;
} 3、overflow
<body>
<div id="father">
<div class="layer01"><img src="images/1.jpg" alt=""/></div>
<div class="layer02"><img src="images/2.jpg" alt=""/></div>
<div class="layer03"><img src="images/3.jpg" alt=""/></div>
</div>
</body> #father{
border:1px #000 solid;
overflow:hidden;/*未规定高度,由元素撑起高度,所以不存在超出问题*/
} overflow:hidden;超出宽度,则超出部分隐藏
overflow:scroll;超出宽度,则侧边出现滚动条
4、父类添加一个伪类,after
<body>
<div id="father">
<div class="layer01"><img src="images/1.jpg" alt=""/></div>
<div class="layer02"><img src="images/2.jpg" alt=""/></div>
<div class="layer03"><img src="images/3.jpg" alt=""/></div>
</div>
</body> #father:after{
content:'';/*添加一个空内容,就像一个空的div*/
display:block;
clear:both;
} 小结
1.设置父元素的高度
简单,元素假设有了固定的高度,就会被限制
2.浮动元素后面增加空div
简单,代码中尽量避免空div
3.overflow
简单,下拉的一些场景避免使用
4.父类添加一个伪类:after(推荐使用)
写法稍微复杂,但是没有副作用。
对比
display
方向不可控制
float
浮动起来的话会脱离标准文档流,所以要解决父级边框塌陷问题
定位
相对定位
<style>
div{
margin:10px;
padding:5px;
font-size:12px;
line-height:25px;
}
#father{
border:1px solid black;
padding:0;
}
#first{
background-color:red;
position:relative;/*相对定位:上下左右*/
top:-20px;/*相对于原来位置,向上移动20*/
left:20px;/*相对原来位置,左边增加20,即为向右移动*/
}
</style>
<body>
<div id="father">
<div id="first">
第一个盒子
</div>
</div>
</body> 相对定位:position:relative;
相对原来的位置,进行指定的偏移,仍在标准文档流中,原来的位置会被保留。
绝对定位
定位:基于XXX定位,上下左右
1、没有父级元素定位的前提下,基于浏览器定位
2、假设父级元素存在定位,我们通常相对父级元素进行偏移
3、在父级元素范围内移动
相对于父级或浏览器的位置进行指定的偏移,它不在标准文档流中,原来的位置不会被保留。
<style>
div{
margin:10px;
padding:5px;
font-size:12px;
line-height:25px;
}
#father{
border:1px solid black;
padding:0;
position:relative;/*不加这句下面的绝对定位就是相对于浏览器定位。*/
}
#first{
background-color:red;
position:absolute;/*绝对定位*/
top:20px;/*相对父级元素,上方举例增加20*/
left:20px;/*相对父级元素,左边增加20*/
}
</style>
<body>
<div id="father">
<div id="first">
第一个盒子
</div>
</div>
</body> 固定定位
<style>
body{
height:1000px;/*使浏览器产生滚动条*/
}
div:nth-of-type(1){/*绝对定位*/
width:100px;
height:100px;
background:red;
position:absolute;
right:0;
botton:0;
}
div:nth-of-type(1){/*固定定位*/
width:50px;
height:50px;
background:yellow;
position:fix;
right:0;
bottom:0;
}
</style>
<body>
<div>绝对定位</div>
<div>固定定位</div>
</body> 滑动滚动条,绝对定位会随着变换,固定定位不会
z-index
层级问题,0最底,数字越大越高。
<style>
div:nth-of-type(1){/*绝对定位*/
width:100px;
height:100px;
background:red;
line-height:100px;
text-align:center;
position:absolute;
left:0;
top:0;
z-index:0;
}
div:nth-of-type(2){/*固定定位*/
width:50px;
height:50px;
background:yellow;
position:absolute;
left:0;
top:0;
z-index:99;
opacity:0.5;/*背景透明度*/
}
</style>
<body>
<div>第一层</div>
<div>大气层</div>
</body> 动画
参考菜鸟教程,内容太多自行学习



京公网安备 11010502036488号