CSS中的width与height

news2025/1/11 5:08:20

CSS中的width与height

  • 1 display: inline-block
  • 2 width: auto
    • 2.1 外部尺寸与流体特性
      • 2.1.1 正常流宽度
      • 2.1.2 格式化宽度
    • 2.2 内部尺寸与流体特性
      • 2.2.1 包裹性
      • 2.2.2 首选最小宽度
      • 2.2.3 最大宽度
  • 3 height: 100%
    • 3.1 如何让元素支持height: 100%效果

1 display: inline-block

我们都知道,display: inline-block属性可以呈现内联块级元素,元素可以在同一行上面显示,而且可以设置宽度、高度、上下边距和内边距等。

那么,元素应该如何设计,可以用使其既可以作为块级也可以作为内联元素呢。

其实,每个元素都有两个盒子,外在盒子和内在盒子(容器盒子)。外在盒子负责元素是一行显示,还是换行显示,内在盒子(容器盒子)负责元素的宽高以及内容呈现。

所以,按照display的属性值不同,值为block的元素盒子实际上是由外在的块级盒子和内在的块级容器盒子组成,值为inline-block的盒子是由外在的内联盒子和内在的块级容器盒子组成,值为inline的元素是由外在的内联盒子和内在的内联盒子组成。

2 width: auto

我们都知道,width的默认属性是auto,但是这个属性至少包含了以下4种不同的宽度表现:

  • 充分利用可用空间。比方说,<div><p>这些元素的宽度默认是父级容器的100%。
  • 收缩与包裹。典型代表就是浮动、绝对定位、inline-block元素或table元素。
  • 收缩到最小。这个最容易出现在table-layoutauto的表格中,当每一列的空间都不够的时候,文字就会换行,中文可以在文字任意处断,英文单词在每个词的时候断。
  • 超出容器限制。除非有明确的width相关设置,否则上面3种情况的宽度都不会主动超过父元素的宽度,但是有一些特殊情况,比如,内容很长的连续的英文和数字,或者内联元素被设置了white-space: nowrap,就会表现为子元素超出了父元素宽度。

CSS世界中,盒子分“内在盒子”和“外在盒子”,显示也分“内部显示”和“外部显示”,同样地,尺寸也分“内部尺寸”和“外部尺寸”。在上面的4中宽度表现中,只有第一种,div默认宽度100%显示,是外部尺寸,其余三种表现都是内部尺寸。

2.1 外部尺寸与流体特性

2.1.1 正常流宽度

当我们在一个容器中倒入一定量的水时,水一定会铺满整个容器,同样,在页面中放入一个div元素,这个div也会像水流一样铺满容器,这就是块级容器的特性。但是,表现为外部尺寸的块级元素一旦设置了宽度,这种流动性就消失了,这种流动性就是一种margin/border/padding/content自动分配水平空间的机制。

比如下面这个例子,两个导航均有marginpadding,一个没有width设置,一个width设置了100%,结果后者的尺寸超过了外部的容器,并没有完全利用容器空间:

<h4>无宽度,借助流动性</h4>
<div class="nav">
  <a href="" class="nav-a">导航1</a>
  <a href="" class="nav-a">导航2</a>
  <a href="" class="nav-a">导航3</a>
</div>
<h4>width:100%</h4>
<div class="nav">
  <a href="" class="nav-a width">导航1</a>
  <a href="" class="nav-a width">导航2</a>
  <a href="" class="nav-a width">导航3</a>
</div>
.width {
  width: 100%;
}
.nav {
  background-color: #cd0000;
}
.nav-a {
  display: block;
  margin: 0 10px;
  padding: 9px 10px;
  border-bottom: 1px solid #b70000;
  border-top: 1px solid #de3636;
  color: #fff;
}
.nav-a:first-child { border-top: 0; }
.nav-a + .nav-a + .nav-a { border-bottom: 0;}

在这里插入图片描述

2.1.2 格式化宽度

格式化宽度仅出现在绝对定位模型中,也就是出现在position属性值为absolutefixed的元素中。在默认情况下,绝对定位元素的宽度表现是“包裹性”,宽度由内部尺寸决定,对于非替换元素,当left/righttop/bottom对立方位的属性值同时存在的时候,元素的宽度表现为“格式化宽度”,其宽度大小相对于最近的具有定位特性(position属性值不是static)的祖先元素计算。

例如下面这段代码:

div {
  position: absolute;
  left: 20px;
  right: 20px;
}

假设该<div>元素最近的具有定位特性的祖先元素的宽度是100px,那么这个div的宽度就是60px(100 - 20 - 20)px。

2.2 内部尺寸与流体特性

所谓的内部尺寸,就是元素的尺寸是由内部元素决定的,而不是由外部的容器决定的。如果一个元素里面没有内容,宽度是0,那么这个元素就是内部尺寸。

内部尺寸有下面三种表现形式:

2.2.1 包裹性

包裹性除了包裹,还有自适应性。所谓的自适应性,就是元素尺寸由内部元素决定,但是永远小于包含块容器的尺寸,除非容器的尺寸小于元素的首选最小宽度。

比如说按钮,按钮元素通常会以以下两种形式出现在页面代码中:

<button>按钮</button>
<input type="button" value="按钮">

按钮是代表性的inline-block元素,当按钮文字越多时按钮宽度越宽,但是如果文字足够多,则会在容器的宽度处自动换行。

<div class="box">
  <button>按钮</button>
  <button>长一点的按钮</button>
  <button>超长的按钮超长的按钮超长的按钮超长的按钮超长的按钮超长的按钮超长的按钮</button>
</div>
.box {
  width: 240px;
}

在这里插入图片描述

2.2.2 首选最小宽度

首选最小宽度,指的是元素最适合的最小宽度。在上面例子中,外部容器的宽度是240px,假设宽度是0,里面的inline-block元素的宽度也不是0,此时里面的元素表现出来的就是首选最小宽度。

首选最小宽度具体表现规则如下:

  1. 中文最小宽度为每个汉字的宽度,例如:
<div class="demo">橘猫吃不胖</div>
.demo {
  width: 0;
  padding: 10px;
  background-color: pink;
}

在这里插入图片描述
2. 英文最小宽度由特定的连续的英文字符单元决定,一般会在空格(普通空格)、短横线、问号以及其他非英文字符等地方换行。比如<div class="demo">hello world</div>,就会在空格处换行,比如display:inline-block会在“-”处换行。
在这里插入图片描述
3、类似图片这样的替换元素的最小宽度就是该元素内容本身的宽度。

2.2.3 最大宽度

最大宽度就是元素可以有的最大宽度,如果内部没有块级元素或者块级元素没有设定宽度值,则“最大宽度”实际上是最大的连续内联盒子的宽度。

例如,下面是一段连续内联盒子demo:

<div>
  橘猫吃不胖
  <span>一个span标签</span>
  <button>一个button按钮</button>
  <br>
  换行了换行了换行了
  <p>又又又又又换行了</p>
</div>

在上面这段代码中,有3个连续内联盒子,如下所示:
在这里插入图片描述
运行上面的代码,我们会发现在最大宽度下,盒子最后的宽度就是第一个连续内联盒子的宽度。

3 height: 100%

heightwidth有一个比较明显的区别就是对百分比单位的支持不一样。对于width属性,如果父元素widthauto,也会支持百分比值;但是,对于height属性,如果父元素heightauto,只要子元素在文档流中,其百分比值完全就被忽略了。

我们有时会遇到这样的场景,我们在页面中插入一个div,想要满屏显示背景图,于是写了这样一段CSS:

div {
  width: 100%;
  height: 100%;
  background: url("xxx");
}

但是我们会发现,这个div的高度永远都是0,哪怕其父级<body>塞满了内容也是如此,因此我们还需要如下设置:

html, body {
  height: 100%;
}

并且,仅仅设置body的样式也是没有效果的,所以我们发现,对于普通文档流中的元素,百分比高度值要想起作用,其父级必须有一个可以生效的高度值。

那么,为什么height: 100%;会无效呢?

这是因为百分比高度的计算依赖于父元素的确切高度。当我们设置height: 100%;时,浏览器会尝试将子元素的高度设置为父元素的百分比高度。如果父元素的高度没有明确设置,浏览器无法计算百分比。
当父元素的高度未知时,百分比高度的计算就失去了参考依据。浏览器不知道要将百分比应用到多高,因此无法正确计算子元素的高度。

那为什么width: 100%;就不需要父元素宽度已知就可以生效呢?

这是因为在默认情况下,块级元素(如div)的宽度会自动扩展以填充其父元素的可用宽度,块级元素默认具有100%的宽度,当你设置width: 100%;时,子元素的宽度会相对于其包含块(即父元素)的宽度进行计算。

3.1 如何让元素支持height: 100%效果

有两种方法可以使元素支持height: 100%效果:

  • 设置显式的高度值,比如height: 800px,比如html, body { height: 100%; }
  • 使用绝对定位,例如div { position: absolute; height: 100%; },此时的height:100%就会有计算值,即使祖先元素的height计算为auto也是如此。

需要注意的是,绝对定位元素的百分比计算和非绝对定位元素的百分比计算是有区别的,区别
在于:绝对定位的宽高百分比计算会把padding大小值计算在内,但是,非绝对定位元素则是只会把content大小计算在内。

例如下面这个例子:

<div class="box">
  <div class="child">高度100px</div>
</div>
<div class="box1">
  <div class="child1">高度160px</div>
</div>
.box {
  height: 160px;
  padding: 30px;
  box-sizing: border-box;
  background-color: #beceeb;
}
.child {
  height: 100%;
  background-color: #cd0000;
}
.box1 {
  height: 160px;
  padding: 30px;
  box-sizing: border-box;
  background-color: #beceeb;
  position: relative;
}
.child1 {
  height: 100%;
  width: 100%;
  background-color: #cd0000;
  position: absolute;
}

在这里插入图片描述
在上面的例子中,第一个box的高度为160px,其子元素宽度和高度设置了100%,那么子元素的真实高度就是(160 - 30 - 30)px,100px正好为父元素content的高度,宽度是(父元素宽度 - 30 - 30)px。
第二个box1的高度也是160px,子元素宽度和高度也设置了100%,但是不同的是,子元素使用了绝对定位,那么这时子元素的高度就是160px,宽度和高度都是父元素content+padding的大小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1388416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

健康之钥:新生儿维生素K的呵护指南

引言&#xff1a; 维生素K&#xff0c;在新生儿的成长旅程中扮演着不可忽视的角色。它对于血液凝结和骨骼发育至关重要。本文将深入探讨维生素K的功能、补充时机&#xff0c;以及在给新生儿补充维生素K时应该注意的事项&#xff0c;为小天使们提供最贴心的呵护。 第一部分&…

动态内存面试的经典题目

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

大创项目推荐 深度学习疲劳驾驶检测 opencv python

文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 &#x1f525; 优…

Resize:最近邻插值、双线性插值、双三次插值

Resize&#xff1a;最近邻插值、双线性插值、双三次插值 Opencv resize函数1. 最近邻插值&#xff08;INTER_NEAREST&#xff09;1.1 原理1.2 代码实例1.3 简单的代码复现1.4 特点 2. 双线性插值&#xff08;INTER_LINEAR&#xff09;&#xff08;默认值&#xff09;2.1 原理2.…

Rust-解引用

“解引用”(Deref)是“取引用”(Ref)的反操作。取引用&#xff0c;我们有&、&mut等操作符&#xff0c;对应的&#xff0c;解引用&#xff0c;我们有操作符&#xff0c;跟C语言是一样的。示例如下&#xff1a; 比如说&#xff0c;我们有引用类型p:&i32;,那么可以用符…

[笔记]深度学习入门 基于Python的理论与实现(三)

代码仓库 gitee 3. 神经网络 神经网络的出现就是为了解决设定权重的工作&#xff0c;即机器自动从数据中学习&#xff0c;确定合适的、能符合预期的输入与输出的权重。 3.1 从感知机到神经网络 神经网络和感知机有很多共同点&#xff0c;这里主要介绍差异 3.1.1 神经网络例子…

数据库|数据库范式(待完成)

文章目录 数据库的范式数据库的基本操作什么是数据库的范式产生的背景&#xff08;没有规范化的坏处/带来的问题&#xff09;规范化表格设计的要求五大范式的作用——树立标准打个比方——桥的承载能力1NF&#xff08;1范式&#xff09;如何转换成合适的一范式 2NF&#xff08;…

Flask 项目怎么配置并创建第一个小项目?附上完成第一个小案例截图

目录 1. 为什么要学习 flask&#xff1f; 2. flask 是什么&#xff1f; 3. flask 如何使用&#xff1f; 要安装 Flask&#xff0c;可以按照以下步骤进行&#xff1a; 4. 使用流程 4.1. 新建项目 4.1.1. 打开 pycharm&#xff0c;新建项目 4.1.2. 设置目录&#xff0c;并…

centos7 arm服务器编译安装PaddlePaddle

前言 随着国产服务器发展&#xff0c;部署项目需要用在国产服务器上&#xff0c;官方教程里面很多没有讲解到&#xff0c;安装过程中出现了各种各样的问题&#xff0c;以下是对官方教程的补充&#xff0c;有什么问题&#xff0c;欢迎指正&#xff01; 一、环境准备 gcc: 8.2版…

Python 网络编程之TCP详细讲解

【一】传输层 【1】概念 传输层是OSI五层模型中的第四层&#xff0c;负责在网络中的两个端系统之间提供数据传输服务主要协议包括**TCP&#xff08;传输控制协议&#xff09;和UDP&#xff08;用户数据报协议&#xff09;** 【2】功能 **端到端通信&#xff1a;**传输层负责…

数学建模-预测人口数据

目录 中国09~18年人口数据 创建时间 绘制时间序列图 使用专家建模器 得到结果 预测结果 残差的白噪声检验 中国09~18年人口数据 创建时间 路径&#xff1a;数据-> 定义日期和时间 绘制时间序列图 使用专家建模器 看看spss最终判断是那个模型最佳的契合 得到结果 预…

什么是NTFS格式文件系统?Tuxera NTFS for Mac2024下载步骤

一般磁盘格式分为&#xff1a;FAT、FAT32、NTFS&#xff0c;这几种格式目前是我们最常遇到的文件系统格式&#xff0c;其中现在遇到最多的就是NTFS格式&#xff0c;为更好地了解这类文件系统格式&#xff0c;小编今天专门介绍一下什么是NTFS格式文件系统以及它的特点和局限性。…

网络安全ctf比赛/学习资源整理,【解题工具、比赛时间、解题思路、实战靶场、学习路线】推荐收藏!

对于想学习或者参加CTF比赛的朋友来说&#xff0c;CTF工具、练习靶场必不可少&#xff0c;今天给大家分享自己收藏的CTF资源&#xff0c;希望能对各位有所帮助。 CTF在线工具 首先给大家推荐我自己常用的3个CTF在线工具网站&#xff0c;内容齐全&#xff0c;收藏备用。 1、C…

Chapter 10 类的继承(上篇)

目的&#xff1a;了解三种继承方式&#xff0c;并清楚其中的差别 &#x1f383;&#x1f383;&#x1f383;&#x1f383;&#x1f383;&#x1f383;&#x1f383;&#x1f383;&#x1f383;&#x1f383;&#x1f383;&#x1f383;&#x1f383;&#x1f383;&#x1f383;…

【JVM】垃圾回收 GC

一、前言 垃圾回收&#xff08;Garbage Collection&#xff0c;GC&#xff09;是由 Java 虚拟机&#xff08;JVM&#xff09;垃圾回收器提供的一种对内存回收的一种机制&#xff0c;它一般会在内存空闲或者内存占用过高的时候对那些没有任何引用的对象不定时地进行回收。以避免…

imgaug库指南(26):从入门到精通的【图像增强】之旅(万字长文!)

引言 在深度学习和计算机视觉的世界里&#xff0c;数据是模型训练的基石&#xff0c;其质量与数量直接影响着模型的性能。然而&#xff0c;获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此&#xff0c;数据增强技术应运而生&#xff0c;成为了解决这一问题的…

在uni-app中使用sku插件,实现商品详情页规格展示和交互。

商品详情 - SKU 模块 学会使用插件市场&#xff0c;下载并使用 SKU 组件&#xff0c;实现商品详情页规格展示和交互。 存货单位&#xff08;SKU&#xff09; SKU 概念 存货单位&#xff08;Stock Keeping Unit&#xff09;&#xff0c;库存管理的最小可用单元&#xff0c;通…

电子签章服务器,如何解决无纸化最后一公里?

钉钉、飞书、企微、OA、ERP等主流企业办公系统&#xff0c;无法实现电子签章&#xff0c;往往审批后还要将合同文件打印出来再进行签章。实现无纸化办公的这最后一公里就成了难题。电子签章服务器的出现&#xff0c;提供了完美的解决方案。本文将从专业角度&#xff0c;探讨电子…

大模型压缩与优化的技术原理与创新方法

目录 前言1 模型压缩简介2 知识蒸馏3 模型剪枝3.1 结构化剪枝3.2 非结构化剪枝 4 模型量化4.1 浮点表示 vs 定点表示4.2 位数选择与性能影响4.3 量化技术 5 其他模型压缩方法5.1 Weight Sharing: 参数共享5.2 Low-rank Approximation: 低秩分解5.3 Architecture Search: 神经网…

C++ 设计模式之观察者模式

【声明】本题目来源于卡码网&#xff08;题目页面 (kamacoder.com)&#xff09; 【提示&#xff1a;如果不想看文字介绍&#xff0c;可以直接跳转到C编码部分】 【设计模式大纲】 前面的文章介绍了创建型模式和结构型模式&#xff0c;今天开始介绍行为型模式。 【简介】什么是…