常见属性分类
文本样式:
text-align:
指定行内级元素的水平方向上的对齐方式。不要被这个名字给骗了,以为只有文本。
水平居中:
- 行内元素:
text-align: center;
- 块级元素:
margin: 0 auto;
注意:text-align 是让子元素水平居中,margin 是让自己居中,所以写的位置要注意。
text-indent:
定义一个块元素首行文本内容之前的缩进量。
一般和超链接一起使用:
点击图片就触发的超链接
- 可能 a 标签包裹了图片
- 或者 a 标签设置为块元素,设置宽高并添加了背景图。
为了 SEO ,超链接一般会设置文字,但是我想要的效果又是点击图片,就触发链接,那文字和图片怎么共存呢?
可以采用第二种背景图的方式,链接的触发区域为 a 标签盒子,里面有背景图,看起来就是在点一张图片。然后文字就可以利用 text-indent 缩进 -9999px,缩进到屏幕外边去隐藏。
<div class="logo">
<a href="https://www.baidu.com">腾讯游戏</a>
</div>
<style>
.logo a {
display: block;
width: 112px;
height: 39px;
background-image: url(../img/logo.png);
/* 让文本缩进到屏幕外,不删除文字为了方便 SEO */
text-indent: -9999px;
}
</style>
字体样式:
font-size:
三种单位格式
- px
- em:相对于从父元素继承下来的字体大小的倍数,谷歌浏览器默认字体大小为16px
- 百分比:每个元素不一样,具体查看 mdn 文档。
比如 width 的百分比文档描述:百分比为相对于包裹元素的宽度。
line-height:
元素中每一行文字所占据的高度。
当文字的行高和容器的高度一致,则文字会垂直居中。
font:
这是一个缩写属性: font-style font-variant font-weight font-size/line-height font-family
规则:
font-style、font-variant、font-weight可以随意调换顺序,也可以省略
/line-height可以省略,如果不省略,必须跟在font-size后面
font-size、font-family不可以调换顺序,不可以省略
最佳实践:font:16px/1.5 微软雅黑。一般就写最后两个属性,文字大小16px,行高为文字大小的1.5倍,字体微软雅黑。
选择器
大致分类:
- 通用选择器(universal selector)
- 元素选择器(type selectors)
- 类选择器(class selectors)
- id选择器(id selectors)
- 属性选择器(attribute selectors)
- 组合(combinators)
- 伪类(pseudo-classes)
- 伪元素(pseudo-elements)
组合选择器
- 后代选择器
- 兄弟选择器
- 交集和并集选择器
选择器权重
伪类
什么是伪类?
伪类也是一个类,之所以伪是相对于实实在在写出来的 class 中的类而言的,伪类没有白纸黑字写出来。
我们可以通过普通的类来选中元素,而元素其实是分状态的,伪类就是用来选中不同状态下的元素。
元素的状态是什么?
比如三个div,第一个div鼠标放上去了,它的状态就和另外两个不一样;同样的,鼠标点击第二个div,那它的状态就和另外两个没被点击的状态不一样。
而伪类选择器就能选中处于不同状态下的元素,因为当元素处于这些状态的时候,浏览器会给这些元素加上伪类。
伪类选择器其实都是交集选择器:(两个选择器紧挨着)
div:hover {}
当鼠标放在 div 元素上时的样式。
伪类分类
根据伪类的概念,可想而知元素的状态是非常多的。但我们用的最多的还是:hover
,其次是:focus
。
动态伪类
a:link 未访问的链接
a:visited 已访问的链接
a:hover 鼠标挪动到链接上(重要)
a:active 激活的链接(鼠标在链接上长按住未松开)
这么多状态,也不是每个元素都有的,自然不是每个元素都有所有伪类。比如 a 标签拥有所有的动态伪类,但是其他标签就没有。
最通用的估计就是 :hover,:active 也能作用 a 元素以外的元素。:focus 作用于输入框。
伪类是有书写顺序的,动态伪类编写顺序建议为::link、:visited、:focus、:hover、:active
伪元素
伪元素选择器就是选中一些特定状态下的元素。
伪元素的写法和伪类一样,用冒号开头,但是为了区分,最好伪元素以双冒号开头。
最主要的伪元素有四个:
- :first-line、::first-line
- :first-letter、::first-letter
- :before、::before
- :after、::after
::first-line,::first-letter(了解)
::before,::after
::before
和::after
用来在一个元素的内容之前或之后插入其他内容(可以是文字、图片)。
- 通过 content 属性来为一个元素添加插入的内容。
- 其他属性添加的样式都是作用在插入内容的。
- content 不能省去,要不然插入内容的样式全都无法生效。
伪元素默认是行内非替换元素。
css 中引入资源需要使用**url()**
函数。
div::before {
// 插入的内容:引入图片
content: url(./img/hhh.jpg);
// 插入的内容的样式
display: inline-block; // 不转换成行内块,就无法设置宽高
width: 20px;
}
div::after {
/* content: ""; */
// 所有样式无效,因为没有 content 属性
display: inline-block;
width: 20px;
background-color: red;
}
伪元素实现图标插入
图标一般就是通过伪元素实现的插入,尤其是下面这种。
实现效果的方式有很多种,比如这个“热”,可以在文字后面加 i 标签,插入图标。但是会发现,很多条热搜都需要加,而且这个热搜还是变化的。所以这个实现方式显然不够好。
而通过伪元素的方式,则具备高可扩展性:
我们可以设置一个普通类,然后在这个普通类选中的元素后面插入图标。需要加上图标的热搜,我们就给它的 class 中添加上这个普通类,对元素进行选中。
通过这种方式还可以多写几个普通类,插入不同的图标,比如“爆”、“新”等。当热搜变化时,通过逻辑判断,动态的添加对应 class 类实现图标更换。
位置微调用相对定位很方便。
// “热”图标
.hottest::after {
content: url(./img/hot.svg);
// 图标和文字隔开一点距离
position: relative; // 相对定位
left: 4px;
top: 2px;
}
// “新”图标
.latest::after {
content: url(./img/new.svg);
position: relative; // 相对定位
left: 4px;
top: 2px;
}
css 特性
继承性
一般文本和字体相关的属性具备继承性,具体某个属性,详细的情况可查阅文档。
继承属性继承的是计算值。
比如父元素文字大小 2em,浏览器默认大小是16px,父元素文字大小就是32px。那子元素继承下来的就是计算过的 px 值,而不是 2em。
对于默认不继承的属性,也可以强制继承。
border 默认不继承,强制继承:border: inherit;
层叠性
同一个属性被多次设置会覆盖。
谁覆盖谁?
- 选择器权重大就覆盖别人
- 权重一样,就后来居上
HTML 元素类型
一个元素在画布中,总会占据空间,而不同元素对于需要的空间是不一样的。
我们知道网页最初是在模仿报纸,报纸标题在一个版面格子中总是占据一整行的。对应的,当初设计标题标签 h1~h6时,我们也希望它能独占一行。有独占一行的元素,自然也设计了不独占一行的元素,以满足一些不太重要的内容进行同一行显示。
这里占据的空间指的是水平方向上的空间,垂直方向上的空间就是元素内容在垂直方向上占据的空间。
基于元素怎么占据版面空间这个问题,HTML 元素就被分成了两种主要类型:行内级元素和块级元素。
浏览器识别到块级元素,就会让它占据一整行。
display
前面我们了解到,元素标签其实是普通盒子+默认样式。样式中表示元素类型的 css 属性就是display
。浏览器能识别出div为块级元素,让它独占一行,其实是默认添加了display: block;
既然本质是通过display 设置的元素类型,那我们也可以手动修改属性,更换元素类型。
4个常用值:
- block:让元素显示为块级元素
- inline:让元素显示为行内级元素
- inline-block:让元素同时具备行内级、块级元素的特征
- none:隐藏元素
补充一下:行内块元素。 官方没有行内块元素这种说法。准确地说法是行内可替换元素(inline-replaced)。
行内可替换元素能同行显示并且能设置宽高。
另外给块级元素设置为宽度小于版面宽度,但是元素还是会占据一整行。因为它的 margin 是 auto,auto 的意思就是让浏览器决定。浏览器会设置 margin 撑满一整行。
注意事项:
- p 标签不要包裹 div
- 行内级元素不要包裹块级元素
元素隐藏方法
总结一下:
- display 和 visibility 让元素不显示
- alpha 只能改背景透明度
- opacity 改的是整个元素的透明度,所以能影响子元素
另外背景颜色的默认值为 transparent,它就相当于 rgba(0,0,0,0)。
overflow
overflow 用于控制内容溢出时的行为。
- visible:默认值,溢出的内容照样可见
- hidden:溢出的内容直接裁剪不显示
- scroll:溢出的内容被裁剪,但可以通过滚动机制查看,出现滚动条
- 会一直显示滚动条区域,滚动条区域占用的空间属于width、height
- auto:自动根据内容是否溢出来决定是否提供滚动机制,最常用。