这是我参与「第五届青训营 」笔记创作活动的第1天,第一天以复习与巩固html与css为主,将整合自己参与课堂学到的新老理论知识与运用的示例相结合,更好地记住css的知识以及实际应用,巩固好自己的地基。
本笔记重点内容:
- css的基本语法
- CSS的使用方式
- CSS在html页面的工作流程
- CSS的选择器大全,记录了最常用的所有选择器以及使用规则
- 常用的样式以及常用的一些元素属性名,比如font
CSS的入门基础笔记,字数为2387,预计阅读时间在10分钟。
css
CSS用来定义页面元素的样式:
- 设置字体和颜色
- 设置位置和大小
- 添加动画效果
基本语法
选择器 声明块 属性值
选择器:通过选择器可以选中页面的指定元素,比如p就是选中网页所有p元素
声明块:通过声明块来指定要为元素设置的样式,声明块由一个一个的声明组成。
声明是一个名值对结构,一个样式名对应一个样式值。
<style>
p{
color:red;
}
</style>
p就是选择器Selector,而后面的color:red则是声明块,color是属性名Property, red是属性值value
CSS使用
- 外链。将样式写在单独的css文件里,然后通过link标签引入到页面里。
<link rel="stylesheet" href="/style.css">
- 嵌入. 将样式直接嵌入html里。
<style>
li {
margin: 0;
}
</style>
- 内联. html的所有的标签有个属性
style, 将样式写入该属性内。
<p style="margin:1em 0">
Example
</p>
推荐外链
内容和样式的分离,各负其责,html负责内容,而css则是主要负责样式,功能上有明确的分工。
开发范式上,比较流行推崇组件式开发,也会采用嵌入,比如vue的单文件组件,将html、css、js都写在一个单文件组件内,也能够解决内容和样式分离,最重要的是做到了关注点分离,把一个组件相关的所有内容放一块维护。
不推荐内联:特殊情况下会使用,比如UI组件库,由于已经内置好样式,而需要额外地给某个组件嵌入不一样的样式,那么可以通过内联来实现。
CSS工作流程
选择器大全
选择器:找出页面中的元素,以便给元素设置样式。
标签选择器
语法: 标签名{}
例子: p{} h1{} div{}
通配选择器
作用:选中页面的所有元素
语法:*
例子:*{}
id选择器
作用:根据元素的id属性值选中一个元素
语法:#id属性值
例子:#box{}
类选择器
作用:根据元素的class属性值选中一组元素
语法:.class属性值
例子:.blue{}
属性选择器
作用:
- 属性里特定的值来选定元素,比如选定input里密码部分
- 标签内设置特定属性名
语法:[属性名]
[属性名=属性值]
[属性名^=属性值] 选择属性值以指定值开头的元素
[属性名*=属性值] 选择属性值含有指定值的元素
[属性名$=属性值] 选择属性值以指定值结尾的元素
例子:
- a标签里href开头为#的所有元素: a[href^="#"] { color: red}
- a标签里结尾为jpg的所有元素: a[href$=".jpg"]
- 标签内设置特定属性名
css: [disable] { color: red}
交集选择器
作用:选中同时复合多个条件的元素
语法:选择器1或选择器2
例子:div.red{}
选择器分组(并集选择器)
作用:同时选择多个选择器对应的元素
语法:只需要用逗号就能。选择器1,选择器2,选择器3{}
例子:.a1, #red, span{}
后代元素:直接或间接被祖先元素包含的元素叫做后代元素,子元素也是后代元素
兄弟元素
拥有相同父元素的元素都是兄弟元素
子元素选择器
作用:选中指定父元素的指定子元素
语法:父元素 > 子元素
例子:div > p{ color: red}
<div class="box"><p> </p></div>
<style>
div.box > p{
color:red
}
</style>
后代元素选择器
作用:选中指定元素内的指定后代元素
语法:祖先 后代
例子:div span{}
兄弟选择器
作用:选择下一个兄弟
语法:前一个 + 后一个
例子: p + span{} 选择p的下一个span
作用:选择下边所有的兄弟
语法:前一个 ~ 随便元素
例子:p ~ span
组合
| 名称 | 语法 | 说明 | 示例 |
|---|---|---|---|
| 直接组合 | AB | 满足A同时满足B | input:focus |
| 后代组合 | A B | 选中B,如果它是A的子孙 | nav a |
| 亲子组合 | A>B | 选中B,如果它是A的子元素 | section>p |
| 兄弟选择器 | A~B | 选中B,如果它在A后且和A同级 | h2~p |
| 相邻选择器 | A+B | 选中B,如果它紧跟在A后面 | h2+p |
例子:
<article>
<p>
第一行
</p>
<section>
<h2>
二级标题
</h2>
<p>
第二行
</p>
</section>
</article>
<style>
article p {
color: black;
}
article >p {
color:blue;
}
h2+p {
color: red;
}
</style>
article下的所有p标签内容都是黑字体。
第一行是蓝色,因为子元素,而第二行不是子元素。
第二行是红色,因为紧跟h2后边的p标签。
伪类选择器
伪类选择器
-
不基于标签和属性定位元素
-
伪类:
- 状态伪类
- 结构性伪类
状态伪类:
不是具体指某个元素,而是该元素处于特定的状态下被选中,描述一个元素的特殊状态。比如a标签访问过的链接或者默认状态下的。
a:link {color:black}、a:visited {color:grey}
结构伪类
会根据dom节点在dom树上出现的位置决定是否选中该元素,比如想给ol里第一个li加样式。li:first-child {}
-
:first-child 第一个子元素
:last-child 最后一个
:nth-child() 选中第n个子元素,比如 全选中 :nth-child(n)
特殊值:
n 第n个 n的范围0到正无穷
2n/even 表示选中偶数位的元素2n+1/odd 表示选中奇数位的元素
从1开始,第二位就是偶数。第一个就是奇数。
:first-of-type
:last-of-type
:nth-of-type()
这几个伪类的功能和上述的类似,不通点是他们是在同类型元素中进行排序。比如在li里的第一个
:not() 否定伪类
将符合条件的元素从选择器中去除
选择器的权重
!important最重要,可以直接改变成最高优先级。比如,在div{color: purple !important}
- 内联样式 1,0,0,0 <div style=""
- id选择器 0,1,0,0
- 类和伪类选择器 0,0,1,0
- 元素选择器 0,0,0,1
- 继承的样式 没有优先级,比如子元素,在*{}里设置,则优先,以下的span即是
当我们通过不同的选择器,选中相同的元素,并且为相同的样式设置不同的值时,此时就发生样式的冲突。
比较优先级时,需要将所有的选择器的优先级进行相加计算,最后优先级越高,则越优先显示。但是由于二进制的限制,十个类也无法超过一个id选择器
如果优先级计算后相同,则优先使用靠下的样式
<div id="box1" class="red">
我是div<span>我是span</span>
</div>
<style>
*{
color:green;
}
#box1{
color: orange;
}
div#box1{
color:yellow;
}
.red{
color:red;
}
/*会显示yellow,因为会将所有的选择器的优先级进行相加计算,最后优先级越高,越优先。span则是绿色*/
</style>
常用样式及元素
颜色-RGB
HSL
三个参数:
- Hue色相,色彩的基本属性,从红到黄的范围,范围:0-360
- Saturation饱和度,色彩的鲜艳程度,取值范围0-100%
- Lightness亮度,颜色的明亮程度,越高越亮,取值范围0-100%
- alpha透明度,0-1
字体
font-family
由于不同浏览器支持不同的字体,并不是所有浏览器都能浏览一种字体,因此有优先级。
比如font-family:Optima, Georgia, serif;
那么Optima的优先级最高,若浏览器不支持则采用Georgia。而往往最后的是通用字体,用以什么字体都不支持的最基本的字体。
font-size
-
关键字
- small、medium、large
-
长度
- px、em
-
百分数
- 相对于父元素字体大小
font-weight
粗度,从100-900,但是不一定每个字体都有。
line-height
用法:行高,两段字体之间的距离。
例子:比如字体为20px,而设置行高为1.6,那么两行字体之间便是1.6*20 = 32px
空白格white-space
在html里,多个空白格会被认定为一个。
那么可以使用white-space来设置。
- normal,不保留空格。
- nowrap不换行,不会因为超出容器宽度而发生换行。
- pre保留所有,几个空格就显示几个,换行就换行。
- pre-wrap与pre一致,但是超出容器宽度时,会发生换行。
- pre-line。保留换行,但是不保留空格。