em原理与应用代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>em原理与应用</title>
<style>
/* 1.什么是em */
/* h2 {
font-size: 1.5em;
} */
/* 1.5em是用户代理(浏览器)为h2标签设置的默认字号 */
/* em: 浏览器文本的默认字号的相对关键字,通常是16px */
/* 1em = 16px */
/* 1.5em = 1.5 * 16px = 24px */
/* --------------------------------------------- */
/* 2. em 用在哪? */
/* 2.1 设置响应式的文本字号 */
/* font-size: 是允许继承的 */
/* 当前h2的字号,继承自它的祖先元素(body,html) */
/* 想改变h2的字号,大小 */
html{
font-size: 20px;
}
/* h2 font-size: 1.5em 1.5em * 20px = 30px */
/* 2.2 设置盒模型的属性的响应式 */
div:first-of-type {
font-size: 1em;
/* width: 100px;
height: 100px; */
width: 5em;
height: 5em;
background-color: green;
}
/* 因为盒子的大小使用em,所以只需要设置盒子的font-size就可以动态的设置大小了 */
div:first-of-type {
font-size: 0.5em;
}
div:first-of-type {
font-size: 2em;
}
</style>
</head>
<body>
<h2>php.cn</h2>
<div></div>
</html>
em制作一组响应的按钮组件代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>em制作一组响应的按钮组件</title>
<style>
.btn {
background-color:skyblue;
color: #fff;
border: none;
outline: none;
padding: 0.5em 1em;
border-radius: 0.3em;
}
.btn:hover {
/* 透明度 */
opacity: 0.8;
/* 将鼠标设置为手型 */
cursor: pointer;
box-shadow: 0 0 3px #888;
transition: 0.3s;
}
/* 如果想设置三个不同的大小的按钮,只需要为这三个按钮指定不同的字号就可以 */
/* 较小的 */
.small {
/* font-size: 10px; */
font-size: 0.8em;
}
/* 正常的 */
.normal {
/* font-size: 16px; */
font-size: 1em;
}
/* 较大的 */
.larger {
/* font-size: 22px; */
font-size: 1.3em;
}
</style>
</head>
<body>
<buttton class="btn small">Button</buttton>
<buttton class="btn normal">Button</buttton>
<buttton class="btn larger">Button</buttton>
</body>
</html>
em定义字号代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>em定义字号</title>
<style>
body {
/* font-size: 20px; */
/* 20px = 1.25 * 16px(1em) */
font-size: 1.25em;
}
/* h2 : 1.5em 30px */
</style>
</head>
<body>
<h2>php.cn</h2>
<!-- font-size 具有继承性,h2 font-size: 1.5em / 30px 所以span的font-size也是30px -->
<!-- 本意并不想让span内的文本与它的描述的对象的大小一样 -->
<h2>php.cn <span>php中文网</span></h2>
<!-- em: 有动态性和继承性优点,但是也有缺点 -->
<!-- 我们非常的需要一个固定值的em,它不应该随着它自身和祖先元素的字号大小而变动 -->
<!-- 用rem就可以解决掉,rem 就是一个固定值的em -->
</body>
</html>
rem定义字号代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>rem定义字号</title>
<style>
html {
/* em的初始值就是用户代理的值,默认就是16px */
/* 1em = 20px; */
font-size: 1.25em;
/* 此时 1em = 20px */
/* 当前font-size属性出现在了html中 */
/* html 叫根元素,一个页面中它是唯一的且是最大包含块 */
/* 所以,在html中定义的em大小,可看成一个常量(固定的值) */
/* html的所有后代元素,如果想引用html中的字号,就不能再用em了 */
/* 因为em具有继承性 */
/* 此时,我们用一个新的关键字来引用根元素中的字号大小font-size的值 */
/* 这个关键字就是: rem */
}
h2 {
/* 1.5rem = 1.5 * 20px = 30px */
font-size: 1.5rem;
}
h2 span {
/* 1rem = 1 * 20px = 20px; */
font-size: 1rem;
}
</style>
</head>
<body>
<h2>php.cn <span>php中文网</span></h2>
</body>
</html>
em实现响应式布局代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>em实现响应式布局</title>
<style>
/* 设置根元素字号 */
html {
/* font-size: 12px; */
font-size: 0.75em;
/* 后面就可以直接使用“rem”来引用“12px”来定义字号或其它属性 */
}
.panel {
/* font-size: 1rem; */
/* 此时,当前元素.panel中的其它属性,如果用到em就是1rem(12px) */
/* 1em = 12px */
padding: 1em;
/* 0.5em = 6px */
border-radius: .5em;
/* 边框不要用em/rem,一定要用px */
border: 1px solid #999;
background-color: #eee;
margin: 2em;
}
.panel h2 {
/* 以后的字号,强烈推荐使用rem设置 */
font-size: 1.2rem;
/* 1em = 1.2rem */
margin: 1em 0;
}
.panel p{
/* 1.1rem = 1.1 * 12px = 13.2px */
font-size: 1.1rem;
/* 缩进2个字符 */
text-indent: 2em;
}
/* 适配以小到大配置 */
/* 屏幕宽度 >= 800px, 字号放大到14px */
@media screen and (min-width: 800px) {
/* 14/16 = 0.875em */
html {
font-size: 0.875em;
}
.panel {
background-color: wheat;
}
}
/* 屏幕宽度 >= 1000px, 字号放大到16px */
@media screen and (min-width: 1000px) {
/* 16/16 = 1em */
html {
font-size: 1em;
}
.panel {
background-color: lightcyan;
}
}
/* 屏幕宽度 >= 1200px, 字号放大到20px */
@media screen and (min-width: 1200px) {
/* 20/16 = 1.25em */
html {
font-size: 1.25em;
}
.panel {
background-color: lightskyblue;
}
}
</style>
</head>
<body>
<div class="panel">
<h2>除了“嫦娥”,还有谁带回太空“土特产”</h2>
<div class="panel-body">
<p>
1969年7月20日,NASA阿波罗11号登月舱带着2名宇航员——尼尔·阿姆斯特朗和巴兹·奥尔德林,成功踏上月球正面的静海基地。
</p>
</div>
</div>
</body>
</html>
em实现响应式布局: 动态调整响应级别代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>em实现响应式布局: 动态调整响应级别</title>
<style>
/* 设置根元素字号 */
html {
/* font-size: 12px; */
font-size: 0.75em;
/* 后面就可以直接使用“rem”来引用“12px”来定义字号或其它属性 */
}
.panel {
/* font-size: 1rem; */
/* 此时,当前元素.panel中的其它属性,如果用到em就是1rem(12px) */
/* 1em = 12px */
padding: 1em;
/* 0.5em = 6px */
border-radius: .5em;
/* 边框不要用em/rem,一定要用px */
border: 1px solid #999;
background-color: #eee;
margin: 2em;
}
.panel h2 {
/* 以后的字号,强烈推荐使用rem设置 */
font-size: 1.2rem;
/* 1em = 1.2rem */
margin: 1em 0;
}
.panel p{
/* 1.1rem = 1.1 * 12px = 13.2px */
font-size: 1.1rem;
/* 缩进2个字符 */
text-indent: 2em;
}
/* 适配以小到大配置 */
/* 屏幕宽度 >= 800px, 字号放大到14px */
@media screen and (min-width: 800px) {
/* 14/16 = 0.875em */
html {
font-size: 0.875em;
}
.panel {
background-color: wheat;
}
}
/* 屏幕宽度 >= 1000px, 字号放大到16px */
@media screen and (min-width: 1000px) {
/* 16/16 = 1em */
html {
font-size: 1em;
}
.panel {
background-color: lightcyan;
}
}
/* 屏幕宽度 >= 1200px, 字号放大到20px */
@media screen and (min-width: 1200px) {
/* 20/16 = 1.25em */
html {
font-size: 1.25em;
}
.panel {
background-color: lightskyblue;
}
}
.panel.large{
font-size: 2rem;
}
</style>
</head>
<body>
<button>缩小</button>
<div class="panel large">
<h2>除了“嫦娥”,还有谁带回太空“土特产”</h2>
<div class="panel-body">
<p>
1969年7月20日,NASA阿波罗11号登月舱带着2名宇航员——尼尔·阿姆斯特朗和巴兹·奥尔德林,成功踏上月球正面的静海基地。
</p>
</div>
</div>
</body>
</html>
<script>
document.querySelector('button').addEventListener('click',(ev) =>{
const panel = document.querySelector('.panel');
panel.classList.toggle('large');
if(panel.classList.contains('large')) ev.target.innerHTML = '缩小';
else ev.target.innerHTML = '放大';
})
</script>
视口单位:vh / vw 代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>视口单位:vh / vw </title>
<style>
/* 视口:“可视窗口”,浏览器窗口中用于显示文档的可视区域 */
/* 视口不包括地址栏,菜单栏,工具条,状态栏 */
/* vh: 视口的“初始包含块”的高度的百分之一(1/100)
vw: 视口的“初始包含块”的宽度的百分之一(1/100)
初始包含块:目前 可以简单的理解为“html” */
.box {
width: 50vw;
height: 25vh;
background-color: lightgreen;
margin: auto;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
视口单位:vmin / vmax代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>视口单位:vmin / vmax </title>
<style>
/* .box {
width: 50vw;
height: 25vh;
background-color: lightgreen;
margin: auto;
} */
.box {
width: 50vmin;
height: 50vmin;
background-color: lightgreen;
margin: auto;
}
/* 用在手机横竖屏适配(但是一些老系统不支持) */
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
css原生变量 / css自定义属性
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>css原生变量 / css自定义属性</title>
<style>
body {
--color: #f00;
--active-color: #0f0;
--a--border:1px solid;
}
a {
color: var(--color);
}
a:hover {
color: var(--active-color);
border: var(--a--border);
}
</style>
</head>
<body>
<a href="">php.cn</a>
</body>
</html>
总结:
em:
文本字号单位(也叫元素符号),浏览器文本的默认字号的相对关键字,根元素html中font-size单位通常是1em=16px(可以修改1em为其它px),em具有继承性(子元素em是以父元素font-size为单位大小)。主要是设置动态的尺寸
rem:
根元素html中font-size单位,rem不具有继承性,主要是设置固定的字号。
视口:“可视窗口”,浏览器窗口中用于显示文档的可视区域,视口不包括地址栏,菜单栏,工具条,状态栏
@media screen:
为屏幕适配,适配以小到大配置。
vh:
视口的高度的百分之一(1/100)
vw:
视口的宽度的百分之一(1/100)
vmin:
视口的最小的边的百分之一
vmax:
视口的最大的边的百分之一
vmin和vmax:
用在手机横竖屏适配(但是一些老系统不支持)
css原生变量 / css自定义属性:
变量名称必须以 — 开头,变量只能存储一个属性的值,而不能用来存储一个属性,变量中无法使用加减等数学方法,如果需要使用计算,则可以使用 calc 函数,CSS变量是区分大小写的,通过var()函数来引用。