尚硅谷学习笔记
目录
1.简介
CSS
- 层叠样式表
- 网页实际上是一个多层的结构,通过CSS可以分别为网页的每一个层来设置样式
而最终我们能看到只是网页的最上边一层
- 总之一句话,CSS用来设置网页中元素的样式
使用CSS来修改元素的样式:
[1].(内联样式,行内样式):
- 在标签内部通过style属性来设置元素的样式
- 问题:
使用内联样式,样式只能对一个标签生效,
如果希望影响到多个元素必须在每一个元素中都复制一遍
并且当样式发生变化时,我们必须要一个一个的修改,非常的不方便
- 注意:开发时绝对不要使用内联样式
<p style="color:red; font-size: 60px;">少小离家老大回,乡音无改鬓毛衰</p>
<p style="color: red; font-size: 60px;">今天天气真不错!</p>
[2]. (内部样式表)
- 将样式编写到head中的style标签里
然后通过CSS的选择器来选中元素并为其设置各种样式
可以同时为多个标签设置样式,并且修改时只需要修改一处即可全部应用
- 内部样式表更加方便对样式进行复用
- 问题:
我们的内部样式表只能对一个网页起作用,
它里边的样式不能跨页面进行复用
<style>
p{
color: green;
font-size: 50px;
}
</style>
[3].(外部样式表) 最佳实践
- 可以将CSS样式编写到一个外部的CSS文件中,
然后通过link标签来引入外部的CSS文件
- 外部样式表需要通过link标签进行引入,
意味着只要想使用这些样式的网页都可以对其进行引用
使样式可以在不同页面之间进行复用
- 将样式编写到外部的CSS文件中,可以使用到浏览器的缓存机制,
从而加快网页的加载速度,提高用户的体验。
link在 head中写,注意要有./因为在同一个文件夹下
<link rel="stylesheet" href="./style.css">
2.语法
(CSS中的注释,注释中的内容会自动被浏览器所忽略。)
CSS的基本语法:
选择器 声明块
[1].选择器
通过选择器可以选中页面中的指定元素 -比如 p 的作用就是选中页面中所有的p元素
[2].声明块
通过声明块来指定要为元素设置的样式 。声明块由一个一个的声明组成 ,声明是一个名值对结构,一个样式名对应一个样式值,名和值之间以:连接,以;结尾。
<style>
p{
color: red;
font-size: 40px;
}
h1{
color: green;
}
</style>
3.常用选择器(在head中的style编辑)
[1].将所有的段落设置为红色(字体)
元素选择器
作用:根据标签名来选中指定的元素
语法:标签名{}
例子:p{} h1{} div{}
p{
color: red;
}
h1{
color: green;
}
[2].将单独段落设置成红色
(1)id选择器(id不可以重复)#
作用:根据元素的id属性值选中一个元素
语法:#id属性值{}
例子:#box{} #red{}
#red{
color: red;
}
(2)类选择器(class可以重复).
作用:根据元素的class属性值选中一组元素
语法:.class属性值
补充:class 是一个标签的属性,它和id类似,不同的是class可以重复使用
可以通过class属性来为元素分组
可以同时为一个元素指定多个class属性,之间加空格就可
.blue{
color: blue;
}
.abc{
font-size: 20px;
}
[3].通配选择器*
作用:选中页面中的所有元素
语法: *
*{
color: red;
}
4.复合选择器
[1].交集选择器
作用:选中同时复合多个条件的元素
语法:选择器1选择器2选择器3选择器n{}
注意点: 交集选择器中如果有元素选择器,必须使用元素选择器开头
/*将class为red的div字体大小设置为30px */
div.red{
font-size: 30px;
}
.a.b.c{
color: blue
}
<div class="red2 a b c">我是div2</div>
[2]. 选择器分组(并集选择器)
作用:同时选择多个选择器对应的元素
语法:选择器1,选择器2,选择器3,选择器n{}
#b1,.p1,h1,span,div.red{}
h1, span{
color: green
}
5.关系选择器
父元素 - 直接包含子元素的元素叫做父元素
子元素 - 直接被父元素包含的元素是子元素
祖先元素 - 直接或间接包含后代元素的元素叫做祖先元素
- 一个元素的父元素也是它的祖先元素
后代元素 - 直接或间接被祖先元素包含的元素叫做后代元素
- 子元素也是后代元素
兄弟元素 - 拥有相同父元素的元素是兄弟元素
[1]. 子元素选择器
作用:选中指定父元素的指定子元素
语法:父元素 > 子元素
/*为div的子元素span设置一个字体颜色红色
(为div直接包含的span设置一个字体颜色)*/
div.box > span{
color: orange;
}
[2].后代元素选择器:
作用:选中指定元素内的指定后代元素
语法:祖先 后代
div span{
color: skyblue
}
div > p > span{
color: red;
}
[3].选择下一个兄弟
(若紧邻的不是编辑的兄弟,则什么也不显示)
语法:前一个 + 下一个
p + span{
color: red;
}
[4].选择下边所有的兄弟
语法:兄 ~ 弟
p ~ span{
color: red;
}
6.属性选择器
[属性名] 选择含有指定属性的元素 p[title]
[属性名=属性值] 选择含有指定属性和属性值的元素p[title=abc]
[属性名^=属性值] 选择属性值以指定值开头的元素p[title^=abc]
[属性名$=属性值] 选择属性值以指定值结尾的元素p[title$=abc]
[属性名*=属性值] 选择属性值中含有某值的元素的元素 p[title*=e]
head/style:
p[title]{
color: orange;
}
p[title=abc]{
color: orange;
}
p[title^=abc]{
color: orange;
}
p[title$=abc]{
color: orange;
}
p[title*=e]{
color: orange;
}
body:
<p title="abc">少小离家老大回</p>
7.伪类选择器
伪类(不存在的类,特殊的类)
- 伪类用来描述一个元素的特殊状态
比如:第一个子元素、被点击的元素、鼠标移入的元素...
- 伪类一般情况下都是使用:开头
[1].根据所有的子元素进行排序
:first-child 第一个子元素
:last-child 最后一个子元素
:nth-child() 选中第n个子元素
特殊值:
n 第n个 n的范围0到正无穷
2n 或 even 表示选中偶数位的元素
2n+1 或 odd 表示选中奇数位的元素
[2].同类型元素中进行排序
:first-of-type
:last-of-type
:nth-of-type()
[3],符合条件的元素从选择器中去除
- :not() 否定伪类
ul > li:first-child{
color: red;
}
ul > li:last-child{
color: red;
}
ul > li:nth-child(2n+1){
color: red;
}
ul > li:nth-child(even){
color: red;
}
ul > li:first-of-type{
color: red;
}
ul > li:not(:nth-of-type(3)){
color: yellowgreen;
}
8.a元素的伪类
:link 用来表示没访问过的链接(正常的链接)
a:link{
color: red;
}
:visited 用来表示访问过的链接
由于隐私的原因,所以visited这个伪类只能修改链接的颜色
a:visited{
color: orange;
}
:hover 用来表示鼠标移入的状态
a:hover{
color: aqua;
font-size: 50px;
}
:active 用来表示鼠标点击
a:active{
color: yellowgreen;
}
body:
<a href="https://www.baidu.com">访问过的链接</a>
<br><br>
<a href="https://www.baidu123.com">没访问过的链接</a>
9.伪元素选择器
伪元素,表示页面中一些特殊的并不真实的存在的元素(特殊的位置)
伪元素使用 :: 开头
::first-letter 表示第一个字母
::first-line 表示第一行
::selection 表示选中的内容
::before 元素的开始
::after 元素的最后
- before 和 after 必须结合content属性来使用
p::first-letter{
font-size: 50px;
}
p::first-line{
background-color: yellow;
}
p::selection{
background-color: greenyellow;
}
/* div::before{
content: 'abc';
color: red;
}
div::after{
content: 'haha';
color: blue;
} */
div::before{
content: '『';
}
div::after{
content: '』';
}
10.样式的继承
样式的继承,我们为一个元素设置的样式同时也会应用到它的后代元素上
继承是发生在祖先后后代之间的 继承的设计是为了方便我们的开发,
利用继承我们可以将一些通用的样式统一设置到共同的祖先元素上,
这样只需设置一次即可让所有的元素都具有该样式
注意:并不是所有的样式都会被继承:比如 背景相关的,布局相关等的这些样式都不会被继承。
11.单位
长度单位:
像素
- 屏幕(显示器)实际上是由一个一个的小点点构成的
- 不同屏幕的像素大小是不同的,像素越小的屏幕显示的效果越清晰
- 所以同样的200px在不同的设备下显示效果不一样
百分比
- 也可以将属性值设置为相对于其父元素属性的百分比
- 设置百分比可以使子元素跟随父元素的改变而改变
.box2{
width: 50%;
height: 50%;
background-color:aqua;
}
em
- em是相对于元素的字体大小来计算的
- 1em = 1font-size
- em会根据字体大小的改变而改变
.box3{
font-size: 50px;
/* width: 10em;
height: 10em; */
width: 10rem;
height: 10rem;
background-color: greenyellow;
}
rem
- rem是相对于根元素(html)的字体大小来计算
html{
font-size: 30px;
}
12.颜色
颜色单位:
在CSS中可以直接使用颜色名来设置各种颜色
比如:red、orange、yellow、blue、green ... ...
但是在css中直接使用颜色名是非常的不方便
RGB值:
- RGB通过三种颜色的不同浓度来调配出不同的颜色
- R red,G green ,B blue
- 每一种颜色的范围在 0 - 255 (0% - 100%) 之间
- 语法:RGB(红色,绿色,蓝色)
RGBA:
- 就是在rgb的基础上增加了一个a表示不透明度
- 需要四个值,前三个和rgb一样,第四个表示不透明度
1表示完全不透明 0表示完全透明 .5半透明
十六进制的RGB值:
- 语法:#红色绿色蓝色
- 颜色浓度通过 00-ff
- 如果颜色两位两位重复可以进行简写
#aabbcc --> #abc
HSL值 HSLA值:
H 色相(0 - 360)
S 饱和度,颜色的浓度 0% - 100%
L 亮度,颜色的亮度 0% - 100%
background-color: red;
background-color: rgb(255, 0, 0);
background-color: rgb(0, 255, 0);
background-color: rgb(0, 0, 255);
background-color: rgb(255,255,255);
background-color: rgb(106,153,85);
background-color: rgba(106,153,85,.5);
background-color: #ff0000;
background-color: #ffff00;
background-color: #ff0;
background-color: #bbffaa;
background-color: #9CDCFE;
background-color: rgb(254, 156, 156);
background-color: hsla(98, 48%, 40%, 0.658);
13.盒模型
盒模型、盒子模型、框模型(box model)
- CSS将页面中的所有元素都设置为了一个矩形的盒子
- 将元素设置为矩形的盒子后,对页面的布局就变成将不同的盒子摆放到不同的位置
- 每一个盒子都由一下几个部分组成:
内容区(content)
内边距(padding)
边框(border)
外边距(margin)
.box1{
/*
内容区(content),元素中的所有的子元素和文本内容都在内容区中排列
内容区的大小由width 和 height两个属性来设置
width 设置内容区的宽度
height 设置内容区的高度
*/
width: 200px;
height: 200px;
background-color: #bfa;
/*
边框(border),边框属于盒子边缘,边框里边属于盒子内部,出了边框都是盒子的外部
边框的大小会影响到整个盒子的大小
要设置边框,需要至少设置三个样式:
边框的宽度 border-width
边框的颜色 border-color
边框的样式 border-style
*/
border-width: 10px;
border-color: red;
border-style: solid;
}
14.盒子模型-边框
边框
边框的宽度 border-width
边框的颜色 border-color
边框的样式 border-style
[1].border-width:
10px;默认值,一般都是 3个像素
border-width可以用来指定四个方向的边框的宽度
值的情况 四个值:上 右 下 左
三个值:上 左右 下
两个值:上下 左右
一个值:上下左右
除了border-width还有一组 border-xxx-width
(xxx可以是 top right bottom left)用来单独指定某一个边的宽度
border-width: 10px;
border-top-width: 10px;
border-left-width: 30px;
[2].border-color
用来指定边框的颜色,同样可以分别指定四个边的边框 规则和border-width一样
border-color也可以省略不写,如果省略了则自动使用color的颜色值
border-color: orange red yellow green;
border-color: orange;
[3].border-style
指定边框的样式 solid 表示实线
dotted 点状虚线
dashed 虚线
double 双线
border-style的默认值是none 表示没有边框
border-style: solid dotted dashed double;
border-style: solid;
[4].border简写属性
通过该属性可以同时设置边框所有的相关样式,并且没有顺序要求
除了border以外还有四个 border-xxx
border-top
border-right
border-bottom
border-left
border: solid 10px orange;
border-top: 10px solid red;
border-left: 10px solid red;
border-bottom: 10px solid red;
15.盒子模型-内边距
内边距(padding)
- 内容区和边框之间的距离是内边距
- 一共有四个方向的内边距:
padding-top
padding-right
padding-bottom
padding-left
- 内边距的设置会影响到盒子的大小 - 背景颜色会延伸到内边距上
一共盒子的可见框的大小,由内容区 内边距 和 边框共同决定,所以在计算盒子大小时,需要将这三个区域加到一起计算
padding-top: 100px;
padding-left: 100px;
padding-right: 100px;
padding-bottom: 100px;
padding 内边距的简写属性,可以同时指定四个方向的内边距
规则和border-width 一样
padding: 10px 20px 30px 40px;
padding: 10px 20px 30px ;
padding: 10px 20px ;
padding: 10px ;
16.盒子模型-外边距
外边距(margin)
- 外边距不会影响盒子可见框的大小
- 但是外边距会影响盒子的位置
- 一共有四个方向的外边距:
margin-top - 上外边距,设置一个正值,元素会向下移动
margin-right - 默认情况下设置margin-right不会产生任何效果
margin-bottom - 下外边距,设置一个正值,其下边的元素会向下移动
margin-left - 左外边距,设置一个正值,元素会向右移动
- margin也可以设置负值,如果是负值则元素会向相反的方向移动
- 元素在页面中是按照自左向右的顺序排列的,所以默认情况下如果我们设置的左和上外边距则会移动元素自身, 而设置下和右外边距会移动其他元素
- margin的简写属性 margin 可以同时设置四个方向的外边距 ,用法和padding一样
- margin会影响到盒子实际占用空间
margin-top: 100px;
margin-left: 100px;
margin-bottom: 100px;
margin-bottom: 100px;
margin-top: -100px;
margin-left: -100px;
margin-bottom: -100px;
margin-right: 0px;
margin: 100px;
17.盒子的水平布局
元素的水平方向的布局:元素在其父元素中水平方向的位置由以下几个属性共同决定“
margin-left border-left padding-left width padding-right border-right margin-right
一个元素在其父元素中,水平布局必须要满足以下的等式
margin-left+border-left+padding-left+width+padding-right+border-right+margin-right = 其父元素内容区的宽度 (必须满足)
0 + 0 + 0 + 200 + 0 + 0 + 0 = 800
0 + 0 + 0 + 200 + 0 + 0 + 600 = 800
- 以上等式必须满足,如果相加结果使等式不成立,则称为过度约束,则等式会自动调整
- 调整的情况:
- 如果这七个值中没有为 auto 的情况,则浏览器会自动调整margin-right值以使等式满足
- 这七个值中有三个值和设置为auto
width margin-left maring-right
- 如果某个值为auto,则会自动调整为auto的那个值以使等式成立
0 + 0 + 0 + auto + 0 + 0 + 0 = 800 auto = 800
0 + 0 + 0 + auto + 0 + 0 + 200 = 800 auto = 600
200 + 0 + 0 + auto + 0 + 0 + 200 = 800 auto = 400
auto + 0 + 0 + 200 + 0 + 0 + 200 = 800 auto = 400
auto + 0 + 0 + 200 + 0 + 0 + auto = 800 auto = 300
- 如果将一个宽度和一个外边距设置为auto,则宽度会调整到最大,设置为auto的外边距会自动为0
- 如果将三个值都设置为auto,则外边距都是0,宽度最大
- 如果将两个外边距设置为auto,宽度固定值,则会将外边距设置为相同的值
所以我们经常利用这个特点来使一个元素在其父元素中水平居中
示例: width:xxxpx; margin:0 auto;
18.垂直方向的布局
默认情况下父元素的高度被内容撑开
子元素是在父元素的内容区中排列的,如果子元素的大小超过了父元素,则子元素会从父元素中溢出
使用 overflow 属性来设置父元素如何处理溢出的子元素
可选值:
visible 默认值 子元素会从父元素中溢出,在父元素外部的位置显示
hidden 溢出内容将会被裁剪不会显示
scroll 生成两个滚动条,通过滚动条来查看完整的内容
auto 根据需要生成滚动条
overflow-x:(横向) overflow-y:(纵向)
/*父元素*/
.box1{
width: 200px;
height: 200px;
background-color: #bfa;
overflow: auto;
}
19.外边距的折叠
垂直外边距的重叠(折叠)
- 相邻的垂直方向外边距会发生重叠现象
兄弟元素
- 兄弟元素间的相邻垂直外边距会取两者之间的较大值(两者都是正值)
- 特殊情况:如果相邻的外边距一正一负,则取两者的和。 如果相邻的外边距都是负值,则取两者中绝对值较大的
- 兄弟元素之间的外边距的重叠,对于开发是有利的,所以我们不需要进行处理
父子元素
- 父子元素间相邻外边距,子元素的会传递给父元素(上外边距)
- 父子外边距的折叠会影响到页面的布局,必须要进行处理
20.行内元素的盒模型
[1].行内元素的盒模型
- 行内元素不支持设置宽度和高度
- 行内元素可以设置padding,但是垂直方向padding不会影响页面的布局
- 行内元素可以设置border,垂直方向的border不会影响页面的布局
- 行内元素可以设置margin,垂直方向的margin不会影响布局
[2].display 用来设置元素显示的类型
可选值:
inline 将元素设置为行内元素
block 将元素设置为块元素
inline-block 将元素设置为行内块元素.行内块,既可以设置宽度和高度又不会独占一行
table 将元素设置为一个表格
none 元素不在页面中显示
[3].visibility 用来设置元素的显示状态
可选值:
visible 默认值,元素在页面中正常显示
hidden 元素在页面中隐藏 不显示,但是依然占据页面的位置
a{
display: block;
visibility: hidden;
width: 100px;
height: 100px;
background-color: orange;
}
21.默认样式
默认样式:
- 通常情况,浏览器都会为元素设置一些默认样式
- 默认样式的存在会影响到页面的布局,通常情况下编写网页时必须要去除浏览器的默认样式(PC端的页面)
1.
ul{
margin: 0;
padding: 0;
/* 去除项目符号(ul前面的·) */
list-style:none;
}
2.重置样式表:专门用来对浏览器的样式进行重置的(在style的上面)
reset.css 直接去除了浏览器的默认样式
normalize.css 对默认样式进行了统一
<!-- <link rel="stylesheet" href="./css/reset.css"> 两者选其一-->
<link rel="stylesheet" href="./css/normalize.css">