0

0

CSS:关于元素高度与宽度的讨论 系列文章(三)_html/css_WEB-ITnose

php中文网

php中文网

发布时间:2016-06-24 11:36:34

|

1266人浏览过

|

来源于php中文网

原创

前言

在css:关于元素高度与宽度的讨论 系列文章(一)中讨论了display为display:block的非置换元素的宽度与高度在不同情况下的表现,但是有些地方并不严谨,因此在这里做一个补充,在补充前先简单介绍一下css盒模型以及其在可视化格式模型中布局中被管理的几个要点和containing box。

The CSS box model describes the rectangular boxes that are generated for elements in the document tree and laid out according to the visual formatting model.

css盒模型描述了在文档树里生成并且根据可视化格式模型进行渲染布局的矩形框们。

In the visual formatting model, each element in the document tree generates zero or more
boxes according to the box model. The layout of these boxes is governed by:

  • box dimensions and type.

  • positioning scheme (normal flow, float, and absolute positioning).

    立即学习前端免费学习笔记(深入)”;

  • relationships between elements in the document tree.

  • external information (e.g., viewport size, intrinsic dimensions of images, etc.).

在可视化格式模型中,每个元素在文档树里根据盒模型生成0或多个盒子。这些盒的布局被以下要素所管理

  • 盒子的尺寸和类型

  • 定位方案(普通流,浮动,绝对定位)

  • 文档树中元素之间的关系

  • 外部信息(例如,视口大小,图像的内在尺寸等)

因此下面我们要谈的便是关于盒子的尺寸问题。

containing block(包含块)

概述

In CSS 2.1, many box positions and sizes are calculated with respect to the edges of >a rectangular box called a containing block.In general, generated boxes act as >containing blocks for descendant boxes; we say that a box "establishes" the >containing block for its descendants. The phrase "a box's containing block" means >"the containing >block in which the box lives," not the one it generates.

Each box is given a position with respect to its containing block, but it is not >confined by this containing block; it may overflow.

在CSS2.1中,一个包含块的位置和尺寸相对于矩形框的边缘记进行计算。通常,生成的框为它的后代盒子充当包含块;我们认为,一个盒子(框)为他的后代建立了包含块。当我们在说“一个框(盒)的包含块”的意思是“该框所处的包含块”,而不是说它自身产生的包含块。

每个盒子相对于它的包含块进行定位,但并不限于它的包含块内;它有可能会溢出。

定义

元素的包含块定义如下

The containing block in which the root element lives is a rectangle called the initial containing block. For continuous media, it has the dimensions of the viewport and is anchored at the canvas origin; it is the page area for paged media. The 'direction' property of the initial containing block is the same as for the root element.

  • 根元素所在的包含块为一个称为初始包含块的矩形框(根元素存在于initial containing block内),在我们常用的浏览器环境下,指的是原点与 canvas 重合,大小和 viewport 相同的矩形。

For other elements, if the element's position is 'relative' or 'static', the containing block is formed by the content edge of the nearest block container ancestor box.

  • 对于其他元素,如果元素的position属性值为relative或者static(元素在文档流中),其包含块为祖先元素中最近的 block container box(块容器盒)content box (除 margin, border, padding 外的区域);

If the element has 'position: fixed', the containing block is established by the viewport in the case of continuous media or the page area in the case of paged media.

  • 如果元素的position值为fixed,包含块由视口viewport建立

If the element has 'position: absolute', the containing block is established by the nearest ancestor with a 'position' of 'absolute', 'relative' or 'fixed', in the following way:

1.In the case that the ancestor is an inline element, the containing block is the bounding box around the padding boxes of the first and the last inline boxes generated for that element. In CSS 2.1, if the inline element is split across multiple lines, the containing block is undefined.
2.Otherwise, the containing block is formed by the padding edge of the ancestor
If there is no such ancestor, the containing block is the initial containing block.

  • 如果元素的position值为absolute,则它的包含块由最近的position的值为
    absolute,relative,fixed的祖先元素(offset parent)所建立,如下列方式
    1.如果祖先是行内元素,则containing block为能够包含祖先元素生成的第一个和最后一个 inline boxs 的 padding boxs (除 margin, border 外的区域) 的最小矩形;
    2.否则,则由这个祖先元素的padding boxs形成

如果没有这样的祖先元素,则包含块为初始包含块

唱鸭
唱鸭

音乐创作全流程的AI自动作曲工具,集 AI 辅助作词、AI 自动作曲、编曲、混音于一体

下载

栗子

根据上面对containing box的介绍,我们可以把包含块当成一个大箱子,箱子里要摆很多小盒子,小盒子怎么摆取决于大箱子。不同的小盒子在它的大箱子里的初始位置是不一样的,下面举个简单的栗子来说明一下

 

CSS

  #wrap {    width: 100px;    height: 100px;    padding: 10px;    border: 2px dashed #333;    background: orange;}#inner {    width: 30px;    height: 30px;    background: #ccc;


原图


理解一:通过此图可以知道inner盒子在position为默认的是static时,它的包含块为最近的祖先元素的content-box,所以他的起始位置位于从wrap的content-box的左上角


理解二:当把inner的position值设为absolute,并设top:0,left:0时,同时把wrap的值设为relative时,inner的包含块为他的off-set parent的padding-box,因此inner定位的原点为wrap的padding-box的左上角。

思考:通过上述例子我们可以更直观的感受到,对于不同的元素它的containing-box是不一样的,同样的对于高度与宽度的继承时的计算,因为containing-box的不一样,计算时也会出现差异的,在我的上两篇文章中,都笼统的说成是xxx的宽或高度等于xxx的父或子的内容的宽度,因此这样的说法是不严谨的,有两点1.因为举得例子中的祖先元素只包含content-box,而不一样的元素的containing-box是不一样的,有的是其某祖先元素的padding-box有的是其祖先元素的content-box因此2.且我认为对于一个元素高度与宽度的继承应该是说继承这个元素所处的containing-box的值的一些计算,而不是单纯的认为是其父元素,因为它的父元素的有可能并不是它的包含块或者说它所处的包含块只是他父元素的一部分,所以下面将对于之前写的文章作出一些补充。
:第一篇文章的内容大体来说是正确的,因此可以先理解完第一篇文章,再来看这篇文章会更好,这边文章的目的也算是对于前两章不足的内容的补充,如有错误,欢迎指正,(^__^) 。

关于元素高度与宽度的补充

下面所举得例子,html的结构就如上例子,下面就不写出html结构了。
元素在文档流中指的就是position的值为static或者relative

元素宽高度为100%

1.元素在文档流中或者元素为浮动元素

 #wrap {    width: 100px;    height: 40px;    padding: 10px;    border: 2px dashed #333;    margin: 10px;    background: orange;}#inner {    width: 100%;    height: 100%;    background: #ccc;}


加上float等于left或者right时,效果与上图相同

结论1:当元素在文档流中或者为浮动元素时,元素的宽高度为其祖先元素中最近的 block container box(块容器盒)的content box,也就是继承它的包含块的宽高度 。

2.元素的position值为absolute

在上述css中的inner上加上position:absolute,在wrap上加上position:relative,效果如下

因为inner并未设置它的定位值,故其位置显示如图,若设定位值也是相对于off-set parent的padding-box进行定位,可看上面的理解一二。

结论2:当元素的position的值为absolute时,元素的宽高度为其其祖先元素中最近的offset parent的padding box,也就是继承它的包含块的宽高度 。

3.元素的position值为fixed

在上述css中的inner上加上position:fixed;

因为inner并未设置它的定位值,故其位置显示如图。

结论3:当元素的position的值为fixed时,元素的宽高度为其包含块viewport的宽高度。

元素不设宽度

1.元素在文档流中

#wrap {    width: 100px;    height: 40px;    padding: 10px;    border: 2px dashed #333;    margin: 10px;    background: orange;}#inner {    height: 10px;    background: #ccc;}


结论1:当元素在文档流时,元素的宽度为其祖先元素中最近的 block container box(块容器盒)的content box,也就是继承它的包含块的宽度 。

2.元素不在文档流中

结论2:如文章一中的结论一样,元素宽度等于其内容所占空间,同样的在文章一中,也得出了元素不设高度,元素的高度为其内容所占据空间,若没有内容,则高度为0。

思考:那么由此我们可以引发我们的又一思考,在元素不设高度或者宽度的情况下,当元素的子代的position scheme不同的情况下,元素的宽度又是如何变化的?

元素宽度或高度由内容决定

接下来我就不举栗子了,直接给出结论

高度宽度都由内容决定

元素不设宽度且元素不在文档流中,元素宽度为内容宽度
元素不设高度,元素高度等于内容高度

  • 元素不在文档流中

    • 当子元素都为普通流中元素时,元素宽度为子元素中宽度最大的元素,高度为子元素高度之和(子元素单个计算:子元素高度 + 子元素padding + 子元素border + 子元素margin)

    • 当子元素都为浮动元素时,元素宽度为子元素宽度之和,高度为子元素中高度最大的元素

    • 当子元素都为绝对定位或者固定定位元素时,元素宽度和高度都为0

    只有高度由内容决定

    元素不设宽度且元素在文档流中,元素宽度为其祖先元素中最近的 block container box(块容器盒) 的 content box
    元素不设高度,元素高度等于内容高度

    2.元素在文档流中

    • 当子元素都为普通流中元素,高度为子元素高度之和(子元素单个计算:子元素高度+子元素padding+子元素border)(边距折叠)

    • 当子元素不在文档流中,元素高度为0

    总结

    1.当元素继承其祖先元素的宽高度时,元素的宽高度为其containing-box的高宽度
    2.当元素的宽度或者高度等于其内容的宽度或者高度时,如上得出的结论

    相关文章

    HTML速学教程(入门课程)
    HTML速学教程(入门课程)

    HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

    下载

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    Python 自然语言处理(NLP)基础与实战
    Python 自然语言处理(NLP)基础与实战

    本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

    9

    2026.01.27

    拼多多赚钱的5种方法 拼多多赚钱的5种方法
    拼多多赚钱的5种方法 拼多多赚钱的5种方法

    在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

    107

    2026.01.26

    edge浏览器怎样设置主页 edge浏览器自定义设置教程
    edge浏览器怎样设置主页 edge浏览器自定义设置教程

    在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

    13

    2026.01.26

    苹果官方查询网站 苹果手机正品激活查询入口
    苹果官方查询网站 苹果手机正品激活查询入口

    苹果官方查询网站主要通过 checkcoverage.apple.com/cn/zh/ 进行,可用于查询序列号(SN)对应的保修状态、激活日期及技术支持服务。此外,查找丢失设备请使用 iCloud.com/find,购买信息与物流可访问 Apple (中国大陆) 订单状态页面。

    121

    2026.01.26

    npd人格什么意思 npd人格有什么特征
    npd人格什么意思 npd人格有什么特征

    NPD(Narcissistic Personality Disorder)即自恋型人格障碍,是一种心理健康问题,特点是极度夸大自我重要性、需要过度赞美与关注,同时极度缺乏共情能力,背后常掩藏着低自尊和不安全感,影响人际关系、工作和生活,通常在青少年时期开始显现,需由专业人士诊断。

    6

    2026.01.26

    windows安全中心怎么关闭 windows安全中心怎么执行操作
    windows安全中心怎么关闭 windows安全中心怎么执行操作

    关闭Windows安全中心(Windows Defender)可通过系统设置暂时关闭,或使用组策略/注册表永久关闭。最简单的方法是:进入设置 > 隐私和安全性 > Windows安全中心 > 病毒和威胁防护 > 管理设置,将实时保护等选项关闭。

    6

    2026.01.26

    2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】
    2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】

    铁路12306提供起售时间查询、起售提醒、购票预填、候补购票及误购限时免费退票五项服务,并强调官方渠道唯一性与信息安全。

    112

    2026.01.26

    个人所得税税率表2026 个人所得税率最新税率表
    个人所得税税率表2026 个人所得税率最新税率表

    以工资薪金所得为例,应纳税额 = 应纳税所得额 × 税率 - 速算扣除数。应纳税所得额 = 月度收入 - 5000 元 - 专项扣除 - 专项附加扣除 - 依法确定的其他扣除。假设某员工月工资 10000 元,专项扣除 1000 元,专项附加扣除 2000 元,当月应纳税所得额为 10000 - 5000 - 1000 - 2000 = 2000 元,对应税率为 3%,速算扣除数为 0,则当月应纳税额为 2000×3% = 60 元。

    33

    2026.01.26

    oppo云服务官网登录入口 oppo云服务登录手机版
    oppo云服务官网登录入口 oppo云服务登录手机版

    oppo云服务https://cloud.oppo.com/可以在云端安全存储您的照片、视频、联系人、便签等重要数据。当您的手机数据意外丢失或者需要更换手机时,可以随时将这些存储在云端的数据快速恢复到手机中。

    101

    2026.01.26

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号