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

相关文章

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

Redis KEYS查询大批量数据替代方案

《RedisKEYS查询大批量数据替代方案》在使用Redis时,KEYS命令虽然简单直接,但其全表扫描的特性在处理大规模数据时会导致性能问题,甚至可能阻塞Redis服务,本文将介绍SCAN命令、有序... 目录前言KEYS命令问题背景替代方案1.使用 SCAN 命令2. 使用有序集合(Sorted Set)

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

python解析HTML并提取span标签中的文本

《python解析HTML并提取span标签中的文本》在网页开发和数据抓取过程中,我们经常需要从HTML页面中提取信息,尤其是span元素中的文本,span标签是一个行内元素,通常用于包装一小段文本或... 目录一、安装相关依赖二、html 页面结构三、使用 BeautifulSoup javascript

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️