CSS中的一些冷知识
长度单位
在CSS样式层叠表中,我们可使用到的长度单位一般有如下的几种方式:
- 像素:px
- 百分比
- em: 这是一个相对单位,是相对于当前元素的字体大小进行计算,也就是说 1em=1font-size
- rem: 这也是一个相对单位,不同的是,rem是相对于根元素的字体大小进行计算的。
伪类和伪元素
伪类:用来描述一个元素的特殊状态 :hover
,:active
等等
伪元素:用来描述一个元素的特殊匹配位置 如 ::before
,::after
等等
其实,伪类和伪元素的出现都是为了格式化文档树以外的信息,也就是说,伪类和伪元素是用来修饰不在文档树中的部分,比如,一句话中的第一个字母,或者是列表中的第一个元素。
伪类用于当已有的元素处于某个状态时,为其添加对应的样式,这个状态是根据用户行为而动态变化的。比如说,当用户悬停在指定的元素时,我们可以通过:hover来描述这个元素的状态。
伪元素用于创建一些不在文档树中的元素,并为其添加样式。它们允许我们为元素的某些部分设置样式。比如说,我们可以通过::before来在一个元素前增加一些文本,并为这些文本添加样式。虽然用户可以看到这些文本,但是这些文本实际上不在文档树中。
在伪类中有一个需要注意的知识点,就是**:nth-child(n)** 与 **:nth-of-type(n)**的区别。
<style>
* {
margin: 0;
padding: 0;
list-style: none;
}
ul div:nth-child(1) {
/* 先找到 ul 里面的第一个孩子 然后在判断元素 div */
width: 100px;
height: 100px;
background-color: burlywood;
}
ul div:nth-child(2) {
/* 没有页面效果 */
/* 是因为当找到 ul 的第二个孩子时 发现元素不匹配 */
width: 100px;
height: 100px;
background-color: chartreuse;
}
ul div:nth-of-type(2) {
/* 将 ul 里面所有 div 类型的孩子排序 并找到第二个 */
width: 100px;
height: 100px;
background-color: coral;
}
</style>
</head>
<body>
<ul>
<div>1</div>
<li>2</li>
<li>3</li>
<div>4</div>
<li>5</li>
</ul>
可以总结为:
xxx:nth-child(n): 先找第n个孩子,然后匹配xxx元素:
xxx:nth-of-type(n):先找出所有的xxx元素,然后再得到第n个孩子
另外,扩展一下链接伪类的使用:
1.a:link
选择未被访问的链接
2.a:visited
选择已经被访问过的链接
3.a:hover
鼠标指针位于其上的链接
4.a:active
鼠标按下未弹起的链接
注意以上链接伪类的顺序:link visited hover active
常见的元素隐藏方法
-(1)使用 display:none;隐藏元素,渲染树不会包含该渲染对象,因此该元素不会在页面中占据位置,也不会响应绑定的监听事件。
-(2)使用 visibility:hidden;隐藏元素。元素在页面中仍占据空间,但是不会响应绑定的监听事件。
-(3)使用 opacity:0;将元素的透明度设置为 0,以此来实现元素的隐藏。元素在页面中仍然占据空间,并且能够响应元素绑定的监听事件。
-(4)通过使用绝对定位将元素移除可视区域内,以此来实现元素的隐藏。
-(5)通过 z-index 负值,来使其他元素遮盖住该元素,以此来实现隐藏。
-(6)通过 clip/clip-path 元素裁剪的方法来实现元素的隐藏,这种方法下,元素仍在页面中占据位置,但是不会响应绑定的监听事件。
-(7)通过 transform:scale(0,0)来将元素缩放为 0,以此来实现元素的隐藏。这种方法下,元素仍在页面中占据位置,但是不会响应绑定的监听事件。