【web前端开发】超详细讲解CSS盒子模型

news2024/11/20 10:43:19

文章目录

  • 1.盒子模型介绍
  • 2.内容
  • 3.边框
  • 4.内边距
  • 5.⭐盒子大小计算
  • 6.⭐内减模式
  • 7.外边距
    • 外边距的合并
    • 外边距的塌陷
    • 行内元素的垂直外边距
  • 8.⭐清除默认样式
  • 9.⭐版心居中

1.盒子模型介绍

所有HTML元素可以看作盒子,CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。
盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。

盒子模型结构图:
在这里插入图片描述

  • Margin(外边距) - 清除边框外的区域,外边距是透明的。
  • Border(边框) - 围绕在内边距和内容外的边框。
  • Padding(内边距) - 清除内容周围的区域,内边距是透明的。
  • Content(内容) - 盒子的内容,显示文本和图像。

2.内容

作用:利用width和height属性设置内容区域的大小,默认是盒子内容区域的大小
属性值:width和height
取值:数字+px

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
      div {
          width: 200px;
           width: 200px;
      }
    </style>
</head>
<body>
    <div>这是一个div</div>
</body>
</html>

在浏览器中按F12进行检查,就可以看到盒子的内容区域正是我设置的 width: 200px; width: 200px;
在这里插入图片描述

3.边框

属性名:border (这是一个复合属性)
属性值:数字+px 线条的种类 颜色(不分先后顺序)

线条的种类有两个最常用的: solid(实线) dashed(虚线)
示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
      div {
          width: 200px;
          height: 120px;
          border: 10px solid red;
      }
    </style>
</head>
<body>
    <div>这是一个div</div>
</body>
</html>

效果:
在这里插入图片描述

border也可以给指定的方向设置边框

写法:border-方位名词
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
      div {
          width: 200px;
          height: 120px;
          border-left: 3px solid red;
      }
    </style>
</head>
<body>
    <div>这是一个div</div>
</body>
</html>

效果:
在这里插入图片描述

4.内边距

属性名:padding
取值:数字+px

padding可以当作复合属性来使用,可以给单独的方向设置内边距,最多取4个值(上下左右)

取值个数效果
1个给上下左右同时设置相同的内边距
4个分别对应盒子的 上 右 下 左 (顺时针的顺序)
3个对应盒子的 上 左右 下
2个对应盒子的 上下 左右

5.⭐盒子大小计算

盒子的大小只是内容区域的大小吗? -其实并不是
给盒子设置border和padding时,盒子会被撑大
示例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    div{
      width: 100px;
      height: 60px;
      background-color: blue;
      border: 5px solid #000;
      padding: 10px;
    }
  </style>
</head>
<body>
  <div>这是一个div</div>
</body>
</html>

效果:
在这里插入图片描述
这里的盒子就是被border和padding给撑大了

盒子的大小 = 内容区域的大小+2*border的大小+2*padding的大小

如果不想让盒子被撑大,有两种办法:

  1. 手动减去border和padding的大小(很麻烦,需要大量的计算)
  2. 使用内减模式(浏览器会自动帮我们计算多余的大小,在内容区域减去)

6.⭐内减模式

使用方法:给盒子设置 box-sizing: border-box; 即可

示例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    div{
      width: 100px;
      height: 60px;
      background-color: blue;
      border: 5px solid #000;
      padding: 10px;
      /*使用内减模式*/
      box-sizing: border-box;
    }
  </style>
</head>
<body>
  <div>这是一个div</div>
</body>
</html>

效果:
在这里插入图片描述
这也是CSS3的盒子模型,如果不想让盒子被撑大,建议使用这种方式解决

7.外边距

外边距和内边距的写法一样,可以给四个方向都设置外边距,也可以给单独的方向设置外间距
取值的个数效果都是一样的.掌握内边距的写法,外边距就很容易了

接下来说外边距的两个问题:外边距的合并和外边距的塌陷

外边距的合并

垂直布局的块元素,上下的margin会合并

示例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    div{
      width: 100px;
      height: 60px;
      background-color: blue;
    }
    
    .one{
      margin-bottom: 20px;
    }
    .two{
      margin-top: 20px;
    }
  </style>
</head>
<body>
<div class="one">这是一个div</div>
<div class="two">这是一个div</div>
</body>
</html>

给一个div设置下外边距为20px,另一个上边距设置上外边距为20px
在这里插入图片描述
最后的显示效果,只有20px,而不是40px
在这里插入图片描述
这就是外边距的合并的合并现象

外边距合并时,会取两个margin的最大值
解决方法:尽量避免,只给一个盒子设置外边距就好

外边距的塌陷

互相嵌套的块级元素,子元素的margin-top 会作用在父元素上面

先看案例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .one{
      width: 300px;
      height: 300px;
      background-color: skyblue;
    }
    .two{
      width: 100px;
      height: 100px;
      background-color: #4c4c4c;

      margin-top: 50px;
    }
  </style>
</head>
<body>
<div class="one">
  <div class="two"></div>
</div>
</body>
</html>

在这里插入图片描述

原本第二个div是设置了外边距的,但是并没有生效,反而是里面的子元素的div把父元素的div一起拉下来了,这就是外边距的塌陷现象

解决方法:

  • 给父元素设置border-top或者padding-top
  • ⭐给父元素设置overflow: hidden;
  • 设置浮动
  • 转成行内块元素

行内元素的垂直外边距

不能通过改变margin和padding来改变行内标签的垂直位置

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .one{
      margin: 100px;
    }
  </style>
</head>
<body>
<span>这是一个span</span>
<br>
<span class="one">这是一个span</span>
</body>
</html>

效果:
在这里插入图片描述

行内元素的margin-top margin-bottom padding-top padding-bottom是不生效的

如果想改变行内元素的垂直位置可以使用行高 line-height

8.⭐清除默认样式

在默认情况下,有些标签是有默认的margin和padding的 ,因此一般做项目时要先把标签的默认样式给清除了

清除默认样式的方法:

margin: 0;
padding: 0;

示例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .one {
      margin: 0;
      padding: 0;
    }
  </style>
</head>
<body>
  <p>这是一个p标签</p>
  <p>这是一个p标签</p>
  <p class="one">这是一个p标签</p>
  <p class="one">这是一个p标签</p>
</body>
</html>

效果:
在这里插入图片描述
还有其它的标签也有默认样式,如果要清除默认样式,可以使用通配符选择器

9.⭐版心居中

版心居中就是将内容在浏览器中居中显示,通常页面都是这么布局的

设置方法: margin: 0 auto;

示例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    div{
      width: 70%;
      height:500px;
      background-color: skyblue;
      margin: 0 auto;
    }
  </style>
</head>
<body>
  <div>这是一个div</div>
</body>
</html>

效果:
在这里插入图片描述
根据需求可以调整盒子的高度,这样浏览器的主要内容就在浏览器居中显示了

感谢你的观看!希望这篇文章能帮到你!
专栏:《web前端开发》 在不断更新中,欢迎订阅!
“愿与君共勉,携手共进!”
在这里插入图片描述

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

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

相关文章

使用Vue来完成项目中的首页导航+左侧菜单

目录 1. 准备工作 2. 动态树 2.1 在配置请求路径 2.2 使用动态数据构建导航菜单 2.2.1 通过接口获取数据 2.2.3 通过后台获取的数据构建菜单导航 2.3 点击菜单实现路由跳转 2.3.1 创建书本管理组件 2.3.2 配置路由 2.3.3 修改LeftAside组件 2.3.4 修改Main组件 3. …

8个不能错过的程序员必备网站,惊艳到我了!!!

程序员是一个需要不断学习的职业&#xff0c;不少朋友每天来逛CSDN、掘金等网站&#xff0c;但一直都抱着“收藏从未停止&#xff0c;学习从未开始”的态度&#xff0c;别骗自己了兄弟。在编程体系中&#xff0c;有很多不错的小工具&#xff0c;可以极大得提升我们的开发效率。…

前端技术:解决执行npm install提示 xxx packages are looking for funding run `npm fund` for details的问题 详述npm fund

目录复现问题分析问题npm fund的命令npm fund的由来npm fund与npm ls解决问题参看文献&#x1f610; 我的博客&#xff0c;不仅帮你解决此类问题&#xff0c;还会告诉如何去分析定位问题。 复现问题 今天执行如下命令时&#xff1a; npm install报出如下问题&#xff1a; 2…

cookie、localStorage和sessionStorage详解

目录 一、cookie 二、Web storage 1、localStorage 2、sessionStorage的使用 3、复杂数据类型储存 Web Storage带来的好处&#xff1a; 三、sessionStorage、localStorage和cookie的区别 一、cookie cookie是客户端与服务器端进行会话使用的一个能够在浏览器本地化存储…

vue引入elementUi后打开页面报错Uncaught TypeError: Cannot read properties of undefined(reading ‘prototype‘)

vue引入elementUi后打开页面报错 本人在用idea创建vue项目并引入elemenUi之后网页报错&#xff1a; Uncaught TypeError: Cannot read properties of undefined(reading ‘prototype’)。 百度了很多办法都说是因为在vue3中引入了elementUi&#xff0c;vue3.0之后是不支持el…

基于Java+Springmvc+vue+element员工信息管理系统详细设计

博主介绍&#xff1a;✌公司项目主程、全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f345;…

React中实现插槽效果的方案

文章目录React实现插槽children实现插槽props实现插槽React实现插槽 在开发中&#xff0c;我们抽取了一个组件&#xff0c;但是为了让这个组件具备更强的通用性&#xff0c;我们不能将组件中的内容限制为固定的div、span等等这些元素。 我们应该让使用者可以决定某一块区域到…

项目部署,一点也不难!

目录 一、部署前准备 &#xff08;一&#xff09;前端多环境准备 &#xff08;二&#xff09;后端多环境准备 二、项目部署 &#xff08;一&#xff09;原始部署 1、前端部署 2、前端部署测试 3、后端部署 &#xff08;二&#xff09;宝塔 Linux 部署 1、前端部署 2…

前端面试八股文--Vue篇(持续更新)

一. Vue2 篇 1.MVC MVVM区别 首先呢这是两种模式 MVC指的是 modal&#xff0c;view&#xff0c; controller MVVM 指的是 modal &#xff0c;view&#xff0c; view modal mvc和mvvm区别是&#xff1a;1、处理业务的模式不同&#xff0c;MVC里&#xff0c;View是可以直接访…

在 Vue3 中使用 Vuex

本篇文章主要记录 Vue3 中使用 Vuex 的步骤和注意事项&#xff1a; 1、安装依赖库 npm install vuex --save-dev2、配置 Vuex 实例 对比 Vue2 和 Vue3 各自创建 Store 实例的区别&#xff1b; Vue2 是用 Vue.use(Vuex)注入 Vuex 插件&#xff0c;然后通过 new Vuex.Store(o…

真正有效解决vue addRoute动态添加路由后刷新页面白屏的靠谱方法及思路,切实可行!

PS&#xff1a;想直接看解决方法的可以跳过前面的废话阶段从后往前看~ 前情回顾&#xff1a;萌新最近从Vue2转战Vue3&#xff0c;一边自学一遍自己做点娱乐项目练练手&#xff0c;这次Vue3项目权限管理用到动态路由&#xff0c;由于以前一直用的addRoutes()方法已经被废弃&…

如何在Windows server 2012配置Web服务器

现在&#xff0c;我们浏览网页已经成为了一种常态&#xff0c;但是你知道网页是怎么运行的吗&#xff1f; 我们浏览网页&#xff0c;首先会打开浏览器&#xff0c;然后输入网页的地址&#xff08;当然这里现在已经可以不用我们自己输入地址了&#xff0c;一般现在就是直接搜索…

在vite里获取env环境变量

在vite里获取env环境变量.env环境配置文件在cli项目中我们可以是配置.env.[mode]文件来配置环境变量在cli项目中使用.env.[mode]在vite中使用.env文件.env环境配置文件 在项目中总会遇到一些默认的配置,需要我们配置到静态文件中方便我们去获取,这时候就可以用到这个.env环境变…

vue项目中使用vuedraggable

最近在学习一个可视化搭建的项目&#xff0c;里面用的拖拽就是draggable.js。看了几个中文的文档&#xff0c;有很多坑&#xff0c;可能是没有及时更新的原因。 VUe 建议去看vuedraggable的官方文档&#xff0c;只不过是英文的。官方文档&#xff1a;https://github.com/Sor…

【HTML】筑基篇

&#x1f348;作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名在校大学生 &#x1f347;个人主页&#xff1a;亦世凡华、的csdn博客 &#x1f353;系列专栏&#xff1a;HTML专栏 &#x1f95d;推荐一款模拟面试刷题神器&#x1f525;&#xff1a;…

echarts 定制legend内容,显示和位置

echarts 定制legend内容&#xff0c;显示和位置1.type(当图例很多的时候可以用到)2.orient(图例的排版方向)3.top,bottom,left,right(图例在容器中的位置)4.width,height&#xff08;图例组件的大小&#xff09;;itemWidth,itemHeight(图例图标的大小)5. align&#xff08;图例…

六、Echart图表 之 tooltip提示框组件配置项大全

&#x1f353; 作者主页&#xff1a;&#x1f496;仙女不下凡&#x1f496; &#x1f353; 前言介绍&#xff1a;以下&#x1f447;内容是我个人对于该技术的总结&#xff0c;如有不足与错误敬请指正&#xff01; &#x1f353; 欢迎点赞&#x1f44d; 收藏⭐ 留言&#x1f4…

【JavaScript 进阶教程】函数的定义 调用 及 this指向问题

这篇文章开始我们函数的进阶篇&#xff0c;和我们JavaScript基础学的函数有了很多拓展&#xff0c;这篇文章首先我们从函数的定义&#xff0c;调用&#xff0c;及其 this指向 来一个总结。 文章目录&#xff1a; 一&#xff1a;函数的定义 1.1 命名函数 1.2 匿名函数 1…

若依(ruoyi)框架:如何实现灵活自定义路由配置

如何灵活自定义路由配置业务背景如何实现方式一&#xff1a;直接在前端路由表&#xff08;router/index.js&#xff09;里面某个路由的meta属性里面配置。方式二&#xff1a;在后台返回动态路由的接口中组装meta信息如何改造效果展示使用方法总结业务背景 随着项目的深入开发&a…

使用 iframe出现了缓存,导致页面不会刷新的解决方案

事情是这样的&#xff0c;我在打代码的时候&#xff0c;需要在A页面里引入B页面我使用了iframe 这个标签 来引入页面B但是我发现 当我更改完页面B的内容 将它上传到服务器后&#xff0c;我访问这个A页面&#xff0c;这个我使用iframe 引入的页面B 的内容并没有更新,经过一番研究…