首页 > 其他分享 >css 盒模型

css 盒模型

时间:2024-10-07 23:22:41浏览次数:1  
标签:块级 盒子 模型 元素 padding 内联 margin css

目录

css 盒模型的组成

在css中,所有的元素都被一个个的盒子(box)包围着,理解这些盒子的基本原理,是我们使用css实现准确布局,处理元素排列的关键

盒子的组成:

  • content内容
  • padding内填充
  • border边框
  • margin外边距

box-model

box-model

css盒模型的注意点

  • padding不能为负值,margin可以为负值
  • 背景色会平铺到非margin的区域,包含border,padding,content
  • margin-top传递的现象及解决方案
  • margin 上下叠加的的现象及解决方案

现象描述

  • 当两个块级元素上下排列时,它们之间的 margin-topmargin-bottom 不会叠加,而是取其较大的值。
  • 如果一个块级元素的 margin-top 和父元素的 margin-bottom 直接相邻,它们也会合并。
  • 甚至一个元素的 margin-top 可能会与其父元素的 margin-top 合并,从而产生 “传递” 的效果,看起来像是子元素的 margin-top 影响了父元素。

原因

CSS的标准规定,块级元素的垂直方向 margin 会发生折叠,这是垂直外边距合并的效果。它通常出现在以下情况下:

  1. 相邻的块级元素:相邻块级元素的上下外边距合并。
  2. 空白块级元素:如果一个块级元素内没有其他内容,它的 margin-topmargin-bottom 会合并。
  3. 父子元素关系:如果子元素是父元素中的第一个子元素,它的 margin-top 可能会与父元素的 margin-top 合并。

解决方案

1. 使用 padding 代替 margin

padding 不会像 margin 一样合并,可以用 padding 代替来避免折叠。

.parent {
  padding-top: 50px;  /* 使用 padding 而非 margin */
}
2. 使用 overflow: hidden; 或其他非 visible 的值

将父元素的 overflow 设置为 hiddenauto,可以防止子元素的 margin 传递到父元素。

.parent {
  overflow: hidden;
}
3. 使用 borderpadding 阻止合并

如果父元素没有 paddingbordermargin 合并会发生。即使给父元素设置一个1px的边框或少量 padding,也可以阻止合并。

.parent {
  border: 1px solid transparent;  /* 设置一个透明的边框 */
}
4. 使用 display: flow-root;(CSS中的BFC)

将父元素设置为 块格式化上下文(BFC) 可以阻止 margin 折叠。你可以通过设置 display: flow-root; 来创建一个新的 BFC。

.parent {
  display: flow-root;
}
5. 使用 position 定位

如果元素的 position 设置为 absoluterelative,它的 margin 不会与其他元素合并。

.parent {
  position: relative;
}

块级盒子(Block Box)

块级元素默认生成块级盒子,这类盒子会占据其父容器的整个宽度,并且每一个块级元素都会独占一行

特点

  1. 独占一行:块级盒子总是从新行开始,其他元素会被排列到它的下面。
  2. 宽度自动填充:默认情况下,块级元素的宽度会自动填充其父容器的宽度,除非手动设置宽度。
  3. 可以包含块级和内联元素:块级盒子可以容纳其他块级元素,也可以包含内联元素。
  4. 可设置宽度和高度:块级盒子可以通过 widthheight 属性来定义其宽高。
  5. 常见的块级元素
    • <div><p><h1>-<h6><section><header> 等。

例子

<style>
  .block-box {
    width: 50%;
    background-color: lightblue;
    margin-bottom: 20px;
  }
</style>

<div class="block-box">我是块级盒子1</div>
<div class="block-box">我是块级盒子2</div>

在这个例子中,每个 div 都是一个块级盒子,占据父容器50%的宽度,并且各自独占一行。

内联盒子(Inline Box)

内联元素生成内联盒子,通常用于包装文本或小的内容。内联盒子不会独占一行,它们会在一行内顺序排列,直到无法容纳更多为止。

特点

  1. 不独占一行:内联元素在一行内排列,不会换行,除非内容溢出到父容器的宽度。
  2. 宽高由内容决定:内联盒子的宽度和高度由其内容决定,不能像块级元素那样通过 widthheight 设置尺寸。
  3. 只影响内容周围的区域:内联元素的 paddingmarginborder 只会影响元素的内容区域,不能影响元素上下的内容布局(即不会增加行高)。
  4. 常见的内联元素
    • <span><a><strong><em><img> 等。

例子

<style>
  .inline-box {
    background-color: yellow;
    padding: 5px;
    margin: 10px;
  }
</style>

<p>
  这是一个段落中的 <span class="inline-box">内联盒子1</span> 和 <span class="inline-box">内联盒子2</span>。
</p>

在这个例子中,<span> 元素是内联盒子,它们不会独占一行,而是和文本混排在同一行。

块级盒子与内联盒子的区别

特性 块级盒子 (Block Box) 内联盒子 (Inline Box)
布局行为 独占一行 与其他元素排列在同一行
宽度 默认占满父容器的宽度 宽度由内容决定
高度 可以手动设置 height 高度由内容决定,不能手动设置
可包含的内容 可以包含块级和内联元素 通常只包含文本或其他内联元素
常见元素 <div>, <p>, <section>, <header>, <h1>-<h6> <span>, <a>, <strong>, <em>, <img>
影响布局的方式 会影响上下文的其他元素布局 不会影响上下文其他元素的布局
设置宽高 可以设置 widthheight widthheight 无法生效

CSS中转换块级和内联显示

通过 display 属性,块级元素和内联元素可以互相转换:

  • 将内联元素转换为块级元素

    .inline-to-block {
      display: block;
    }
    
  • 将块级元素转换为内联元素

    .block-to-inline {
      display: inline;
    }
    

例子

<style>
  .block-to-inline {
    display: inline;
    background-color: lightblue;
  }

  .inline-to-block {
    display: block;
    background-color: yellow;
  }
</style>

<div class="block-to-inline">块级元素变为内联元素</div>
<span class="inline-to-block">内联元素变为块级元素</span>

在这个例子中,通过 display 属性的设置,可以改变元素的默认展示方式。

  • 块级盒子用于占据整个行的布局,并适合结构化页面内容,如段落和容器。
  • 内联盒子则用于在一行中排列小的内容,如文本或图标。
    通过 display 属性,块级盒子和内联盒子可以互相转换,根据页面设计的需要来灵活布局。

Content-box 盒模型(默认的盒模型,标准盒模型)

content-box 模型中,widthheight 指的是内容区域的宽高,而 paddingborder 是额外计算的部分。

总宽度计算公式

总宽度 = 内容宽度 + 左右 padding + 左右 border + 左右 margin

总高度计算公式

总高度 = 内容高度 + 上下 padding + 上下 border + 上下 margin

Border-box 盒模型(怪异盒模型)

border-box 模型中,widthheight 包含了 paddingborder,因此不需要额外加上这两个部分。

总宽度计算公式

总宽度 = 设定的 width(包含 padding 和 border) + 左右 margin

总高度计算公式

总高度 = 设定的 height(包含 padding 和 border) + 上下 margin

总结对比

盒模型 总宽度计算公式 总高度计算公式
Content-box 总宽度 = 内容宽度 + 左右 padding + 左右 border + 左右 margin 总高度 = 内容高度 + 上下 padding + 上下 border + 上下 margin
Border-box 总宽度 = 设定的宽度 + 左右 margin 总高度 = 设定的高度 + 上下 margin

选择使用 content-box 还是 border-box 取决于你的布局需求。border-box 更适合自适应布局,因为你不需要手动调整宽度来考虑 paddingborder 的影响。

浮动样式详解

当元素被浮动时,会脱离文档流,根据float的值向左或向右移动,直到它的外边界碰到父元素的内边界或另一个浮动元素的外边界上,是css布局中实现左右布局的一种方式

文档流: 文档流是元素在web界面上的一种显现方式,按照出现的先后顺序进行排列

清除浮动方案

清除浮动是解决父元素高度塌陷问题的常用方法

1. 使用清除浮动的伪元素(clearfix)

这种方法是通过在父元素中添加一个伪元素来清除浮动。伪元素会创建一个新的块级上下文,使父元素能够计算其高度。

.box {
    width: 400px;
    border: 1px solid black;
}

.box::after {
    content: "";  /* 创建伪元素 */
    display: table;  /* 设置为块级元素 */
    clear: both;     /* 清除浮动 */
}

2. 使用 overflow 属性

给父元素添加 overflow 属性(如 overflow: auto;overflow: hidden;),这样父元素就会扩展以包含浮动子元素。

.box {
    width: 400px;
    border: 1px solid black;
    overflow: auto;  /* 清除浮动 */
}

3. 使用 clearfix

在项目中定义一个 .clearfix 类,以便于复用。可以将其应用于任何需要清除浮动的元素。

.clearfix::after {
    content: "";  
    display: table;  
    clear: both;     
}

4. 使用 Flexbox 布局

Flexbox 是现代布局技术,可以轻松处理浮动问题。它会自动调整父元素的高度,以包含所有子元素。

.box {
    display: flex;  /* 设置为 Flexbox 布局 */
    width: 400px;
    border: 1px solid black;
}

css浮动需要注意的点

  1. 脱离文档流:浮动元素不占据父元素高度,导致高度塌陷。解决方法:clearclearfixoverflow: hidden;
  2. 浮动后的元素行为:后续元素会围绕浮动元素。解决方法:使用 clear 控制。
  3. 宽度问题:未指定宽度时,浮动元素会收缩到内容宽度。
  4. 父元素高度塌陷:使用 clearfixoverflow: hidden; 解决。
  5. 布局复杂性:浮动适合小规模布局,推荐使用 Flexbox 或 Grid 进行复杂布局。

浮动用于局部布局,避免用于复杂的页面结构。

定位样式详解

css position属性用于指定一个元素在文档中的定位方式,其中top,right,bottom,left属性则决定该元素的最终位置

graph TD; Position --> Static; Position --> Relative; Position --> Absolute; Position --> Fixed; Position --> Sticky;

相对定位及特性

标签:块级,盒子,模型,元素,padding,内联,margin,css
From: https://www.cnblogs.com/anyux/p/18450828

相关文章

  • 强化学习的理论分析和实际模型性能间的差距
    强化学习中的理论分析可以分为两种,第一种就是完全的理论模型推导;第二种则是举个例子,用一个自我构造出的MDP过程来作为说明的例子,然后根据这个例子推导出的效果来说明理论有效性,这其中可以包括收敛性证明,相同最优策略证明,等等。这两种理论证明的方式看似第一种比第二种更高大上,更......
  • 大模型配置学习
    为什么在import里有一个GPT2,然后,在代码里面又有一个frompretrainedgpt2在import部分引入了GPT2Model后,在代码中使用GPT2Model.from_pretrained("gpt2")来加载预训练的模型。这样做的原因是,import只是引入了GPT2Model这个类,它提供了GPT-2的模型定义。而from_pretrai......
  • CSS盒子
    1.width,height宽度高度。<!DOCTYPEhtml><html> <head> <title>WidthHeight</title> <styletype="text/css"> body{ font-family:Arial,Verdana,sans-serif; color:#111111;} div{ width:400px;......
  • 一书讲透LLM大语言模型,《掌握大型语言模型》,看完我都懵了!
    《掌握大型语言模型》(MasteringLargeLanguageModels)由SanketSubhashKhandare撰写,是一本关于大型语言模型(LLMs)的高级技术、应用、前沿方法和顶尖模型的指南。这本大模型书已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】这......
  • 面试攻略:精选50道大模型关键问题
    我精选50个大模型高频面试题,分享给大家简述GPT和BERT的区别讲一下GPT系列模型是如何演进的?为什么现在的大模型大多是decoder-only的架构?讲一下生成式语言模型的工作机理哪些因素会导致LLM的偏见?LLM中的因果语言建模与掩码语言建模有什么区别?如何减轻LLM中的幻觉现象?解释Cha......
  • css选择器用法
    1.元素选择器(标签选择器)元素名称{} 2类选择器以点开头{}3.id选择器器以#号开头4.后代选择器空格分隔5.子类选择器>大于号分隔6.相邻兄弟选择器+连接选择与指定元素在同一层级且紧接在它后面的元素(只有一个)。h2+......
  • 隆平高科:全基因组选择模型在长江流域籼稻育种中取得成效
    2024年9月18日,袁隆平农业高科技股份有限公司(以下简称“隆平高科”)发布投资者关系活动记录表显示,公司全面熟化运用水稻商业化育种信息化系统,进一步提升分子育种信息化,升级规范化、标准化的基因型鉴定流程和实验室信息管理系统,研发的全基因组选择模型已在长江流域杂交中籼水稻育种中......
  • C++ 对象模型
    对象的内存布局非虚函数类对象对于不包含虚函数的类,对象的内存布局相对简单,其成员变量按照声明的顺序依次存储。例如:classSimpleClass{private:intnum;doubled;public:SimpleClass(intn,doubledd):num(n),d(dd){}};在SimpleClass对象的内存......
  • css核心
    1.属性值的计算过程是指任何一个html元素,它从所有的css属性都没有值,到所有的css属性都有值,它需要一个计算过程,这个就是属性值的计算过程2.视觉格式化模型是指页面中多个盒子的排列规则,俗称布局规则1》普通流包含块:大多数情况下,包含块就是父元素的内容盒,......
  • 大模型~合集7
    我自己的原文哦~  https://blog.51cto.com/whaosoft/11566532# 语言模型是否会规划未来tokenTransformer本可以深谋远虑,但就是不做,语言模型是否会规划未来token?这篇论文给你答案。「别让YannLeCun看见了。」YannLeCun表示太迟了,他已经看到了。今天要介绍的这篇......