这是我参与「第四届青训营 」笔记创作活动的第2天
css是什么(What)
Cascading Style Sheets- 用来定义页面元素的样式
- 设置字体和颜色
- 设置位置和大小
- 添加动画过渡效果
css组成
h1 选择器 (selector) 选中页面中元素,给予样式
h1{
color:white; // 属性 选择器(property) : 属性值(value) 《-一个声明
font-size:14px
}
页面中使用css的方法
-
外链-推荐
将外部样式表使用link标签链接到页面:外部样式表是指将 CSS 编写在扩展名为
.css的单独文件中,并从 HTML<link>元素引用它的情况:<link rel="stylesheet" href="styles.css">元素的href 属性需要引用你的文件系统中的一个文件。
在上面的例子中,CSS 文件和 HTML 文档在同一个文件夹中,但是你可以把 CSS 文件放在其他地方,并调整指定的路径以匹配,例如:
<!-- Inside a subdirectory called styles inside the current directory --> <link rel="stylesheet" href="styles/style.css"> <!-- Inside a subdirectory called general, which is in a subdirectory called styles, inside the current directory --> <link rel="stylesheet" href="styles/general/style.css"> <!-- Go up one directory level, then inside a subdirectory called styles --> <link rel="stylesheet" href="../styles/style.css"> -
嵌入
嵌入样式表是指不使用外部 CSS 文件,而是将 CSS 放在 HTML 文件head标签里的style标签之中。
<style> h1 { color: blue; background-color: yellow; border: 1px solid black; } </style> -
内联
内联样式表存在于 HTML 元素的 style 属性之中。其特点是每个 CSS 表只影响一个元素
<p style="color:red;">This is my first CSS example</p>
因为不易于维护,所以尽量不要这么写
css是如何工作的
- 浏览器载入 HTML 文件(比如从网络上获取)。
- 将 HTML 文件转化成一个 DOM(Document Object Model),DOM 是文件在计算机内存中的表现形式,下一节将更加详细的解释 DOM。
- 接下来,浏览器会拉取该 HTML 相关的大部分资源,比如嵌入到页面的图片、视频和 CSS 样式。JavaScript 则会稍后进行处理,简单起见,同时此节主讲 CSS,所以这里对如何加载 JavaScript 不会展开叙述。
- 浏览器拉取到 CSS 之后会进行解析,根据选择器的不同类型(比如 element、class、id 等等)把他们分到不同的“桶”中。浏览器基于它找到的不同的选择器,将不同的规则(基于选择器的规则,如元素选择器、类选择器、id 选择器等)应用在对应的 DOM 的节点中,并添加节点依赖的样式(这个中间步骤称为渲染树)。
- 上述的规则应用于渲染树之后,渲染树会依照应该出现的结构进行布局。
- 网页展示在屏幕上(这一步被称为着色)。
选择器
-
找出页面中元素,设置样式
-
使用多种方式选择元素
- 按照标签名、类名、ID
- 按照属性
- 按照DOM树中的位置
统配选择器
* { color: red; font-size: 20px; }
标签选择器
span/p等等标签
id选择器
#id选中该元素,一般情况下该id元素是唯一的
类选择器(class)
同一类型的标签设置样式的时候使用标签选择器class
CSS中类选择器用点号表示。实际项目中一个div元素为了能被多个样式表匹配到(样式复用),通常div的class中由好几段组成,如
CSS中多个类选择器之间有没有空格是怎样的匹配规则?如.user.login和.user .login(中间有空格)的区别?
- .nav .user(中间有空格)匹配到class含有nav的元素下面的class含有user的元素,是和。
- .user.login(中间没有空格)匹配到class同时含有user和login的元素,是。
- .nav .user.login(.nav和.user中间有空格,.user和.login中间没有空格)匹配到class含有nav的元素下面的class同时含有user和login的元素,是。
属性选择器
CSS 属性选择器通过已经存在的属性名或属性值匹配元素、可以做一些匹配
语法:
[attr]
表示带有以 attr 命名的属性的元素。
[attr=value]
表示带有以 attr 命名的属性,且属性值为 value 的元素。
伪类选择器
-
不基于标签和属性定位元素
-
几种伪类
-
状态伪类(当元素出于某种特定的状态下)
- :link。元素被定义了超链接但并未被访问过
- :visited。元素被定义了超链接并已被访问过
- :active。元素被激活
- :hover。鼠标悬停
- :focus。元素获取焦点
-
结构性伪类(根据dom树位置来决定是否选择这个元素)
- :fisrt-child。父元素的第一个子元素
- :last-child。父元素的最后一个子元素的元素
- :nth-child(n)。父元素的第 n 个子元素。其中 n 可以是整数(1,2,3)、关键字(even,odd)、也可以是公式(2n+1),而且 n 值起始值为 1,而不是 0。
- :nth-last-child(n):父元素的倒数第 n 个子元素。此选择器与 :nth-child(n) 选择器计算顺序刚好相反,但使用方法都是一样的,其中 :nth-last-child(1) 始终匹配最后一个元素,与 last-child 等同。
- :nth-of-type(n) 。父元素内具有指定类型的第 n 个元素
- :nth-last-of-type(n)。父元素内具有指定类型的倒数第 n 个元素
- :first-of-type。父元素内具有指定类型的第一个元素,与 nth-of-type(1) 等同
- :last-of-tye 。父元素内具有指定类型的最后一个元素,与 :nth-last-of-type(1) 等同
- :only-child 。父元素只包含一个子元素,且该子元素匹配元素
- :only-of-type。选择父元素只包含一个同类型子元素,且该子元素匹配选择元素
- :empty。选择没有子元素的元素,而且该元素也不包含任何文本节点
使用结构伪类选择器的好处是可以根据元素在文档中所处的位置,来动态地选择元素,从而减少 HTML 文档对 id 或类的依赖,有助于保持代码干净整洁。 另外需要注意的是,在结构伪类选择器中,子元素的序号是从 1 开始的。
-
选择器组
CSS 选择器列表(,),常被称为并集选择器或并集组合器,选择所有能被列表中的任意一个选择器选中的节点。
/* 选择所有 <span> 和 <div> 元素 */
span, div {
border: red 2px solid;
}
颜色
-
RGB
-
HSL(便于调整明暗)
-
Alpha -透明度
- alpha=1 时是完全不透明的
排文本的样式 格式化文本
字体
字体族 font-family
通过给定一个有先后顺序的,由字体名或者字体族名组成的列表来为选定的元素设置字体。为了便于不同设备显示字体,属性指定的是一个优先级从高到低的可选字体列表。
.sansserif {
font-family: Verdana, Arial, Helvetica, sans-serif;
}
- 要确保最后要放一个通用字体族
- 英文字体建议写在中文字体前面
使用web font(性能开销、渲染变慢)
@font-face {
font-family: "myFont";
src: url("myFont.ttf");
}
在使用中文web font的时候建议进行裁切,保证字体文件小
字体大小(笔试/面试有可能)
-
关键字
- Small,medium,large
-
长度
- Px, em
-
百分数
- 相对于父元素字体大小
- rem 相对于根字体大小的单位,比如可以设置 1rem=50px
- em 相对于font-size,比如font-size:16px(浏览器默认),则2em=32px
- vm 即viewpoint width,视窗宽度,比如1vm的宽度为相对于视窗的宽度的百分之一
- vh 即viewpoint height ,同上
字体斜体/加粗
font-style - 选择 font-family 字体下的 italic 或 oblique 样式。
font-weight -字重、字体的粗细程度。一些字体只提供 normal(400) 和 bold(700) 两种值。
行高
line-height 行高
/* Unitless values: use this number multiplied
by the element's font size */
/* 推荐使用这个方式 该属性的应用值是这个无单位数字<数字>乘以该元素的字体大小。计算值与指定值相同。大多数情况下,这是设置line-height的推荐方法,不会在继承时产生不确定的结果。*/
line-height: 3.5;
[无障碍方面]:主段落内容的 line-height 至少应为 1.5。推荐使用1.6。如果文字的大小要随页面的缩放而变化,请使用无单位的值,以确保行高也会等比例缩放。
white-space
默认情况下多个连续的空格或换行会被合并成一个 下面哪种方法可以让一个元素内的文字永远在一行内显示(文字很长时也不会换行)(white-space: nowrap)
word-break:keep-all; /* 不换行 / white-space:nowrap; / 不换行 / overflow:hidden; / 内容超出宽度时隐藏超出部分的内容 / text-overflow:ellipsis; / 溢出时显示省略标记...;需与overflow:hidden;一起使用*/
work-break:normal | break-all | keep-all /* 浏览器默认 | 允许在单词内换行 | 只在半角空格或连字符处换行*/
work-wrap:normal | break-word /* 默认换行规则 | 允许在长单词内换行*/
white-space:normal | nowrap /默认规则 | 长文本不换行,直至遇见 /
word-spacing:normal | length(30px) | inherit /默认字符间距 | 设定段落字符间距(可负值)| 继承父辈的值/