css简介
- 思维导图
什么是css
- css是层叠样式表(Cascading Style Sheets)的简称。有时我们也会称之为CSS样式表或级联样式表
- css也是一种标记语言
有什么用
- CSS主要用于设置HTML页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及版面的布局和外观显示样式。
- CSS让我们的网页更加丰富多彩,布局更加灵活自如。简单理解:CSS 可以美化 HTML , 让 HTML 更漂亮, 让页面布局更简单。
- CSS 最大价值: 由 HTML 专注去做结构呈现,样式交给 CSS,即 结构 ( HTML ) 与样式( CSS ) 相分离
引入css(css三种引入方式)
行内样式表(行内式)
行内样式表(内联样式表)是在元素标签内部的 style 属性中设定 CSS 样式。适合于修改简单样式.
语法:
<div style="color: red; font-size: 12px;">helloword</div>
1.style 其实就是标签的属性
在双引号中间,写法要符合 CSS 规范
2.可以控制当前的标签设置样式
3.由于书写繁琐,并且没有体现出结构与样式相分离的思想,所以不推荐大量使用,只有对当前元素添加简单样式的时候,可以考虑使用
4.使用行内样式表设定 CSS,通常也被称为行内式引入
内部样式表(嵌入式)
内部样式表(内嵌样式表)是写到html页面内部. 是将所有的 CSS 代码抽取出来,单独放到一个
<style>
div {
color: red;
font-size: 12px;
}
</style>
1.
外部样式表(链接式)
实际开发都是外部样式表. 适合于样式比较多的情况. 核心是:样式单独写到CSS 文件中,之后把CSS文件引入到 HTML 页面中使用.
引入外部样式表分为两步:
1. 新建一个后缀名为 .css 的样式文件,把所有 CSS 代码都放入此文件中。
2. 在 HTML 页面中,使用 标签引入这个文件。
语法:
<link rel="stylesheet" href="css文件路径">
css选择器
-
ID选择器
#elem{} id=“elem”: 注:
1. ID是唯一值,在一个页面中只能出现一次,出现多次是不符合规范的。
2. 命名的规范,由字母、下划线、中划线、字母(并且第一个不能是数字)
3. 驼峰写法 : searchButton (小驼峰) SearchButton (大驼峰) searchSmallButton
短线写法:search-small-button
下划线写法:search_small_button -
CLASS选择器
.elem{} class=“elem”: 注:
1. class选择器是可以复用的。
2. 可以添加多个class样式。
3. 多个样式的时候,样式的优先级根据CSS决定,而不是class属性中的顺序。
4. 标签+类的写法 -
标签选择器(TAG选择器)
div{}
使用的场景:
1. 去掉某些标签的默认样式时
2. 复杂的选择器中,如 层次选择器 -
群组选择器(分组选择器)
可以通过逗号的方式,给多个不同的选择器添加统一的CSS样式,来达到代码的复用。
<style>
div,
p,
ul>li{
color: aqua;
}
</style>
-
通配选择器
*{ } -> div,ul,li,p,h1,h2…{}
注:尽量避免使用通配选择器,因为会给所有的标签添加样式,慎用。
使用的场景:
1. 去掉所有标签的默认样式时 -
层次选择器
后代 M N { } 当前M的子孙后代
父子 M > N { } 当前M的儿子,儿子的二不会被选中。
兄弟 M ~ N { } 当前M下面的所有兄弟N标签
相邻 M + N { } 当前M下面相邻的N标签,只有一个 -
属性选择器
M[attr] {}
= : 完全匹配
*= : 部分匹配
^= : 起始匹配
$= : 结束匹配
[][][] : 组合匹配
- 属性选择器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>属性选择器</title>
<style>
/* 找div中带有class属性的元素将其背景改为红色 */
div[class] {
background-color: red;
}
/* 完全匹配:= */
/* 找div中带有class为box的元素将其背景色改为绿色 */
div[class=box] {
background-color: green;
}
/* 部分匹配:*= */
/* 等号前加个* 意思是只要在class中出现search的元素都会被选中 */
div[class*=search] {
background-color: hotpink;
}
/* 起始匹配:^= */
/* class 中第一个位test的都会被选中 */
div[class^=test] {
background-color: khaki;
}
/* $= : 结束匹配 */
/* class中最后一个为main的会被选中 */
div[class$=main] {
background-color: #2b28da;
}
/* [][][] : 组合匹配 */
/* 同时拥有class和id的元素会被选中 */
div[class][id] {
background-color: #e7d90e;
}
</style>
</head>
<body>
<div>1111111111111111111111</div>
<div class="a">aaaaaaaaaaaaaaa</div>
<div class="box">2222222222222222222</div>
<div class="search">333333333333333333333</div>
<div>bbbbbbbbbbbbbbbbb</div>
<div class="search_button">44444444444444444</div>
<div>55555555555555555555</div>
<div class="test">666666666666666666666666666666</div>
<div class="test_a">77777777777777777777777777777</div>
<div>ccccccccc</div>
<div class="main">88888888</div>
<div class="main_top">9999</div>
<div class="top_main">101010</div>
<div class="b" id="c">1541544</div>
</body>
</html>
运行结果:
-
伪类选择器
M:伪类{}
:link 访问前的样式 ( 只能添加给a标签 )
:visited 访问后的样式 ( 只能添加给a标签 )
:hover 鼠标移入时的样式 (可以添加给所有的标签)
:active 鼠标按下时的样式 (可以添加给所有的标签)注:
一般的网站都只设置
a{} ( link visited active ) a:hover{}
:after、:before 通过伪类的方式给元素添加一段文本内容,使用content属性
:checked、:disabled 、:focus 都是针对表单元素的结构性伪类选择器
nth-of-type() nth-child()
角标是从1开始的,1表示第一项,2表示第二项 | n值 表示从0到无穷大
first-of-type:第一个元素
last-of-type:最后一个元素
only-of-type :只有唯一一个元素是才选择
nth-of-type()和nth-child()之间的区别
type : 类型
child : 孩子
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>结构伪类选择器</title>
<style>
/* 给li中的第3项加背景颜色 */
/* li:nth-of-type(3) {
background-color: aqua;
} */
/* 隔行换色 */
li:nth-of-type(2n) {
background-color: blue;
}
li:nth-of-type(2n+1) {
background-color: burlywood;
}
</style>
</head>
<body>
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</body>
</html>
效果:
:focus 伪类选择器用于选取获得焦点的表单元素。
焦点就是光标,一般情况 类表单元素才能获取
css元素显示模式
1、什么是元素的显示模式
定义:
元素显示模式就是元素(标签)以什么方式进行显示,比如
作用:
网页的标签非常多,在不同地方会用到不同类型的标签,了解他们的特点可以更好的布局我们的网页。
2、元素显示模式的分类
2.1、块元素
常见的块元素:
<h1>~<h6>、<p>、<div>、<ul>、<ol>、<li>
块级元素的特点:
- 比较霸道,自己独占一行。
- 高度,宽度、外边距以及内边距都可以控制。
- 宽度默认是容器(父级宽度)的100%。
- 是一个容器及盒子,里面可以放行内或者块级元素。
注意:
文字类的元素内不能放块级元素
<p> 标签主要用于存放文字,因此 <p> 里面不能放块级元素,特别是不能放<div>
同理, <h1>~<h6>等都是文字类块级标签,里面也不能放其他块级元素
2.2、行内元素
常见的行内元素:
<a>、<strong>、<b>、<em>、<i>、<del>、<s>、<ins>、<u>、<span>
标签是最典型的行内元素。有的地方也将行内元素称为内联元素。
行内元素的特点:
-
相邻行内元素在一行上,一行可以显示多个。
-
高、宽直接设置是无效的。
-
默认宽度就是它本身内容的宽度。
-
行内元素只能容纳文本或其他行内元素。
注意:
链接里面不能再放链接
特殊情况链接< a> 里面可以放块级元素,但是给 <a>转换一下块级模式最安全
2.3、行内块元素
常见的行内块标签:
<img />、<input />、<td>
它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素。
行内块元素的特点:
- 和相邻行内元素(行内块)在一行上,但是他们之间会有空白缝隙。
- 一行可以显示多个(行内元素特点)。
- 默认宽度就是它本身内容的宽度(行内元素特点)。
- 高度,行高、外边距以及内边距都可以控制(块级元素特点)。
2.4、元素显示模式总结
学习元素显示模式的主要目的就是分清它们各自的特点,当我们网页布局的时候,在合适的地方用合适的标签元素。
3、元素显示模式的转换
简单理解:
一个模式的元素需要另外一种模式的特性
比如想要增加链接 <a> 的触发范围。
转换方式
- 转换为块元素:display:block;
- 转换为行内元素:display:inline;
- 转换为行内块:display: inline-block;
4、单行文字垂直居中的代码
解决方案:
让文字的行高等于盒子的高度 就可以让文字在当前盒子内垂直居中
简单理解:
行高的上空隙和下空隙把文字挤到中间了,
如果行高小于盒子高度,文字会偏上,
如果行高大于盒子高度,则文字偏下。
CSS三大特性
层叠性
给相同的选择器设置相同的样式时,就会产生样式冲突,写在后面的会将前面的覆盖掉。
div {
color: red; // 不生效
font-size: 12px; // 生效
}
div {
color: blue; // 生效
}
CSS继承
文字相关的样式可以被继承
布局相关的样式不能被继承 ( 默认是不能继承的,但是可以设置继承属性 inherit 值 )
CSS优先级
- 相同样式优先级
当设置相同样式时,后面的优先级较高,但不建议出现重复设置样式的情况。
2. 内部样式与外部样式
内部样式与外部样式优先级相同,如果都设置了相同样式,那么后写的引入方式优先级高。
3. 单一样式优先级
style行间 > id > class > tag > * > 继承
注:
style行间 权重 1000
id 权重 100
class 权重 10
tag 权重 1
- !important
提升样式优先级,非规范方式,不建议使用。( 不能针对继承的属性进行优先级的提升 )
- 标签+类与单类
标签+类 > 单类
- 群组优先级
群组选择器与单一选择器的优先级相同,靠后写的优先级高。
- 层次优先级
1. 权重比较
ul li .box p input{} 1 + 1 + 10 + 1 + 1
.hello span #elem{} 10 + 1 + 100
2. 约分比较
ul li .box p input{} li p input{}
.hello span #elem{} #elem{}