1.CSS单位-CSS进阶
一、CSS单位
1.绝对单位
在
CSS
中,绝对单位定义的大小是固定的。使用的是物理度量单位,显示效果不会受外界因素影响。 但绝对单位一般多用于传统平面印刷,而极少用于前端开发。 在前端开发中,都不会用到绝对单位。
2.相对单位
在
CSS
中,相对单位定义的大小是不固定的。
(1)常见的相对单位
相对单位 |
说明 |
---|---|
px |
像素 |
% |
百分比 |
em |
1em等于当前元素字体大小 |
rem |
1rem等于根元素字体大小 |
(2)px
全称pixel,像素,指的是一张图片中最小的点,或计算机屏幕中最小的点。 当我们将一张图片放大n倍,你会发现:原来一张图片是由一个个小方点组成的,而每一个小方点就是一个像素。
① 分辨率
我们常听说,这台计算机的分辨率是
800px * 600px
,指的就是计算机显示屏宽有800个小方点,高有600个小方点。
Ⅰ.分辨率不同,1px大小也不同
现在,我们知道
px
是相对单位,但屏幕分辨率不同,1px的大小也不同。
(3)%
在
CSS
中,支持百分比作为单位的属性很多,可分为 3 类:
-
width、height、font-size
的百分比是相对于父元素“相同属性”的值来计算的。 -
line-height
的百分比是相对于父元素的font-size
值来计算的。 -
vertical-align
的百分比是相对于当前元素的line-height
值来计算的。
① 示例
Ⅰ.例1
若父元素
width、height
为100px,子元素width、height
为50%
,则子元素的width、height
实际为50px。 若父元素font-size
为32px,子元素font-size
为50%
,则子元素的font-size
实际为16px。
Ⅱ.例2
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8"> <!--必须放在title标签及其它meta标签前-->
<style>
#dady{
width:200px;
height:160px;
border:1px solid #00FFFF; /*设置边框样式*/
font-size:32px;
}
#son{
width:50%; /*相对于父元素“相同属性”的值来计算的*/
height:50%;
border:1px solid #66A9FE; /*设置边框样式*/
font-size:50%;
}
</style>
</head>
<body>
<div id="dady">
見贤思齊
<div id="son">見贤思齊</div>
</div>
</body>
</html>
百分比单位例.png
(4)em
在
CSS
中,em
是相对于当前元素的字体大小而言。 其中,1em
等于当前元素字体大小。此处的字体大小指的是以px
为单位的font-size
值。 例如:当前元素的font-size
值为20px,则1em
值为20px,依此类推。
注意
- 若当前元素的
font-size
没有定义,则当前元素会继承父元素的font-size
。 - 若当前元素的所有祖先元素都没有定义
font-size
,则当前元素会继承浏览器默认的font-size
,其中浏览器默认的font-size
值都是16px
。
3个小技巧
在
CSS
中,em
作为单位有以下 3 个小技巧:
- 首行缩进使用
text-index:2em
实现。 - 使用
em
作为统一单位。 - 使用
em
作为字体大小单位。
① 首行缩进使用text-index:2em
实现(重点)
我们写作文时,都会将每一段的段首缩进 2 个字的距离,这在网页排版中也是一样。 要想实现这个效果,
text-index
值应该是font-size
值的 2 倍。如果我们使用text-index:2em
就可以轻松实现。
Ⅰ.例1
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8"> <!--必须放在title标签及其它meta标签前-->
<style>
p{
font-size: 15px;
text-indent: 2em; /* 实现首行缩进,1em=当前元素字体大小,这里的2em等价于30px */
width: 360px;
}
</style>
</head>
<body>
<h3>念奴娇·赤壁怀古</h3>
<p>大江东去,浪淘尽,千古风流人物。故垒西边,人道是,三国周郎赤壁。乱石穿空,惊涛拍岸,卷起千堆雪。江山如画,一时多少豪杰。</p>
<p>遥想公瑾当年,小乔初嫁了,雄姿英发。羽扇纶巾,谈笑间,樯橹灰飞烟灭。故国神游,多情应笑我,早生华发。人生如梦,一尊还酹江月。</p>
</body>
</html>
首行缩进text-index为2em.png
对于首行缩进,使用
em
作为单位会比使用px
作为单位更好。 因为使用px
作为单位,若我们定义当前元素的font-size
为10px,则text-index
为20px;若定义当前元素的font-size
为15px,则text-index
为30px,依此类推。 也就是说,我们使用em
作为单位时,不管font-size
定义为多少px,我们只需将text-index
定义为2em
即可,不需计算,十分方便。
② 使用em
作为统一单位
所有浏览器默认字体大小都是
16px
。 我们若想要在一个页面中,统一使用em
作为单位,就可以拿默认字体大小开刀。 简单来讲,对于任何元素我们都不需设置font-size
为多少px,二世继承根元素的font-size
值16px
,然后再使用em
换算即可。
Ⅰ.简化font-size计算
若使用浏览器默认字体大小(16px),则em与px对应关系为:
1em = 16px * 1 = 16px
0.75em = 16px * 0.75 = 12px
但这有个缺点,就是结果不是整数,计算时还是有些麻烦,所以为了简化
font-size
计算,我们在CSS中提前声明“body{font-size:62.5%}”。
Ⅱ.声明“body{font-size:62.5%}”
通过这个声明,我们可以使得默认字体大小变为
16px * 62.5% = 10px
,此时em与px对应关系为:
1em = 10px
0.75em = 7.5px
在实际开发中,若想要统一使用
em
作为单位,都是使用这个技巧。
Ⅲ.例1
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8"> <!--必须放在title标签及其它meta标签前-->
<style>
body{
font-size: 62.5%; /*使得浏览器默认字体大小变为 10px */
}
#p1{
font-size: 1em;
}
#p2{
font-size: 1.5em;
}
#p3{
font-size: 2em;
}
</style>
</head>
<body>
<p id="p1">当前字体大小为1em,也就是10px</p>
<p id="p2">当前字体大小为1.5em,也就是15px</p>
<p id="p3">当前字体大小为2em,也就是20px</p>
</body>
</html>
使用em作为统一单位例1.png
Ⅳ.例2
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8"> <!--必须放在title标签及其它meta标签前-->
<style>
*{
padding: 0;
margin: 0; /*设置内外边距为0*/
}
html{
font-size: 62.5%; /*使得浏览器默认字体大小变为 10px */
}
p{
display: inline-block;
border: 1px solid #DDA0DD;
}
#p1{ /*使用 px 作为单位*/
font-size: 15px;
width: 150px;
height: 75px;
text-indent: 30px; /*首行缩进2个字体大小*/
}
#p2{ /*使用 em 作为单位*/
font-size: 1.5em; /*此时,字体大小为15px*/
width: 10em; /*em是相对于当前元素的字体大小,等于10*1.5em = 10 * 15px */
height: 5em;
text-indent: 2em;
}
</style>
</head>
<body>
<p id="p1">人生若只如初见,何事秋风悲画扇。</p>
<p id="p2">人生若只如初见,何事秋风悲画扇。</p>
</body>
</html>
使用em作为统一单位例2.png
在
CSS
中,em
是相对于当前元素的字体大小而言。 在第2个使用 em 作为单位中,font-size
为10px * 1.5 =15px
,若width和height同样以em
为单位,就要以当前元素的font-size
再计算一次,width等于10 * 1.5em(15px)=150px
,同理height等于5 * 1.5em(15px)=75px
。
Ⅴ.实际开发
在实际开发中,对于
em
,我们一般要计算2次:
- 第1次:计算当前元素
font-size
属性的px值
。 - 第2次:当前元素其它属性(如:width、height等)的
px值
。
③ 使用em
作为字体大小单位
对于一个页面的字体大小,使用
px
作为单位时可扩展性不好,使用百分比作为单位时也不符合习惯,最佳选择是使用em
作为单位来定义字体大小。使用em
作为单位,当需要改变页面整体的文字大小时,我们只需要改变根元素字体大小即可,工作量变得非常少。em
这个特点在跨平台网站开发中有着明显的优势。
(5)rem
font size of the root element,指的是相对于根元素(html元素)的字体大小。
rem
是CSS3
新引入的单位,目前除了IE8
及以前版本之外,大部分主流浏览器都是支持rem
的。rem
布局是移动端最常用的字体大小之一。
① rem和em区别
- em是相对“ 当前元素 ”的字体大小。
- rem是相对“ 根元素 ”的字体大小。
- 这里的
font-size
指的都是以px
为单位的font-size
值。
② 示例
Ⅰ.例1
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8"> <!--必须放在title标签及其它meta标签前-->
<style>
html{
font-size: 62.5%; /*使得浏览器默认字体大小变为 10px */
}
#daddy{
font-size: 2rem;
width: 200px;
height: 160px;
border:1px solid #00FFFF;
}
#girl{
font-size: 2rem;
width: 150px;
height: 100px;
border:1px solid #66A9FE;
}
</style>
</head>
<body>
<div id="daddy">
当时只道是寻常。
<div id="girl">当时只道是寻常。</div>
</div>
</body>
</html>
rem示例1.png
(6)实际开发
在实际开发中,
CSS
单位用px
好还是em
好呢? 在国外,大部分主流网站都是使用em
作为单位,而且W3C
也建议使用em
作为单位。但国内大多数网站,包括三大门户等,都是采用px
作为单位。 这是因为在国外,尤其是美国,有一些法律规定网站要具有适应性,对于IE
以前的版本无法调整那些使用px
作为单位的字体大小,但现在的IE
版本几乎都支持。 在这里,推荐使用px
作为单位,因为px
作为单位非常方便计算长度。
- MYSQL5.7开启慢查询日志
- 微信又是一次大更新,下拉多任务切换 各种有趣小游戏
- 人工智能有可能超越人类大脑?
- 一种简单的数据库性能测试方法
- xiaomao.com7位数高价成交,并已启用建站
- Docker基于已有的镜像制新的镜像-Docker for Web Developers(3)
- 如何通过Remoting实现双向通信
- jenkins 入门教程(上)
- 让jQuery Tools Scrollable控件在Mobile Web里面支持resize功能
- CentOS6.5上golang环境配置
- 马斯克频发推文,或在揭示特斯拉明年大动作?
- yum安装出现No package nodejs available解决办法
- InfoPath中repeationg section动态填充数据
- CSS魔法堂:重新认识Box Model、IFC、BFC和Collapsing margins
- HTML 教程
- HTML 简介
- html div 标签介绍
- html span 标签介绍
- html a 超链接标签
- HTML Br换行标签介绍
- HTML P段落标签介绍
- HTML br与p标签区别
- Html H 标题标签
- html px em pt长度单位
- HTML form 标签
- HTML radio 单选框
- HTML B 加粗标签
- HTML strong加粗粗体标签
- HTML em 强调标签
- HTML i 斜体标签
- HTML u下划线标签
- HTML s 删除线标签
- Html img 图片标签
- Html上标注sup与下标注sub标签
- HTML nobr 禁止换行标签
- HTML hr 水平线标签
- HTML label 标签
- HTML input 标签
- HTML textarea 标签
- HTML select下拉列表标签
- HTML checkbox 多选框
- HTML font color 标签
- HTML iframe 框架标签
- HTML Table 表格
- HTML dl dt dd 标签
- HTML ol li有序列表标签
- HTML ul li 无序列表标签
- HTML 注释
- CSS 教程
- CSS 简介
- CSS 语法
- CSS Id 和 Class选择器
- CSS 样式的创建
- CSS background 背景介绍
- CSS 文本样式
- CSS font 字体
- CSS A 链接
- CSS ul ol列表样式
- CSS TABLE 样式
- CSS 框模型
- CSS border 边框
- CSS Outlines 轮廓
- CSS 外边距 Margin
- CSS Padding 内边距
- CSS 分组和嵌套选择器
- CSS 尺寸 (Dimension)
- CSS Display 属性
- CSS Position 定位
- CSS Float 浮动
- CSS 水平对齐(Horizontal Align)
- CSS 组合选择符
- CSS 伪类
- CSS 伪元素
- CSS 导航栏
- CSS 下拉菜单
- CSS 图片廊
- CSS 图像透明/不透明
- CSS sprite 图像拼合技术
- CSS 媒体类型
- CSS 属性选择器
- CSS 实例
- 不会吧!都 0202 年了,不会还有不知道 axios 的吧
- 全栈的自我修养: 002使用@vue/cli进行vue环境搭建 (使用Vue,SpringBoot,Flask完成前后端分离)
- JAVA | Java 解决跨域问题 花式解决跨域问题
- 深入理解Java泛型(二)通配符与嵌套
- 用高斯计算磷光发射能
- Android So动态加载 优雅实现与原理分析
- 堆与栈区别
- 在Gaussian16中同时扫描两个反应坐标
- python调试神器traceback
- Centos安装高版本GCC
- Django+Vue开发生鲜电商平台之5.使用DRF实现商品列表页和过滤
- Spring 注入集合的成员变量属性
- 深入理解JVM(③)Java的锁优化
- 解Bug之路-Nginx 502 Bad Gateway
- bootstrap v4 toast轻提示正确用法