476 lines
11 KiB
Markdown
476 lines
11 KiB
Markdown
|
|
|||
|
|
|||
|
## 行高和字号
|
|||
|
|
|||
|
### 行高
|
|||
|
|
|||
|
CSS中,所有的行,都有行高。盒模型的padding,绝对不是直接作用在文字上的,而是作用在“行”上的。
|
|||
|
|
|||
|
|
|||
|
如下图所示:
|
|||
|
|
|||
|
20170808_2216.png
|
|||
|
|
|||
|
上图中,我们设置行高为30px,30px * 5 = 150px,通过查看审查元素,这个p标签的高度果然为150px。而且我们发现,我们并没有给这个p标签设置高度,显然是内容将其撑高的。
|
|||
|
|
|||
|
文字,是在自己的行里面居中的。比如,现在文字字号14px,行高是24px。那么:
|
|||
|
|
|||
|
20170808_2220.png
|
|||
|
|
|||
|
为了严格保证字在行里面居中,我们的工程师有一个约定: **行高、字号,一般都是偶数**。这样可以保证,它们的差一定偶数,就能够被2整除。
|
|||
|
|
|||
|
|
|||
|
### 单行文本垂直居中
|
|||
|
|
|||
|
小技巧:如果一段文本只有一行,如果此时设置**行高 = 盒子高**,就可以保证单行文本垂直居中。这个很好理解。
|
|||
|
|
|||
|
上面这个小技巧,只适用于单行文本垂直居中,不适用于多行。如果想让多行文本垂直居中,还需要设置盒子的padding。如下:
|
|||
|
|
|||
|
20170808_2240.png
|
|||
|
|
|||
|
|
|||
|
### font字体属性
|
|||
|
|
|||
|
**1、字号、行高、字体三大属性:**
|
|||
|
|
|||
|
(1)字号:
|
|||
|
|
|||
|
```
|
|||
|
font-size:14px;
|
|||
|
```
|
|||
|
|
|||
|
(2)行高:
|
|||
|
|
|||
|
```
|
|||
|
line-height:24px;
|
|||
|
```
|
|||
|
|
|||
|
(3)字体:(font-family就是“字体”,family是“家庭”的意思)
|
|||
|
|
|||
|
```
|
|||
|
font-family:"宋体";
|
|||
|
```
|
|||
|
|
|||
|
上面这三个属性,我们可以使用一行代码来实现:(字号 font-size、行高 line-height、字体 font-family)
|
|||
|
|
|||
|
```
|
|||
|
font: 14px/24px “宋体”;
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
|
|||
|
**2、字体属性的说明:**
|
|||
|
|
|||
|
(1)网页中不是所有字体都能用,因为这个字体要看用户的电脑里面装没装,比如你设置:
|
|||
|
|
|||
|
```
|
|||
|
font-family: "华文彩云";
|
|||
|
```
|
|||
|
|
|||
|
上方代码中,如果用户电脑里面没有这个字体,那么就会变成宋体。
|
|||
|
|
|||
|
页面中,中文我们只使用: 微软雅黑、宋体、黑体。 如果页面中,需要其他的字体,那么需要切图。
|
|||
|
英语:Arial 、 Times New Roman
|
|||
|
|
|||
|
|
|||
|
(2)为了防止用户电脑里,没有微软雅黑这个字体。就要用英语的逗号,隔开备选字体。如下:
|
|||
|
|
|||
|
```
|
|||
|
font-family: "微软雅黑","宋体";
|
|||
|
```
|
|||
|
|
|||
|
上方代码表示:如果用户电脑里没有安装微软雅黑字体,那么就是宋体。
|
|||
|
|
|||
|
备选字体可以有无数个,用逗号隔开。
|
|||
|
|
|||
|
|
|||
|
(3)我们要将英语字体放在最前面,这样所有的中文,就不能匹配英语字体,就自动的变为后面的中文字体:
|
|||
|
|
|||
|
```
|
|||
|
font-family: "Times New Roman","微软雅黑","宋体";
|
|||
|
```
|
|||
|
|
|||
|
上方代码的意思是,英文会采用Times New Roman字体,而中文会采用微软雅黑字体(因为美国人设计的Times New Roman字体并不针对中文,所以中文会采用后面的微软雅黑)。比如说,对于`smyhvae哈哈哈`这段文字,`smyhvae`会采用Times New Roman字体,而`哈哈哈`会采用微软雅黑字体。
|
|||
|
|
|||
|
可是,如果我们把中文字体写在前面:(错误写法)
|
|||
|
|
|||
|
```
|
|||
|
font-family: "微软雅黑","Times New Roman","宋体";
|
|||
|
```
|
|||
|
|
|||
|
上方代码会导致,中文和英文都会采用微软雅黑字体。
|
|||
|
|
|||
|
|
|||
|
(4)所有的中文字体,都有英语别名。
|
|||
|
|
|||
|
微软雅黑的英语别名:
|
|||
|
|
|||
|
```
|
|||
|
font-family: "Microsoft YaHei";
|
|||
|
```
|
|||
|
|
|||
|
宋体的英语别名:
|
|||
|
|
|||
|
```
|
|||
|
font-family: "SimSun";
|
|||
|
```
|
|||
|
|
|||
|
于是,当我们把字号、行高、字体这三个属性合二为一时,也可以写成:
|
|||
|
|
|||
|
```
|
|||
|
font:12px/30px "Times New Roman","Microsoft YaHei","SimSun";
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
(5)行高可以用百分比,表示字号的百分之多少。
|
|||
|
|
|||
|
一般来说,百分比都是大于100%的,因为行高一定要大于字号。
|
|||
|
|
|||
|
比如说, `font:12px/200% “宋体”`等价于`font:12px/24px “宋体”;`。`200%`可以理解成word里面的2倍行高。
|
|||
|
|
|||
|
反过来, `font:16px/48px “宋体”;`等价于`font:16px/300% “宋体”`。
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
## 超级链接的美化
|
|||
|
|
|||
|
|
|||
|
> 超级链接就是a标签。
|
|||
|
|
|||
|
### 伪类
|
|||
|
|
|||
|
**伪类**:同一个标签,根据用户的某种状态不同,有不同的样式。这就叫做“伪类”。
|
|||
|
|
|||
|
类是工程师加的,比如div属于box类,很明确,就是属于box类。但是a属于什么类?不明确。因为需要看用户有没有点击、有没有触碰。所以,就叫做“伪类”。
|
|||
|
伪类用冒号来表示。
|
|||
|
|
|||
|
a标签有4种伪类,要求背诵。如下:
|
|||
|
|
|||
|
```
|
|||
|
a:link{
|
|||
|
color:red;
|
|||
|
}
|
|||
|
a:visited{
|
|||
|
color:orange;
|
|||
|
}
|
|||
|
a:hover{
|
|||
|
color:green;
|
|||
|
}
|
|||
|
a:active{
|
|||
|
color:black;
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
上方代码解释如下:
|
|||
|
|
|||
|
- `:link` 表示“链接”,用户没有点击过这个链接的样式。
|
|||
|
- `:visited` 表示“访问过的”, 用户访问过了这个链接之后的样式。
|
|||
|
- `:hover` 表示“悬停”,用户鼠标悬停的时候链接的样式。
|
|||
|
- `:active` 表示“激活”, 用户用鼠标点击这个链接,但是不松手,此刻的样式。
|
|||
|
|
|||
|
上面的代码,看一下动图的效果:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
记住,这四种状态,在css中,必须按照固定的顺序写:
|
|||
|
|
|||
|
> a:**l**ink 、a:visited 、a:hover 、a:active
|
|||
|
|
|||
|
如果不按照顺序,那么将失效。“爱恨准则”:love hate。必须先爱,后恨。
|
|||
|
|
|||
|
|
|||
|
|
|||
|
### 超链接的美化
|
|||
|
|
|||
|
超链接a标签在使用的时候,比较难。因为不仅仅要控制a这个盒子,也要控制它的伪类。
|
|||
|
|
|||
|
我们一定要将a标签写在前面,将`:link、:visited、:hover、:active`这些伪类写在后面。
|
|||
|
|
|||
|
举个例子。如果效果:
|
|||
|
|
|||
|
20170810_2235.gif
|
|||
|
|
|||
|
为了实现上面这个效果,完整版代码如下:
|
|||
|
|
|||
|
```html
|
|||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
|||
|
<head>
|
|||
|
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
|
|||
|
<title>Document</title>
|
|||
|
<style type="text/css">
|
|||
|
*{
|
|||
|
margin: 0;
|
|||
|
padding: 0;
|
|||
|
}
|
|||
|
.nav{
|
|||
|
width: 960px;
|
|||
|
height: 50px;
|
|||
|
border: 1px solid red;
|
|||
|
margin: 100px auto;
|
|||
|
}
|
|||
|
.nav ul{
|
|||
|
/*去掉小圆点*/
|
|||
|
list-style: none;
|
|||
|
}
|
|||
|
.nav ul li{
|
|||
|
float: left;
|
|||
|
width: 120px;
|
|||
|
height: 50px;
|
|||
|
/*让内容水平居中*/
|
|||
|
text-align: center;
|
|||
|
/*让行高等于nav的高度,就可以保证内容垂直居中*/
|
|||
|
line-height: 50px;
|
|||
|
}
|
|||
|
.nav ul li a{
|
|||
|
display: block;
|
|||
|
width: 120px;
|
|||
|
height: 50px;
|
|||
|
}
|
|||
|
/*两个伪类的属性,可以用逗号隔开*/
|
|||
|
.nav ul li a:link , .nav ul li a:visited{
|
|||
|
text-decoration: none;
|
|||
|
background-color: purple;
|
|||
|
color:white;
|
|||
|
}
|
|||
|
.nav ul li a:hover{
|
|||
|
background-color: orange;
|
|||
|
}
|
|||
|
</style>
|
|||
|
</head>
|
|||
|
<body>
|
|||
|
<div class="nav">
|
|||
|
<ul>
|
|||
|
<li><a href="#">网站栏目</a></li>
|
|||
|
<li><a href="#">网站栏目</a></li>
|
|||
|
<li><a href="#">网站栏目</a></li>
|
|||
|
<li><a href="#">网站栏目</a></li>
|
|||
|
<li><a href="#">网站栏目</a></li>
|
|||
|
<li><a href="#">网站栏目</a></li>
|
|||
|
<li><a href="#">网站栏目</a></li>
|
|||
|
<li><a href="#">网站栏目</a></li>
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
</body>
|
|||
|
</html>
|
|||
|
```
|
|||
|
|
|||
|
上方代码中,我们发现,当我们在定义`a:link`和 `a:visited`这两个伪类的时候,如果它们的属性相同,我们其实可以写在一起,用逗号隔开就好,摘抄如下:
|
|||
|
|
|||
|
```css
|
|||
|
.nav ul li a{
|
|||
|
display: block;
|
|||
|
width: 120px;
|
|||
|
height: 50px;
|
|||
|
}
|
|||
|
/*两个伪类的属性,可以用逗号隔开*/
|
|||
|
.nav ul li a:link , .nav ul li a:visited{
|
|||
|
text-decoration: none;
|
|||
|
background-color: purple;
|
|||
|
color:white;
|
|||
|
}
|
|||
|
.nav ul li a:hover{
|
|||
|
background-color: orange;
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
如上方代码所示,最标准的写法,就是把link、visited、hover这三个伪类都要写。但是前端开发工程师在大量的实践中,发现不写link、visited也挺兼容。写法是:
|
|||
|
|
|||
|
> a:link、a:visited都是可以省略的,简写在a标签里面。也就是说,a标签涵盖了link、visited的状态(前提是都具有了相同的属性)。写法如下:
|
|||
|
|
|||
|
|
|||
|
```css
|
|||
|
.nav ul li a{
|
|||
|
display: block;
|
|||
|
width: 120px;
|
|||
|
height: 50px;
|
|||
|
text-decoration: none;
|
|||
|
background-color: purple;
|
|||
|
color:white;
|
|||
|
}
|
|||
|
.nav ul li a:hover{
|
|||
|
background-color: orange;
|
|||
|
}
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
当然了,在写`a:link`、`a:visited`这两个伪类的时候,要么同时写,要么同时不写。如果只写`a`属性和`a:link`属性,不规范。
|
|||
|
|
|||
|
|
|||
|
## background系列属性
|
|||
|
|
|||
|
### background-color背景颜色属性
|
|||
|
|
|||
|
css2.1中,背景颜色的表示方法有三种:单词、rgb表示法、十六进制表示法。
|
|||
|
|
|||
|
比如红色可以有下面的三种表示方法:
|
|||
|
|
|||
|
```
|
|||
|
background-color: red;
|
|||
|
background-color: rgb(255,0,0);
|
|||
|
background-color: #ff0000;
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
|
|||
|
下面分别介绍。
|
|||
|
|
|||
|
**1、用英语单词来表示:**
|
|||
|
|
|||
|
能够用英语单词来表述的颜色,都是简单颜色。比如红色:
|
|||
|
|
|||
|
```
|
|||
|
background-color: red;
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
**2、rgb表示法:**
|
|||
|
|
|||
|
rgb表示三原色“红”red、“绿”green、“蓝”blue。
|
|||
|
|
|||
|
光学显示器中,每个像素都是由三原色的发光原件组成的,靠明亮度不同调成不同的颜色的。r、g、b的值,每个值的取值范围0~255,一共256个值。
|
|||
|
|
|||
|
比如红色:
|
|||
|
|
|||
|
```
|
|||
|
background-color: rgb(255,0,0);
|
|||
|
```
|
|||
|
|
|||
|
黑色:
|
|||
|
|
|||
|
```
|
|||
|
background-color: rgb(0,0,0);
|
|||
|
```
|
|||
|
|
|||
|
颜色可以叠加,比如黄色就是红色和绿色的叠加:
|
|||
|
|
|||
|
```
|
|||
|
background-color: rgb(255,255,0);
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
**3、十六进制表示法:**
|
|||
|
|
|||
|
比如红色:
|
|||
|
|
|||
|
```
|
|||
|
background-color: #ff0000;
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
PS:所有用#开头的值,都是16进制的。
|
|||
|
|
|||
|
这里,我们就要学会16进制与10进制之间的转换。下面举几个例子。
|
|||
|
|
|||
|
问:16进制中28等于10进制多少?
|
|||
|
答:2*16+8 = 40。
|
|||
|
|
|||
|
|
|||
|
16进制中的af等于10进制多少?
|
|||
|
答:10 * 16 + 15 = 175
|
|||
|
|
|||
|
|
|||
|
所以,#ff0000就等于rgb(255,0,0)。
|
|||
|
|
|||
|
`background-color: #123456;`等价于`background-color: rgb(18,52,86);`
|
|||
|
|
|||
|
|
|||
|
**十六进制可以简化为3位,所有#aabbcc的形式,能够简化为#abc**。举例如下:
|
|||
|
|
|||
|
比如:
|
|||
|
|
|||
|
```
|
|||
|
background-color:#ff0000;
|
|||
|
```
|
|||
|
|
|||
|
等价于:
|
|||
|
|
|||
|
```
|
|||
|
background-color:#f00;
|
|||
|
```
|
|||
|
|
|||
|
比如:
|
|||
|
|
|||
|
```
|
|||
|
background-color:#112233;
|
|||
|
```
|
|||
|
|
|||
|
等价于:
|
|||
|
|
|||
|
```
|
|||
|
background-color:#123;
|
|||
|
```
|
|||
|
|
|||
|
但是,比如下面这个是无法简化的:
|
|||
|
|
|||
|
```
|
|||
|
background-color:#222333;
|
|||
|
```
|
|||
|
|
|||
|
再比如,下面这个也是无法简化的:
|
|||
|
|
|||
|
```
|
|||
|
background-color:#123123;
|
|||
|
```
|
|||
|
|
|||
|
几种常见的颜色简写可以记住。如下:
|
|||
|
|
|||
|
```
|
|||
|
#000 黑
|
|||
|
#fff 白
|
|||
|
#f00 红
|
|||
|
#222 深灰
|
|||
|
#333 灰
|
|||
|
#ccc 浅灰
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
|
|||
|
### background-image属性
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
### background-repeat属性
|
|||
|
|
|||
|
|
|||
|
|
|||
|
### background-position属性
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
**CSS精灵:**
|
|||
|
|
|||
|
|
|||
|
|
|||
|
###
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|