CSS:层叠样式表,可以理解为把样式像化妆一样,一层层的涂到Html上。

CSS语法由两部分构成:
- 选择器:找到要添加样式的元素。
- 声明块:设置具体的样式(声明块是由一个或多个声明组成的),声明的格式为:属性名:属性值;

基本的选择器包括:
* {
属性名:属性值;
}
标签名 { 属性名:属性值;}

交集有并且的含义(通俗理解:即…又…的意思),例如:年轻且漂亮。
/* 选中:类名为beauty的p元素,此种写法用的非常多 */
p.beauty {color:blue}
/* 选中:类名包含rich和beauty的元素 */
.rich.beauty { color: green;}
所谓并集就是或者的含义(通俗理解:要么…要么…的意思)
.rich,
.beauty,
.pig,
.dog {
background-color: beige;
width: 200px;
}
选择器之间,用空格隔开,空格可以理解为xxx中的,其实就是后代的意思。选择器1234…n,可以是我们之前学的任何一种选择器。
ul li {
color: red;
}
子代选择器又称:子元素选择器、子选择器。
选择器之间,用>隔开,>可以理解为:“xxx的子代”,其实就是儿子的意思,选择器1234…n,可以是我们之前学的任何一种选择器。
相邻兄弟选择器:
所谓相邻,就是紧挨着她的下一个,简记:睡在我下铺的兄弟。
div+p {color:red;}
div~p { color:red; }
如何理解伪?虚假的,不是真的。
如何理解“伪类”?像类(class),但不是类,是元素的一种特殊状态。
什么是激活?按下鼠标不松开。
注意:遵循LVHA的顺序写CSS,即:link、visited、hover、active。
表单类元素才能使用 :focus伪类。
当用户:点击元素、触摸元素、或通过键盘的tab键等方式,选择元素是,就是获得焦点。
- 0或不写:什么都选不中;
n:选中所以子元素;
1~正无穷的整数:选中对应序号的子元素。
2n或even:选中序号为偶数的子元素。
2n+1或odd:选中序号为奇数的子元素。
-n+3:选中的是前3个。
注意:nth-child(公式):an+b,顺序不能写错。
:not(选择器) 排除满足括号中条件的元素。
:target 选中锚点指向的元素。
:lang() 根据指定的语言选择元素(本质是看lang属性的值)。
通过不同的选择器,选中相同的元素,并且为相同的样式名设置不同的值时,就发生了样式冲突。到底应用哪个样式,此时就需要看优先级了。
行内样式 > ID选择器 > 类选择器 > 元素选择器 > 通配选择器

important写法
ul>li:first-child { color: red !important; }

CSS中设置长度,必须加单位,否则样式无效!
又称块级元素
特点:
- 在页面中独占一行,不会与任何元素共用一行,是从上到下排列的。
- 默认宽度:撑满父元素。
- 默认高度:由内容撑开。
- 可以通过CSS设置宽高。
又称:内联元素
特点:
- 在页面中不独占一行,一行中不能容纳下的行内元素,会在下一行继续从做到右排列。
- 默认宽度:由内容撑开。
- 默认高度:由内容撑开。
- 无法通过CSS设置宽高。
又称内联块元素
特点:
- 在页面中不独占一行,一行中不能容纳下的行内元素,会在下一行继续从做到右排列。
- 默认宽度:由内容撑开。
- 默认高度:由内容撑开。
- 可以通过CSS设置宽高。
注意:元素早期只有:行内元素、块内元素,区分条件也只有一条:“是否独占一行”,如果按照这种分类方式,行内块元素应该算作行内元素。
- 文本标签:
换行,是行内元素,只是功能特殊,浏览器解析到它需要换行。- 与
- 图片:
- 单元格:
- 表单控件:
- 框架标签:
通过css中的display属性可以修改元素的默认显示模式,常用值如下:
CSS会把所有的HTML元素都看成一个盒子,所有的样式也都是基于这个盒子。

注意:外边距margin不会影响盒子的大小,但会影响盒子的位置。
所谓的默认宽度,就是不设置width属性时,元素所呈现出来的宽度。
总宽度= 父的content宽度 - 自身的左右margin
内容区的宽度 = 父的content - 自身的左右margin - 自身的左右border - 自身的左右padding
padding相关的属性名:
注意点:
- padding的值不能为负数。
- 行内元素的左右内边距是没问题的,上下内边距不能完美的设置。
- 块级元素、行内块元素,四个方向内边距都可以完美设置。

属性名称:
margin-left:做外边距
margin-right:又外边距
margin-top:上外边距
margin-bottom:下外边距
margin:复合属性,可以写1~4个值,规律同padding(顺时针)
margin注意事项
- 子元素的margin,是参考父元素的content计算的。(因为父亲的content种承装着子元素)
- 上margin、左margin:影响自己的位置;下margin、又margin:影响后面兄弟元素的位置。
- 块级元素、行内元素,均可以完美地设置4个方向的margin;但行内元素,左右margin可以完美设置,上下margin设置无效。
- margin的值也可以是auto,如果给一个块级元素设置左右margin都是auto,该块级元素会在父元素中水平居中。
- margin的值可以是负值。
什么是margin塌陷?
第一个子元素的上margin会作用在父元素上,最后一个子元素的下margin会作用在父元素上。
如何解决margin塌陷?
什么是margin合并?
上面的兄弟元素的下外边距和下面兄弟元素的上外边距会合并,取一个最大的值,而不是相加。
如何解决margin塌陷?
无需解决,布局的时候上下的兄弟元素,只给一个设置上下外边距就可以了。
属性名称:
overflow:溢出内容的处理方式。
属性值:
overflow常用的值是hidden和auto,除了能处理溢出的显示方式,还可以解决很多疑难杂症。
有些样式会继承,元素如果本身设置了某个样式,就使用本身设置的样式;但是如果本身没有设置某个样式,则会从父元素开始一级一级继承(优先继承离得近的祖先元素)。
会继承的CSS属性
字体属性、文本属性(除了vertical-align)、文字颜色 等;
不会继承的CSS属性
边框、背景、内边距、外边距、宽高、溢出方式 等。
一个规律:能继承的属性,都是不影响布局的,简单的说:都是和盒子模型没关系的。
元素一般都是有默认样式的,例如:
优先级:元素的默认样式 > 继承的样式,所有如果要重置元素的默认样式,选择器一定要直接选择到该元素。
即:可以像处理文本对齐一样去处理:行内、行内块在父元素中的对齐。
例如:text-align、line-height、text-indent等。
<head>
<meta charset="UTF-8">
<title>盒子模型title>
<style>
.outer {
width: 400px;
height: 400px;
background-color: gray;
text-align: center;
line-height: 400px;
font-size: 0px;
text-indent: 50px;
}
img {
width: 100px;
vertical-align: middle;
}
span{
font-size: 40px;
vertical-align: middle;
}
style>
head>
<body>
<div class="outer">
<span>出来玩啊xspan>
<img src="../pics/aa.png" alt="">
div>
body>
产生的原因:行内元素,行内块元素,彼此之间的换行会被浏览器解析为一个空白字符。
解决方案:
产生原因:行内元素与文本的基线对齐,而文本的基线与文本最底端之间是由一定距离的。
解决方案: