热门标签 | 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 百分比单位的取值依据有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程笔记,小编将为大家推送更多相关知识点的文章,欢迎关注!


推荐阅读
  • NX二次开发:UFUN点收集器UF_UI_select_point_collection详解
    本文介绍了如何在NX中使用UFUN库进行点收集器的二次开发,包括必要的头文件包含、初始化和选择点集合的具体实现。 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • 本文介绍了如何在 ASP.NET 中设置 Excel 单元格格式为文本,获取多个单元格区域并作为表头,以及进行单元格合并、赋值、格式设置等操作。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 本文介绍了如何查看PHP网站及其源码的方法,包括环境搭建、本地测试、源码查看和在线查找等步骤。 ... [详细]
  • 蒜头君的倒水问题(矩阵快速幂优化)
    蒜头君将两杯热水分别倒入两个杯子中,每杯水的初始量分别为a毫升和b毫升。为了使水冷却,蒜头君采用了一种特殊的方式,即每次将第一杯中的x%的水倒入第二杯,同时将第二杯中的y%的水倒入第一杯。这种操作会重复进行k次,最终求出两杯水中各自的水量。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • Leetcode学习成长记:天池leetcode基础训练营Task01数组
    前言这是本人第一次参加由Datawhale举办的组队学习活动,这个活动每月一次,之前也一直关注,但未亲身参与过,这次看到活动 ... [详细]
  • 本文介绍 DB2 中的基本概念,重点解释事务单元(UOW)和事务的概念。事务单元是指作为单个原子操作执行的一个或多个 SQL 查询。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 本文详细介绍了 Spark 中的弹性分布式数据集(RDD)及其常见的操作方法,包括 union、intersection、cartesian、subtract、join、cogroup 等转换操作,以及 count、collect、reduce、take、foreach、first、saveAsTextFile 等行动操作。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
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社区 版权所有