7(8)-2-CSS 盒子模型

news2025/1/20 22:45:18

个人主页:学习前端的小z
个人专栏:HTML5和CSS3悦读
本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论!


文章目录

  • CSS 盒子模型
    • 1 盒子模型(Box Model)组成
    • 2 边框(border)
    • 3 内边距(padding)
    • 4 外边距(margin)
      • 4.1 外边距典型应用
      • 4.2 外边距合并
      • 4.3 相邻块元素垂直外边距的合并
      • 4.4 嵌套块元素垂直外边距的塌陷
    • 5 清除内外边距
    • 6 单行文字垂直居中
    • 7 怪异盒子模型
  • 附:CSS margin与text-align居中的区别

CSS 盒子模型

页面布局三大核心,盒子模型浮动定位

在这里插入图片描述
在这里插入图片描述

网页布局过程:

  • 从大到小,大盒子包小盒子
  • 从外到里,从全局到局部
  • 先准备好相关的网页元素,网页元素基本都是盒子
  • 利用 CSS 设置好盒子样式,然后摆放到相应位置
  • 往盒子里面装内容
  • 网页布局的核心本质: 就是利用 CSS 摆盒子

1 盒子模型(Box Model)组成

所谓盒子模型:就是把 HTML 页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器。

CSS 盒子模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边框、外边距、内边距、和 实际内容

在这里插入图片描述

内容宽度/高度使用属性:width / height

盒模型宽度和高度和我们平常所说的物体的宽度和高度理解是不一样的,css内定义的宽(width)和高(height),指的是填充以里的内容范围。

因此一个元素实际宽度(盒子的宽度)=左边界+左边框+左填充+内容宽度+右填充+右边框+右边界。

在这里插入图片描述

元素的高度也是同理。

2 边框(border)

border可以设置元素的边框。边框有三部分组成:边框宽度(粗细) 边框样式 边框颜色

语法:

border : border-width || border-style || border-color
  • border-width:定义边框粗细,单位是px
  • border-style:边框样式
    • none:没有边框即忽略所有边框的宽度(默认值)
    • solid:边框为单实线(最为常用的)
    • dashed:边框为虚线
    • dotted:边框为点线
  • border-color:边框颜色

边框简写:

border: 1px solid red;

边框分开写法:

border-top: 1px solid red;

请给一个 200*200 的盒子,设置上边框为红色,其余边框为蓝色。

border影响了盒子实际大小,如果盒子已经有了宽度和高度,此时再指定边框,会撑大盒子。

3 内边距(padding)

padding 属性用于设置内边距,即边框与内容之间的距离。

  • padding-left:左内边距
  • padding-right:右内边距
  • padding-top:上内边距
  • padding-bottom:下内边距

padding 属性(简写属性)可以有一到四个值。

  • padding: 5px:1个值,代表上下左右都有5像素内边距;
  • padding: 5px 10px:2个值,代表上下内边距是5像素 左右内边距是10像素;
  • padding: 5px 10px 20px:3个值,代表上内边距5像素 左右内边距10像素 下内边距20像素;
  • padding: 5px 10px 20px 30px:4个值,上是5像素右10像素下20像素左是30像素 顺时针;

当我们给盒子指定 padding 值之后,发生了 2 件事情:

  1. 内容和边框有了距离,添加了内边距。
  2. padding影响了盒子实际大小。

如果盒子已经有了宽度和高度,此时再指定内边距,会撑大盒子。

**解决方案:**如果保证盒子跟效果图大小保持一致,则让 width/height 减去多出来的内边距大小即可。

如何盒子本身没有指定width/height属性, 则此时padding不会撑开盒子大小。

4 外边距(margin)

margin 属性用于设置外边距,即控制盒子和盒子之间的距离。

  • margin-left:左外边距
  • margin-right:右外边距
  • margin-top:上外边距
  • margin-bottom:下外边距

margin 简写方式代表的意义跟 padding 完全一致。

4.1 外边距典型应用

外边距可以让块级盒子水平居中,但是必须满足两个条件:

  • 盒子必须指定了宽度(width)。
  • 盒子左右的外边距都设置为 auto 。
.header{ width:960px; margin:0 auto;}

常见的写法,以下三种都可以:

  • margin-left: auto; margin-right: auto;
  • margin: auto;
  • margin: 0 auto;,常用

**注意:**以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中给其父元素添加 text-align:center 即可

4.2 外边距合并

使用 margin 定义块元素的垂直外边距时,可能会出现外边距的合并。

主要有两种情况:

  1. 相邻块元素垂直外边距的合并
  2. 嵌套块元素垂直外边距的塌陷

4.3 相邻块元素垂直外边距的合并

当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距 margin-bottom,下面的元素有上外边距 margin-top ,则他们之间的垂直间距不是 margin-bottom 与 margin-top 之和。取两个值中的较大者这种现象被称为相邻块元素垂直外边距的合并

在这里插入图片描述

**解决方案:**尽量只给一个盒子添加 margin 值。

4.4 嵌套块元素垂直外边距的塌陷

针对于父子盒子的上外边距问题,正正取大,正负取和,负负取小

对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。

解决方案:

  • 可以为父元素定义上边框。
  • 可以为父元素定义上内边距。
  • 可以为父元素添加 overflow:hidden。
  • 还有其他方法,比如浮动、固定,绝对定位的盒子不会有塌陷问题,涉及到BFC,后面再讲解。

5 清除内外边距

网页元素很多都带有默认的内外边距,而且不同浏览器默认的也不一致。因此我们在布局前,首先要清除下网页元素的内外边距。

* {
    padding:0; /* 清除内边距 */
    margin:0; /* 清除外边距 */
 }

**注意:**行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距(无效)。但是转换为块级和行内块元素就可以了。

6 单行文字垂直居中

让文字的行高等于盒子的高度,可以让文字在当前盒子内垂直居中

在这里插入图片描述

这时候盒子的高度为100px,行高的上行间距和下行间距把文字挤到中间了。

如果行高小于盒子高度,文字会偏上,如果行高大于盒子高度,则文字偏下。

7 怪异盒子模型

CSS3 中可以通过 box-sizing 来指定盒模型,有2个值:即可指定为 content-box、border-box,这样我们计算盒子大小的方式就发生了改变。

可以分成两种情况:

  1. box-sizing: content-box 盒子大小为 width + padding + border (以前默认的)
  2. box-sizing: border-box 盒子大小为 width

如果盒子模型我们改为了box-sizing: border-box , 那padding和border就不会撑大盒子了(前提padding和border不会超过width宽度)

怪异盒子模型(box-sizing: border-box),也叫做内减盒模型,或者IE 盒子模型,我们可以通过 css 样式 box-sizing 来进行切换

select {
  box-sizing: border-box; /* 怪异盒子模型,内减盒子模型 */
  box-sizing: content-box; /* 标准盒子模型 */
}

内减盒子模型的 宽度 高度计算 和标准盒子模型计算方式不同。

怪异盒子模型的 content 内容宽度会把 padding 和 border 算入其中,是由外而内的计算宽度。

怪异盒子模型当内减到负数的时候,那么表现形式和标准盒子模型差不多。

两种盒子模型区别

主要区别在于盒子的整体宽度高度计算方式不同

  1. 原理:正常盒模型的大小是由内到外的,由内部决定外部的大小;而怪异盒模型是由外而内的。
  2. 可以同时设置 box-sizing 属性来使用这一特性,是其改变 border 宽度也不影响其他元素;
  3. box-sizing:简单理解就是盒子大小基于什么计算的;

附:CSS margin与text-align居中的区别

1、margin: 0 auto只针对块级居中,对行内标签元素和行内块标签元素(含有inline)的无效。

2、父级加text-align: center ,对子级的文本或者行内标签元素和行内块标签元素(含有inline)进行居中,

对子级块级无效,由于继承性,子级块级如果没有重置text-align,子级块级孙子含有inline是有效的。

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

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

相关文章

Git 如何去使用

目录 1. Git暂存区的使用 1.1. 暂存区的作用 1.2. 暂存区覆盖工作区(注意:完全确认覆盖时使用) 1.3. 暂存区移除文件 1.4. 练习 2. Git回退版本 2.1. 概念 2.2. 查看提交历史 2.3. 回退命令 2.4. 注意 3. Git删除文件 3.1. 需求 …

docker安装Nexus,maven私服

文章目录 前言安装创建文件夹设置文件夹权限docker创建指令制作docker-compose.yaml文件 查看网站访问网页查看密码 前言 nexus作为私服的maven仓库,在企业级应用中,提供了依赖来源的稳定性,为构建庞大的微服务体系,打下基础 安…

Day83:服务攻防-开发组件安全JacksonFastJson各版本XStreamCVE环境复现

目录 J2EE-组件Jackson-本地demo&CVE 代码执行 (CVE-2020-8840) 代码执行 (CVE-2020-35728&#xff09; J2EE-组件FastJson-本地demo&CVE FastJson < 1.2.24 FastJson < 1.2.47 FastJson < 1.2.80 (利用条件比较苛刻) J2EE-组件XStream-靶场&CVE …

Java_自定义实体类的列表List<T>调用remove()失败讲解

示例1 前提&#xff1a; 新建一个主类Demo1。 需求&#xff1a; 在一个列表中有三条String的数据&#xff0c;想要使用remove(Object o)删掉其中一条。 结果&#xff1a; remove(Object o)成功把数据删掉。 示例2 前提&#xff1a; 新建一个自定义实体类DataExample和一个主…

PC发送指令给单片机控制LED(与上一篇文章相反)

此时要重新配置寄存器 &#xff0c;实现电脑往单片机传输数据 1、配置SCON寄存器的REN 即 REN 1 2、有TI&#xff08;发送中断&#xff09;就有RI&#xff08;接收中断&#xff09; 3、优化 发现发送 o 时&#xff0c;D5亮灯会有延迟 下面就是做到真正的无延迟的全双工通信 …

STC89C51学习笔记(四)

STC89C51学习笔记&#xff08;四&#xff09; 综述&#xff1a;本文讲述了在STC89C51中数码管、模块化编程、LCD1602的使用。 一、数码管 1.数码管显示原理 位选&#xff1a;对74HC138芯片的输入端的配置&#xff08;P22、P23、P24&#xff09;&#xff0c;来选择实现位选&…

Android 代码自定义drawble文件实现View圆角背景

简介 相信大多数Android开发都会遇到一个场景&#xff0c;给TextView或Button添加背景颜色&#xff0c;修改圆角&#xff0c;描边等需求。一看到这样的实现效果&#xff0c;自然就是创建drawble文件&#xff0c;设置相关属性shap&#xff0c;color&#xff0c;radius等。然后将…

第二节课《轻松玩转书生·浦语大模型趣味 Demo》

比较匆忙&#xff0c;假期前仿照第一期课程的内容好像被清空了&#xff0c;重新搭建一次。 https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md 按照那老师写好的&#xff0c;一步步复制就好了 浦语灵笔2的大概率是会超出显存&#xff0c;先不测试了…

JavaScript权威指南(第7版) 笔记 - 扩展操作符总结

扩展操作符 ... &#xff0c;不是真正意义上的JavaScript操作符。 let str "0123ABC" console.log(typeof ...str);// Uncaught SyntaxError: Unexpected token ... 上面的第2行代码会报错&#xff0c;… 操作符只能在数组字面量、对象字面量、函数调用中使用。 在…

JS详解-设计模式

工厂模式&#xff1a; 单例模式&#xff1a; // 1、定义一个类class SingleTon{// 2、添加私有静态属性static #instance// 3、添加静态方法static getInstance(){// 4、判断实例是否存在if(!this.#instance){// 5、实例不存在&#xff0c;创建实例this.#instance new Single…

Redis从入门到精通(七)Redis实战(四)库存超卖、一人一单与Redis分布式锁

↑↑↑请在文章开头处下载测试项目源代码↑↑↑ 文章目录 前言4.3 优惠券秒杀4.3.4 库存超卖问题及其解决4.3.4.1 问题分析4.3.4.2 问题解决 4.3.5 一人一单需求4.3.5.1 需求分析4.3.5.2 代码实现4.3.5.3 并发问题4.3.5.4 悲观锁解决并发问题4.3.5.5 集群环境下的并发问题 4.3.…

C语言【编译和链接】

1.程序执行过程 C语言的编译和链接是将源代码转换为可执行程序的过程。下面是C语言编译和链接的基本步骤&#xff1a; 预处理&#xff1a;在编译前&#xff0c;预处理器会对源代码进行。它会处理以"#"开头的预处理指令&#xff0c;#include和#define&#xff0c;并将…

【浅尝C++】继承机制=>虚基表/菱形虚继承/继承的概念、定义/基类与派生类对象赋值转换/派生类的默认成员函数等详解

&#x1f3e0;专栏介绍&#xff1a;浅尝C专栏是用于记录C语法基础、STL及内存剖析等。 &#x1f3af;每日格言&#xff1a;每日努力一点点&#xff0c;技术变化看得见。 文章目录 继承的概念及定义继承的概念继承的定义定义格式继承关系与访问限定符 基类和派生类对象赋值转换继…

CSS样式计算

目录 用户代理样式表确认声明值层叠冲突重要性权重源次序 继承使用默认值关于a元素不能继承的问题 在网页中&#xff0c;每个 元素都有着许多 CSS属性&#xff0c;有些 属性我们对其 声明并赋值&#xff0c;有些 属性则没有&#xff0c;我们可能会想当然的以为一个 元素会…

如果在 Ubuntu 系统中两个设备出现两个相同的端口号解决方案

问题描述&#xff1a; 自己的移动机器人在为激光雷达和IMU配置动态指定的端口时&#xff0c;发现激光雷达和深度相机配置的 idVendor 和 idProduct 相同&#xff0c;但是两个设备都具有不同的ttyUSB号&#xff0c;如下图所示 idVendor&#xff1a;代表着设备的生产商ID,由USB设…

Vuex(vue 项目中实现 频繁、大范围数据共享的技术方案)

参考文档(点击查看) 好处 1.数据的存取一步到位&#xff0c;不需层层传递 2.数据的流动非常清晰 3.存储在Vuex中的数据都是响应式的&#xff08;数据更新后&#xff0c;使用数据的组件都会自动更新&#xff09; Vuex基础配置 npm i vuex3.6.2state中用来存储数据&#xff0c…

如何客观评价5G的现状?

前几天&#xff0c;在知乎上看到一个帖子&#xff0c;热度挺高&#xff1a; 看了一下帖子的回答&#xff0c;基本上都在骂5G。 作为通信行业从业者&#xff0c;我说说我自己的看法。大家姑且听听&#xff0c;一起交流一下。 我们目前所处的这个时代&#xff0c;有一个很大的特点…

移动Web学习05-移动端适配Less预处理器

7、移动端适配 7.1、什么是适配&#xff1f; 简单理解就是、同一个网页&#xff0c;在不同屏幕分辨率的设备下、显示还是一样的&#xff0c;你可以理解为、网页当中的图片&#xff0c;盒子之间的距离、文字的大小、随着屏幕分辨率的变化而变化 前面我们学习了flex布局的方式…

Web大并发集群部署之集群介绍

一、传统web访问模型 传统web访问模型完成一次请求的步骤 1&#xff09;用户发起请求 2&#xff09;服务器接受请求 3&#xff09;服务器处理请求&#xff08;压力最大&#xff09; 4&#xff09;服务器响应请求 传统模型缺点 单点故障&#xff1b; 单台服务器资源有限&…

excel统计分析——多元线性回归

参考资料&#xff1a;生物统计学 多元线性回归&#xff08;multiple linear regression&#xff09;是具有一个因变量或多个&#xff08;两个或以上&#xff09;自变量的线性回归&#xff0c;是直线回归的拓展&#xff0c;其模型和计算过程与直线回归类似&#xff0c;只是在计算…