热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CSS百分比单位的取值依据是什么

本文详细探讨了CSS中百分比单位的取值依据,包括不同定位方式下的包含块概念及其应用。通过具体的示例和代码,帮助读者更好地理解和掌握这一知识点。

本文将详细探讨 CSS 中百分比单位的取值依据,帮助读者更好地理解和掌握这一知识点。

百分比单位是一个相对长度单位,其值取决于包含块(containing block)的尺寸。包含块的概念不能简单地理解为父元素,而是根据不同的定位方式来确定。

对于静态定位和相对定位的元素,包含块通常是其父元素,因此百分比值相对于父元素的尺寸来计算。

对于绝对定位的元素,包含块是离它最近的 position 非 static 属性的祖先元素,因此百分比值相对于该祖先元素的尺寸来计算。

对于固定定位的元素,包含块是视口(viewport),因此百分比值相对于视口的尺寸来计算。

实现代码:

CSS 百分比单位的取值依据

结果图:

CSS 百分比单位的取值依据

从图中可以看出:设置 5em 的 div 第一行字符刚好为 5 个字符大小,因为它是相对于当前元素字体的尺寸,宽度占用 90px,5 × 18 = 90px。设置 5rem 的 div 第一行字符要小一些,因为它是相对于根元素字体大小(默认为浏览器大小 16px),比 18px 小一些,宽度占用 80px,5 × 16 = 80px。设置百分比显示的第一行最大,因为它是相对于父元素的尺寸比例,宽度占用 160px,200 × 80% = 160px。

常见场景中的百分比单位的使用

(1)盒模型中的百分比

CSS 盒模型包含的属性有:width、max-width、min-width、height、max-height、min-height、padding、margin 等。这些属性在使用百分比时,参照物不尽相同:

  • width、max-width、min-width:值为百分比时,其相对于包含块的 width 进行计算;
  • height、max-height、min-height:值为百分比时,其相对于包含块的 height 进行计算;
  • padding、margin:值为百分比时,如果是水平的值,就是相对于包含块的 width 进行计算;如果是垂直的值,就是相对于包含块的 height 进行计算。

(2)文本中的百分比

CSS 中文本控制的属性有 font-size、line-height、vertical-align、text-indent 等。这些属性在使用百分比时,参照物不尽相同:

  • font-size:根据父元素的 font-size 进行计算;
  • line-height:根据 font-size 进行计算;
  • vertical-align:根据 line-height 进行计算;
  • text-indent:如果是水平的,则根据 width 进行计算;如果是垂直的,则根据 height 进行计算。

(3)定位中的百分比

CSS 中用于控制 position 位置的 top、right、bottom、left 都可以使用百分比作为单位。其参照物就是包含块的同方向的 width 和 height。不同定位的包含块不尽相同:

  • 如果元素为静态(static)或相对定位(relative),包含块一般是其父容器;
  • 如果元素为绝对定位(absolute),包含块应该是离它最近的 position 为 absolute、relative 或 fixed 的祖先元素;
  • 如果元素为固定定位(fixed),包含块就是视窗(viewport)。

(4)变换中的百分比

CSS 中的 transform 属性中的 translate 和 transform-origin 值也可以设置百分比。

  • translateX() 根据容器的 width 计算;
  • translateY() 根据容器的 height 计算;
  • transform-origin 中横坐标(x)相对于容器的 width 计算;纵坐标(y)相对于容器的 height 计算。

注意,在 translate 还有一个 z 轴的函数 translateZ()。它是不接受百分比为单位的值。

百分比的继承

如果某个元素设置了百分比的属性,则后代元素继承的是计算后的值。例如:

p { font-size: 10px; line-height: 120%; }

那么 p 的子元素继承到的值是 line-height: 12px,而不是 line-height: 120%

感谢各位的阅读,以上就是“CSS 百分比单位的取值依据是什么”的内容了,经过本文的学习后,相信大家对 CSS 百分比单位的取值依据有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程笔记,小编将为大家推送更多相关知识点的文章,欢迎关注!


推荐阅读
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 优化ASM字节码操作:简化类转换与移除冗余指令
    本文探讨如何利用ASM框架进行字节码操作,以优化现有类的转换过程,简化复杂的转换逻辑,并移除不必要的加0操作。通过这些技术手段,可以显著提升代码性能和可维护性。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • c# – UWP:BrightnessOverride StartOverride逻辑 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
author-avatar
三生石512606
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有