一、初识CSS 1.1 CSS是什么 CSS:Cascading Style Sheet 层叠级联样式表
CSS作用:表现(美化网页)
字体、颜色、边距、高度、宽度、背景图片、网页定位、网页浮动……
CSS的优势:
1、内容和表现分离
2、网页结构表现统一,可以实现服用
3、样式十分的丰富
4、建议使用独立于html的css文件
5、利用SEO,容易被搜索引擎收录!
1.2 CSS发展史 CSS1.0
CSS2.0 DIV(块)+CSS,HTML与CSS结构分离的思想,网页变得简单,SEO
CSS2.1 浮动,定位
CSS3.0 圆角,阴影,动画…… 浏览器兼容性
1.3 CSS的三种导入方式 1.3.1 内部样式: 在 中 用 可以编写css的代码,每一个声明最好使用分号结尾,语法如下:
选择器{ 声明1; 声明2; 声明3; }
Title<!--规范,<style> 可以编写css的代码,每一个声明 最好使用分号结尾
语法:
选择器{
声明1;
声明2;
声明3;
}
-->
<style>
h1{
color: red;
}
</style>
我是标题
1.3.2 外部样式(推荐使用): 两种写法:
①链接式(推荐):在html文件的<head>中,用 <link> 引用css文件
<link rel="stylesheet" href="css/style.css">
注:css文件夹与此 html 在同一个文件夹里
index.html :
Title
<!--引用css文件-->
<link rel="stylesheet" href="css/style.css">
我是标题
css/style.css :
h1 { color:red; } ②导入式:在html中, 在 的 中使用 @import @import url("css/style.css");
强烈推荐link方式,慎用import,区别如下:
a.加载顺序差别:当页面被加载的时候,link引用的CSS会同时被加载,而@import引用的CSS会等到页面全部被下载完再加载。所以有时候浏览@import加载CSS的页面时会没有样式,网速慢的时候明显。
b.语法结构不同:@import是 CSS 提供的语法规则,只有导入样式表的作用;link是HTML提供的标签,只能放入html中使用,可以加载 CSS 文件,还可以定义 RSS、rel 连接属性等。
c.兼容性差别:@import是CSS2.1才有的语法,只能在IE5+才能识别,link作为html元素,不存在兼容性问题
1.3.3 行内样式 在标签元素中,编写一个style属性,编写样式即可
<h2 style="color: aqua">小标题</h2>
注:不同样式,可以用 ;隔开
三种样式的优先级:
(就近原则)行内样式 > 内部样式 > 外部样式
二、CSS选择器⭐ 选择器的作用:用于选择页面上某一个或者某一类元素。
2.1 三种基本选择器 2.1.1 标签选择器 选择到页面上所有的这个标签的元素,格式:
标签 { } eg: h1 { }
2.1.2 类选择器 选择所有class属性一致的标签,跨标签,格式:
.class的名称 { }
好处:可以跨标签归类,可以复用
2.1.3 ID选择器 选择该id对应的标签,格式:
#id的名称 { }
特点:id 必须保证全局唯一!
三种选择器的优先级: id选择器>类选择器>标签选择器
三种基本选择器的代码如下:
三种基本选择器的使用<style>
/* 1.标签选择器:会选择到页面上所有的这个标签的元素 */
h1{
color: peachpuff;
}
/* 2.类选择器的格式
.class的名称{}
好处:可以跨标签归类,可以复用
*/
.study1{
color:goldenrod;
}
/* 3.id选择器 : id 必须保证全局唯一!
#id名称{}
优先级:id选择器 > class选择器 > 标签选择器
*/
#study{
color:deepskyblue;
}
</style>
标题1
标题2
标题3
标题4
标题5
页面效果截图如下:
2.2 层次选择器 本节所用代码body部分:
p0
p1
p2
p3
-
p4
-
p5
-
p6
p7
p8
效果截图:
2.2.1 后代选择器 (空格) 在祖先元素 (parent) 的所有后代中,查询指定元素 (p),格式:
parent p{} 代码样例:
body p{ background: gold; } 效果截图:
2.2.2 子选择器 (>) 在父元素 (parent) 的所有第一级子元素 (p) 中进行查找,格式:
parent>p{} 代码样例:
body>p{ background: gold; } 效果截图:
2.2.3 相邻兄弟选择器 (+) 选中兄弟元素 (brother) 后面的某一个相邻兄弟元素 p,格式:
brother+p{} 在本节开始的body部分,p1、p7均设有class="study",以便学习兄弟选择器,style部分代码如下:
.study+p{ background: gold; } 效果截图:
2.2.4 通用兄弟选择器 (~) 选中兄弟元素(brother)后面的所有的兄弟元素 p,格式:
brother~p{} 代码样例:
.study~p{ background: gold; } 效果截图:
2.3 结构伪类选择器(:) 伪类:用于定义元素的特殊状态(。用" : " )
例如,它可以用于:
设置鼠标悬停在元素上时的样式(hover) 为已访问和未访问链接设置不同的样式 设置元素获得焦点时的样式 代码格式:
selector:pseudo-class { property: value; } 代码样例:css部分:
/*1. ul 的第一个子元素 */ ul li:first-child{ background: red; }
/2. ul 的最后一个子元素/ ul li:last-child{ background: yellow; }
/*3. 选中p1 : 定位到父元素,选择 其子元素的二个元素 选择当前p元素的父元素,再选该父元素的第一个子元素,并且是当前元素才生效 按照子元素的顺序找 */ p:nth-child(2){ background: pink; }
/*4. 选中p2:定位到父元素下的 p元素的第二个 按照类型的顺序找 */ p:nth-of-type(2){ background: orange; }
效果截图:
2.4 属性选择器(常用)⭐ 选择具有特定属性的HTML元素样式,id与class 的结合
= 绝对等于
*= 包含这个元素即可 eg: [title~=flower] --> 
= 独立包含这个元素 eg: [title=flower] --> 
|= 只包含这个元素 eg: [title|=flower] --> 
^= 以这个元素开头
$= 以这个元素结尾
代码示例:
/* 存在id属性的a元素 a[]{}*/ a[id]{ background: yellow; }
/* id=first 的a元素*/ a[id=first]{ background: orange; }
/* class中有hello的元素 / a[class=hello]{ background: pink; }
/* herf中以http开头的元素 */ a[herf^=http]{ background: skyblue; }
/* herf中以com 结尾的元素 */ a[herf$=com]{ background: lightgreen; }
三、美化网页(文字,阴影,超链接,列表) 3.1 概述 CSS的作用:
有效地传递页面信息 美化页面,页面漂亮,才能吸引用户 凸显页面的主题 提高用户体验 span标签:用来组合文档中的行内元素,重点要突出的字,使用span套起来
Title<style>
#title1{
font-size: 50px;
}
</style>
欢迎学习Java
3.2 字体样式 /* 字体样式 font-family:字体 font-size:字体大小 font-weight:字体粗细 color:字体颜色 */ 代码示例:
#title1{ font-size: 50px; }
body{
font-family: 楷体,Arial;
color: orange;
}
h1 {
font-size: 20px;
font-weight: bolder;
}
3.3 文本样式
颜色: ①单词 --> color:red ②RGB(0~F) --> color:#000000 ③RGBA(加透明度)--> color:rgba(0,225,225,0.5)
文本对齐的方式⭐: text-align:center 可设置居中、左、右
首行缩进⭐: text-indent:2em 单位:em(字)、px(像素)
行高⭐: line-height:30px 和块的高度一致就可以上下居中(line-height=height)
装饰:text-decoration underline | line-through | overline 下划线
文本图片对齐: 参照物 a b --> img,span{ vertical-align:middle; }
3.4 文本阴影(text-shadow)
/*基础的文本阴影效果
text-shadow: 水平偏移,垂直偏移,阴影半径,阴影颜色
*/
#price{
text-shadow: 5px 5px 5px #FF0000;
}
第一个值 (必选)表示 水平阴影的位置,允许负值
第二个值(必选) 表示 垂直阴影的位置,允许负值
第三个值(可选) 表示 模糊的距离
第四个值(可选) 表示 阴影的颜色
效果:
3.5 超链接伪类(a:hover) 在支持 CSS 的浏览器中,链接的不同状态都可以以不同的方式显示
/*未访问的链接的颜色*/
a:link{
color: #0000FF;
}
/*链接访问后的颜色*/
a:visited{
color: mediumpurple;
}
/*鼠标悬浮的状态*/
a:hover{
color: orange;
}
/*鼠标点击未释放时的状态*/
a:active{
color: lightgreen;
}
注意:
a:hover 必须被置于 a:link 和 a:visited 之后,才是有效的。
a:active 必须被置于 a:hover 之后,才是有效的。
3.6 列表 css 列表属性
属性 描述 list-style 把所有列表的属性设置与一个声明中 list-style-image 把图片设置为列表项标志 list-style-position 设置列表中列表标志的位置 list-style-type 设置列表项标志的类型
举例:
ul li{ height: 30px; /行高/ /list-style-type 标记类型 none 去掉原点 circle 空心圆 decimal 数字 square 正方形/ list-style-type: square;
/*list-style-position 标记位置
inside:列表项目标记放在文本以内
outside:默认标记位于文本左侧*/
list-style-position: outside;
/* list-style-image用图片替换标记 */
list-style-image:url("../image1.jpg") ;
text-indent: 1em;
}
3.7 背景 3.7.1 背景颜色(background-color) body { background-color:#11aaaa; } 颜色值的定义三种方式: #FF0000 rgb(255,255,255) red
3.7.2 背景图片(background-image) 默认情况下,背景图片以平铺重复显示
body{ background-image:url("../image1.jpg"); } 1、平铺设置(background-repeat)
body{ background-image:url("../image1.jpg"); background-repeat: repeat-x;/水平方向/ } repeat-x:只水平方向平铺 repeat-y:只垂直方向平铺 no-repeat:不重复
2、设置图片位置(background-position)
body{ background-image:url("../image1.jpg"); background-repeat: no-repeat; background-position: 200px top;/中间用空格/ } 第一个值是水平方向,可以写像素值表示离左边有多远,也可以用 left right center来表示
第二个值是垂直方向,可以写像素值表示离上边有多远,也可以用 top bottom center表示
注:中间用 空格 隔开,如果仅指定一个,其他值默认center
还有一种写法是用百分比(x% y%)表示, 左上角是0% 0% 右下角是 100% 100%,默认值是0% 0% 若仅指定一个,其他值默认为50%
3、联合设置背景(background)
/* 将背景设置在一起 颜色 图片 图片位置 平铺方式*/ background: red url("../image1.jpg") 270px 10px no-repeat; 用background,所用值 中间用 空格 隔开即可
3.8 渐变(Gradients) 一个比较好的设置渐变色的网站:Grabient
3.8.1线性渐变 语法:
background-image: linear-gradient(direction, color-stop1, color-stop2, ...);
direction: 设置角度;
color: 颜色,可以设置多个渐变颜色,方式同文字的设置方法,有三种:
①单词 --> red ②RGB(0~F) -->#000000
③RGBA(加透明度)--> rgba(0,225,225,0.5)
1、角度设置
①预定方向
默认是从上到下,不用设置direction。从红色过渡到黄色 ,如下所示:
background-image: linear-gradient(red,yellow);
也可以通过单词设置direction,来设定不同的角度,如
to right 从左到右 , to bottom 从上到下, to top 从下到上……
to bottom right 从左上 到 右下 ……
例如:从右上到左下,从红色过度到黄色 ,示例:
background-image: linear-gradient(to bottom left,red,yellow);
② 自定义方向
如图所示,0deg 表示从下到上, 90deg 表示从左到右,-90deg 表示从右到左……
例如:从右下到左上(-45deg) 从透明到粉色再到黄色:
background-image: linear-gradient(-45deg, rgba(255,0,0,0), pink, yellow);
2、设置颜色所占比例
在颜色后加上百分比,设置改颜色所占的比重,如下所示:
background-image: linear-gradient(-45deg, red 50%, pink, yellow);
3.8.2 径向渐变 语法:
background-image: radial-gradient(shape size at position, start-color, ..., last-color);
shape:形状,circle(圆形)、ellipse(椭圆,默认)
size: 渐变的大小,closest-side farthest-side closest-corner farthest-corner
①渐变的大小(size)
closest-side:半径为从圆心到最近边
closest-corner:半径为从圆心到最近角
farthest-side:半径为从圆心到最远边
farthest-side:半径为从圆心到最远角
如下,圆心为(30%,60%)的地方,如果用colset-color时,半径就是,圆心到最近的角(左下角)的距离:
background-image: radial-gradient( closest-corner at 30% 60% ,red 5%, yellow 15%, green 60%);
四、盒子模型⭐ 4.1 什么是盒子模型 所有html元素都可以看作一个盒子,封装周围的HTML元素,
包括 边距、边框、填充和实际内容
margin:外边距 padding:内边距 border:边框
4.2 边框(border) 可以设置border 的 粗细(width)、样式(style)和颜色(color)
可以合并设置
/border:粗细、样式、颜色/ #box{ width: 300px; /设置宽度/ border: 1px solid red ; /设置边框/ } 4.3 内、外边距(padding、margin) padding、maigin的属性值的个数可以是
4个值(上、右、下、左) 3个值(上、左右 、下) 2个值(上下、左右) 1个值(4个边距统一设置) 可能的值的:
auto:依赖于浏览器,自动 使用固定值:例如100px,单位可以是 px pt em等 使用百分比: 如30% 使用技巧: 巧用magin,使盒子左右居中:
margin:0 auto
注:margin 可以使用负值,重叠内容
也可以进行单独边的设置,如下图:
#box{ width: 300px; /宽度/ border: 1px solid red ; /边框/ margin: 100px auto; /外边距,左右居中/ padding-left:20px; } 盒子的计算方式:你这个元素到底多大?
margin+border+padding+内容宽度
4.4 圆角边框(border-radius) border-radius 值的个数可以为
4个: 左上 右上 右下 左下 (顺时针) 3个: 左上 右上和左下 右下 2个: 左上和右下 右上和左下 1个: 适用于所有四个角 代码:
div{
width: 100px;
height: 100px;
border: 10px solid red;
/*圆角边框: 左上 右上 右下 左下(顺时针)*/
border-radius: 50px 20px 10px 0;
}
如图:
如果要设置成圆圈,则让圆角=半径
注:border-radius也可以用来设置图片
4.5 盒子阴影(box-shaddow) div{ width: 100px; height: 100px; border: 10px solid red; /圆角边框: 左上 右上 右下 左下(顺时针)/ /若要设置成圆圈:圆角=半径/ border-radius: 100px ; /设置阴影/ box-shadow: 10px 10px 10px yellow ; } 如图:
五、浮动(float) 5.1标准文档流 1、标准文档流定义
文档流是指元素排版布局郭恒忠,默认自动从左往右、 从上往下的流式排列方式
eg:高矮不齐时候,底边对齐 / 一行写不下时候,自动换行
2、等级分类
块级元素:独占一行,不能与其他元素并列,能设置宽高
h1~h6 p div 列表 ……
行内元素:不独占一行,能与其他元素并排,不能设置宽高,默认宽度为文字宽度
span a img strong……
行内元素可以被包含在块级元素中,反之,则不可以
5.2 display display属性规定元素应该生成的框的类型,也是一种实现行内元素排列的方式,但是我们更多使用float
常用属性值:
none:此元素不会被显示
block:显示为块元素,独占一行
inline:行内元素,可以内联,即可以在一行,元素前后没有换行符(默认)
inline-block:行内块元素,也可以内联,(能保证所有块元素大小相同,固定大小)
用途:例如ul li元素,本身是block 但是 可以用下列代码,将各个li 设置为一行,用于上侧导航栏。
li{
display: inline-block;
}
如图:
5.3 float 浮动(float),会使元素向左或向右移动,其周围的元素也会重新排列
1、左右浮动
一个浮动的元素,会尽量向左或向右移动,直到碰到 框 或者另一个浮动元素的边框为止
css代码:
img { float:right; } html代码如下:
5.4 父级边框塌陷问题 5.4.1 clear 清除浮动 指定元素的某侧不允许浮动,属性值:
right:右侧不允许有浮动元素
left: 左侧不允许有浮动元素
both:两侧都不允许有浮动元素
none:允许浮动元素出现在两侧,默认值
inherit:从父元素继承clear属性的值
css 代码如下:
div{
margin:10px;
padding: 5px;
}
#father{
border: 3px solid red;
}
.layer01{
border: 1px blue dashed;
display: inline-block;
float: left;
}
.layer02{
border: 1px pink dashed;
display: inline-block;
float: left;
}
.layer03{
border: 1px orange dashed;
display: inline-block;
float: right;
}
.layer04{
border: 1px greenyellow dashed;
display: inline-block;
float: right;
clear: both;
}
html代码如下:
浮动演示,让图片一直浮动在右侧,绕开文本
<div class="layer01"><img src="image/image1.jpg" width="100" height="100" /></div>
<div class="layer02"><img src="image/image1.jpg" width="150" height="150" /></div>
这里有很多字。这里有很多字。这里有很多字。这里有很多字。
这里有很多字。这里有很多字。这里有很多字。这里有很多字。
这里有很多字。这里有很多字。这里有很多字。这里有很多字。
这里有很多字。这里有很多字。这里有很多字。这里有很多字。
这里有很多字。这里有很多字。这里有很多字。这里有很多字。
这里有很多字。这里有很多字。这里有很多字。这里有很多字。
这里有很多字。这里有很多字。这里有很多字。这里有很多字。
这里有很多字。这里有很多字。这里有很多字。这里有很多字。
<div class="layer03"><img src="image/image1.jpg" width="200" height="200" /></div>
这里有很多字。这里有很多字。这里有很多字。这里有很多字。
这里有很多字。这里有很多字。这里有很多字。这里有很多字。
这里有很多字。这里有很多字。这里有很多字。这里有很多字。
这里有很多字。这里有很多字。这里有很多字。这里有很多字。
这里有很多字。这里有很多字。这里有很多字。这里有很多字。
<div class="layer04">
浮动的盒子可以左右浮动,直到碰到边缘为止
</div>
效果截图:
如图所示,例如 layer04 是向右浮动,但是右侧有layer03时候,会自动换到下一行,
并且,很明显,用过float元素后,父类元素出现了塌陷。
.clear{
clear: both;
margin:0;
padding: 0;
}
5.4.2 解决方案 1、增加父级元素的高度(不推荐)
把父类元素设的足够高,不推荐使用
2、浮动元素后增加一个空的div,清除浮动
在父类元素内部的最后,即layer04之后再加入一个空的div,然后清除该div左右的浮动即可。
html 增加的代码如下:
<div class="clear"> </div>
css增加的代码如下:
.clear{
clear: both;
margin:0;
padding: 0;
}
效果如下:
3、用overflow去解决
在父级元素中增加一个 overflow: hidden
#father{
border: 3px solid red;
overflow: hidden;
}
overflow 经常用于列表显示不完全的时候的滑轮,属性选scroll
4、父类添加一个伪类 :after(推荐)
目前比较认可的一种方式,通过设置父类的 after 引入一个空内容,并且清除左右浮动,块类型设置为block即可。
#father:after{
content:'';
display: block;
clear: both;
}
小结(常考):⭐
方法1 设置父元素的高度
简单,但是元素有了固定的高度就会被限制
方法2 浮动元素后边增加一个空div
简单,但是代码中应尽量避免空div
方法3 overflow
简单,但是下拉的场景应避免使用
方法4 父元素添加一个伪类 :after(推荐)
写法稍微复杂一点点,但是没有副作用
5.5 对比 display 方向不可以控制
float 浮动起来的话会脱离标准文档流,所以要解决父级边框他先的问题
六、定位 6.1 相对定位(position:relative) 相对于自己原来的位置,进行指定的偏移,相对定位,它仍然在标准文档流中,原来的位置会被保留
top:-20px 负数表示朝着指定的方向,即向上 20px
bottom: 20px 整数表示远离指定的方向,这里也是向上20px
left: -30px 同理,表示向左30px
right: -20px 同理,表示向右30px
注:因为原来的位置保留,所以会产生父类塌陷的情况
初始效果图:
加了position之后,代码如下:
#father{
border: 1px red solid;
margin: 10px;
padding: 10px;
}
#first{
margin: 10px;
background-color: orange;
position: relative;
top:-20px /*向上👆移动20px*/
}
#second{
margin: 10px;
background-color: pink;
position: relative;
left: -20px;/*向左👈移动20px*/
}
#third{
margin: 10px;
background-color: lightgreen;
position: relative;
bottom: 10px;/*远离底部10px,即向上👆移动10px*/
}
如图所示:
6.2 绝对定位(position:absolute) 定位:基于XXX定位,上下左右
1、假设父级元素存在定位,我们通常相对于父级元素定位
2、若没有父元素定位,则相对于初始状态下的浏览器边界定位,若滑轮滚动,位置还会变,若调整浏览器大小,位置不变
3、在父级元素范围内移动
相对于父级或浏览器的位置,进行指定的偏移,绝对定位的话,它不再标准文档流中,原来的位置不会被保留
代码同6.3 中一起给出