CSS
内联属性(行内属性):
 在标签内用 style属性
问题
 只能对一个标签生效,不利于后期维护
内部样式表:
 将样式编写到head中的style标签里,然后通过css选择器选中元素并为其设置各种样式,修改时只需修改一处即可。
 内部样式更方便对样式的复用
问题
 内部样式表中的样式只能对一个网页起作用。
外部样式表:
 将css样式编写到一个css外部文件中,然后通过link标签引入,
 这样可以使用到浏览器的缓存机制,从而加快网页加载速度,提高用户体验。
选择器
作用:
根据标签来选中指定元素
语法:
标签名{}
例子:
p{},h1{},div{}
作用
根据元素id属性值选中一个元素
语法:
#id属性{}
例子
#box{}
#red{}
作用:
根据元素class属性值选中一组元素
语法:
.class{}
例子:
.blue{}
作用:
选中同时复合多个条件的元素
语法:
选择器1选择器2选择器n{}
注意:
交集选择器中如果有元素选择器必须使用元素选择器开头
作用:
同时选择多个选择器对应的元素
语法:
选择器1,选择器2,选择器n{}
常见关系:
- 父元素: - 直接包含子元素的元素
 
- 子元素 - 直接被父元素包含的元素
 
- 祖先元素 - 直接或间接包含后代元素的元素
- 一个元素的父元素也是他的祖先元素
 
- 后代元素 
- 直接或间接被祖先元素包含的元素 
- 子元素也是后代元素 
- 兄弟元素 - 拥有相同父元素的元素
 
- 子元素选择器:
作用:
 选中指定父元素的指定子元素
语法:
 父元素>子元素(>…)
例子:
 div>span{}
作用:
 选中指定元素内的指定后代元素
语法:
 祖先 后代{}
例子:
 div span{}
作用:
 选中指定元素内的指定兄弟元素
语法:
- 选择下一个: -  前一个+下一个{} 
- 选择下面所有: -  兄~第{} 
例子:
 div+span{}
 div~span{}
| 样式 | 作用 | 
|---|---|
| [属性名] | 选择含有指定属性的元素 | 
| [属性名=属性值] | 选择含有指定属性和属性值的元素 | 
| [属性名^=属性值] | 选择属性值以指定值开头的元素 | 
| [属性名$=属性值] | 选择属性值以指定值结尾的元素 | 
| [属性名*=属性值] | 选择属性值含有指定值的元素 | 
- 伪类选择器:- 伪类用来描述一个元素的特殊状态,比如:第一个元素、被点击的元素、鼠标移入的元素…… - 伪类一般以:开头 - 伪类 - 作用 - :first-child - 第一个元素 - :last-child - 最后一个元素 - :nth-child() - 第n个元素 - :first-of-type - 同类型元素中第一个元素 - :last-of-type - 同类型元素中最后一个元素 - :nth-of-type() - 同类型元素中第n个元素 - :not() - 将符合条件的元素从选择器中除去 - 注:nth-child(): - n==>全选
- 2n或even==>选中偶数元素
- 2n+1或odd==>选中奇数元素
 
一些常用的伪类:
:link(超链接特有)
 正常的链接
:visited(超链接特有)
 访问过的链接
 由于隐私原因,只能修改链接的颜色
:hover
 鼠标移入的状态
:active
 鼠标点击
伪元素:
- ::first-letter - 表示第一个字母 
- ::first-line - 表示第一行 
- ::selection - 表示选中的内容 
- ::before - 元素的开始 
- ::after - 元素的最后 - 注:before和after必须结合content属性来使用 
继承:
样式的继承,为一个元素设置的样式同时也会应用到他的后代元素上
继承是发生在祖先和后代之间的
注:并不是使用的样式都会被继承,比如:背景相关的,布局相关的等这些样式都不会被继承
选择器优先级:
- 样式的冲突: 
 当我们通过不同的选择器,选出相同的元素,并且为相同的样式设置不同的值时,此时就发生了样式冲突,发生样式冲突时,应用那个样式由选择器权重(优先级)决定
- 选择器权重: 
| 选择器 | 权重 | 
|---|---|
| 内联样式 | 1,0,0,0 | 
| id选择器 | 0,1,0,0 | 
| 类和伪类选择器 | 0,0,1,0 | 
| 元素选择器 | 0,0,0,1 | 
| 通配选择器 | 0,0,0,0 | 
| 继承选择器 | 无 | 
-  比较优先级时,需要将所有的选择器的优先级进行相加计算,最后优先级越高,则越优先显示(分组选择器是单独计算的),选择器的累加不会超过其最大的数量级,如果优先级计算后相同,此时则优先使用靠下的样式 
- 可以在某一个样式的后面添加!important,则此时该样式会获取到最高的优先级,甚至超过内联样式 - 注:慎用 
 
像素和百分比:
- 长度单位: -     像素- 不同显示器的像素大小是不同的,像素越小的屏幕显示的效果越清晰
- 相同的200px在不同的设备下显示效果是不一样的
 
- 百分比- 设置百分比可以使子元素随父元素的改变而改变
 
- em- em是相对与元素的字体大小来计算的
- 1em=1font-site
- em会根据字体大小的改变而改变
 
- rem- rem是相对于根元素(html)的字体大小来计算的
 
 
-     像素
- 颜色单位 - RGB值 - RGB通过三种颜色的不同浓度来调出不同的颜色
- R red,G green,B blue
- 每一种颜色的范围在0-255之间
- 语法RGB(红色,绿色,蓝色)
 
- RGBA - 在rgb的基础上添加了一个a表示不透明度 
- 需要4个值,前3个rgb一样,第四个表示不透明度 - 1 完全不透明 - 0 完全题目 - .5 半透明 
 
- 十六进制的RGB - 语法#红色绿色蓝色 
- 颜色浓度通过00-ff 
- 如果两位两位重复可以简写 - #aabbcc–>#abc 
 
- HSLA值 - H 色相(0-360)
- S 饱和度,颜色的亮度 0%-100%
- L 亮度,颜色的亮度 0%-100%
 
 
文档流:
网页是一个多层结构,一层摞着一层,通过css可以分别为每一层来设置样式,作为用户来讲只能看到最上面一层。
这些层中最下面的一层称为文档流,文档流是网页的基础,我们所创建的元素都是在文档流中进行排列。
元素主要有两个状态
 在文档流中
 不在文档流中
元素在文档流中的特点
    块元素:
                    块元素会在页面中独占一行(自上向下垂直排列)
 默认宽度是父元素的全部(会充满父元素)
 默认高度是被内容撑开(子元素)
 行内元素:
 行内元素不会独占页面的一行,只占自身的大小
 行内元素在页面中左向右水平排列,如果一行之中不能容纳下所有的行内元素,则元素会换到第二行继续自左向右排列
盒子模型:
css将页面中的所有元素都设置为一个盒子
将元素设置为矩形盒子后,对页面的布局就变成了将不同的盒子摆放到不同的位置
每一个盒子都由以下几个部分组成:
- 内容区(content) - 元素中所有子元素和文本内容都在内容区中排列 - 内容区的大小由width和height两个属性来设置 -  width 设置内容区的宽度 -  height 设置内容区的高度 
- 内边距(padding) - 内容区和边框之间的距离
- 一个有4个方向的内边距- padding-top
- padding-right
- padding-bottom
- padding-left
 
- 内边距的设置会影响盒子的大小
- 背景颜色会延伸到内边距上
 - 一个盒子的可见大小由内容区,内边距和边框共同决定 -  所以在计算盒子的大小是,需要将这三个区域加到一起计算。 - padding简写属性和border-width一样
 
- 边框(border) - 边框属于盒子的边缘,边框里边属于盒子内部,出了边框都是盒子的外部 - 边框的大小会影响盒子的大小 - 要设置边框,至少要设置三个样式: - 边框的宽度 border-width - 默认值:一般是3px
- 可以用来指定4个方向的边框宽度- 四个值: 上 右 下 左
- 三个值: 上 左右 下
- 两个值: 上下 左右
- 一个值: 上下左右
 
- border-xxx-width - xxx可以使 top,right,bottom,left
- 可以用来单独指定某个边的宽度
 
 
- 边框的颜色 border-color - 默认使用color的值
- 其余同上
 
- 边框的样式 border-style - solid 实线
- dotted 点状实线
- dashed 虚线
- double 双线
- 默认值none,表示没有边框
- 其余同上
 
- border属性简写 - 通过该属性可以同时设置边框的所有相关样式,并且没有顺序要求 - 除了border以外还有四个border-xxx -  border-top -  border-right -  border-bottom -  border-left 
 
- 外边距(margin) - 外边距不会影响盒子可见框的大小,但是会影响盒子的位置,一共有4个方向的外边距: - margin-top- 上外边距,设置一个正值,元素会向下移动
 
- margin-right- 默认情况下设置margin-right不会产生任何效果
 
- margin-bottom- 下外边距,设置一个正值,其下边的元素会向下移动
 
- margin-left- 左外边距,设置一个正值,元素会向右移动
 
- margin也可以设置负值,此时元素会向相反方向移动
 - 元素在页面中默认是按照自左向右的顺序排列的,所以默认情况下如果设置左和上边距会移动元素自身,而下和右边距会移动其他元素。 - margin可以简写属性 - 元素的水平方向布局:- 元素在其父元素中水平方向的位置由以下几个属性共同决定 - 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 = 其父元素内容区的宽度 - 以上等式必须满足,如果相加结果使等式不成立,则被称为过渡约束,则等式会自动调整 - 调整的情况: - 如果这七个值中没有为auto的情况,则浏览器会自动调整margin-right的值使等式满足 
- 七个值中有三个值设置为auto - width - margin-left - margin-right - 如果某个值为auto,则会自动调整为auto的那个值,使等式成立 
- 如果将一个宽度和一个外边距设置为auto,则宽度会调整到最大,设置为auto的外边距会自动为0 
- 如果将三个值都设置为auto,则外边距都是0,宽度最大 
- 如果将两个外边距设置为auto,宽度值固定,则会将外边距设置为相同的值 - 利用这一点可以使一个元素在其父元素中水平居中 - eg: -  width:xxpx -  margin:0 auto 
 
 
 - 元素的垂直方向布局:-  子元素是在父元素的内容区中排列的,如果子元素的大小超过了父元素,则子元素会从父元素中溢出 -  使用overflow属性来设置父元素如何处理溢出的子元素 -  可选值: 
  visible 默认值,子元素会从父元素中溢出,在父元素外部的位置显示-  hidden 溢出的内容将会被裁剪不显示 -  scroll 生成两个滚动条,通过滚动条来查看完整的内容 -  auto 根据需要生成滚动条 
- margin-top
垂直外边距的重叠(折叠)
 相邻的垂直元素外边距会发生重叠现象
- 兄弟元素: - 兄弟元素间相邻垂直外边距会取两者之间的较大值(两者都是正值) 
- 特殊情况: - 如果相邻的外边距一正一负,则取两者之和 
- 如果都为负取绝对值大的 - **注**:兄弟元素之间的外边距重叠是有利于开发的,所以不需要处理。
 
 
-  父子元素: - 父子元素之间相邻外边距,子元素的会传递给父元素
- 父子外边距的折叠会影响到页面的布局,必须要进行处理
 
行内元素的盒子模型:
- 行内元素不支持设置宽度和高度
- 行内元素可以设置padding,但是垂直方向padding不会影响页面布局
- 行内元素可以设置border,垂直方向border不会影响页面的布局
- 行内元素可以设置margin,垂直方向的margin不会影响布局
- display用来设置显示的类型- inline 将元素设置为行内元素
- block 将元素设置为块元素
- inline-block 将元素设置为行内元素,行内块,既可以设置宽度和高度又不会独占一行
- table 将元素设置为一个表格
- none 元素不在页面中显示
 
- visibility 用来设置元素的显示状态- visible 默认值,元素在页面中正常显示
- hidden 元素在页面中隐藏,不显示,但是依然占据页面的位置
 
默认样式:
- 通常情况下,浏览器都会为元素设置一些默认样式
- 默认样式的存在会影响到页面布局,通常情况下编写网页时必须要去除浏览器默认的样式。
