CSS基础: rem和媒体查询

2024-06-18 21:18

本文主要是介绍CSS基础: rem和媒体查询,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

rem单位

em 单位

首先说一个单位:em

em 值的大小是动态的。当定义或继承font-size属性时,1em等于该元素的字体大小。如果你在网页中任何地方都没有设置文字大小的话,那它将等于浏览器默认文字大小,通常是16px。所以通常1em = 16px。2em = 32px。 如果你设置了body元素的字体大小为20px,那1em = 20px、2em = 40px。那个2就是当前em大小的倍数。

简单的说em是父元素字体的大小,和px不同,毕竟px象素是一个标准的单位,而em是一个相对的单位,来一个例子演示:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>测试文档</title><style>div:nth-of-type(1){font-size: 48px;}div:nth-of-type(1)  p{width: 1em;height: 1em;background-color: green;}div:nth-of-type(2){font-size: 24px;}div:nth-of-type(2) p{width: 1em;height: 1em;background-color: red;}</style>
</head>
<body><div><p></p>
</div><div><p></p>
</div></body>
</html>

在这里插入图片描述

可以看出在元素上设置完em的大小的时候会影响自己子元素的em的值。

rem

不同于em因为rem是根据html元素在字体大小作为参考的。

这个时候又有疑问了,既然是基于html的标准,那么直接在html上定义em不就行了,为什么还要来一个rem这个单位?有必要吗?

很有必要,因为rem是基于html元素的,不会被中间的元素所影响,比如:

<html><body><div><p>  </p></div></body>
</html>

如果定义号rem为24px,无论body还是最里面的p标签无论如何修改其本身font-size,其子类的1rem还是为24px。但是em就不同了,比如html定义font-size=24px。然后body=0.5em,那么div的1em就是12px了。毕竟em受父类标签的影响。

演示:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>测试文档</title><style>html{font-size: 24px;}div:nth-of-type(1){font-size: 2em;}div:nth-of-type(1)  p{width: 1em;height: 1em;background-color: green;}div:nth-of-type(2){font-size: 2rem;}div:nth-of-type(2) p{width: 1rem;height: 1rem;background-color: red;}</style>
</head>
<body><div><p></p>
</div><div><p></p>
</div></body>
</html>

在这里插入图片描述

可以看出第一个div下的p标签1em变成了48px了。所以可以看出虽然em也是相对单位,但是其会被其父类影响。而这个时候就需要一个更加稳定的相对单位rem。

为什么要了解rem呢?因为可以对网页设置的时候可以用rem作为单位,可以修改rem这个相对单位的真实大小来修改网页呈现的状态。比如苏宁易购的网页就是通过这种凡是实现页面元素根据窗口变大变小的。

在这里插入图片描述

媒体查询

媒体查询(media query)是CSS3的新语法。

格式:

@media mediatype  and | not |only(media feature){.....
}
  • @media 开头这个是格式要求

  • mediatype是媒体类型,具体有:

    描述
    all用于所有设备
    print用于打印机或者打印预览
    screen用于电脑屏幕,平板电脑,智能手机等
  • 关键字and , not ,only作为条件的逻辑复合

    关键字描述
    and和,且的意思
    not非的意思
    only指特定的媒体类型
  • media feature 媒体的特性:

在这里插入图片描述

​ 上面截图中解释一下min和max,举例说一下,那就是min-width和max-width。

​ max-width的意思以小于等于这个值,而min-width是大于等于这个值。

还是老规矩来一个演示:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>测试文档</title><style>div{height: 200px;}@media screen and (max-width: 800px){div{background-color: green;}}@media screen and (max-width: 500px){div{background-color: red;}}</style>
</head>
<body>
<div>
</div>
</body>
</html>

在这里插入图片描述

可以看出媒体查询可以根据网页视口的大小而改变一些css的样式,所以很多时候rem的和媒体查询两个相互结合就可以实现了页面变化而呈现的元素也会成缩放。

现在演示一窗口变化,字体也在变化的例子。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>测试文档</title><style>div{width: 750px;margin: 10px auto;font-size: 1rem;background-color: #55a532;}@media screen and (min-width: 750px){html{font-size: 48px;}}@media screen and (min-width: 500px){div{font-size: 24px;}}</style>
</head>
<body>
<div>好人无敌。
</div>
</body>
</html>

在这里插入图片描述

引入资源

当样式比较繁多的时候,开发者针对不同的媒体使用不同的css样式表,原理也是在link的时候通过媒体查询进行判断,然后引入不同的css文件。

格式如下:

<link rel="stylesheet" media="mediatype  and | not |only(media feature)" href="路径">

演示:

首先写一个css1.css样式表。

div{width: 100%;height: 20px;}
div:nth-child(1){background-color: red;
}
div:nth-child(2){background-color: green;
}

再来一个css2.css

div{float: left;width: 50%;height: 20px;}
div:nth-child(1){background-color: red;
}
div:nth-child(2){background-color: green;
}

最后来一个html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>测试文档</title><link rel="stylesheet" media="screen and (min-width:500px)" href="css2.css"><link rel="stylesheet" media="screen and (max-width:500px)" href="css1.css"></head>
<body>
<div></div>
<div></div>
</body>
</html>

在这里插入图片描述

这篇关于CSS基础: rem和媒体查询的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073080

相关文章

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We