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

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

1.盒子模型介绍


所有HTML元素可以看作盒子,CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。

盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。

盒子模型结构图:

3.png

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;

4.png


3.边框


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

线条的种类有两个最常用的: 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>

效果:

5.png

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>

效果:

6.png


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>

效果:

7.png

这里的盒子就是被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>

效果:

8.png

这也是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

9.png

最后的显示效果,只有20px,而不是40px

10.png


外边距的塌陷


<!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>

11.png

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

解决方法:

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

行内元素的垂直外边距


不能通过改变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>

效果:

12.png

行内元素的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>

效果

13.png

还有其它的标签也有默认样式,如果要清除默认样式,可以使用通配符选择器


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>

效果

14.png

根据需求可以调整盒子的高度,这样浏览器的主要内容就在浏览器居中显示了

相关文章
|
17天前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
31 3
|
14天前
|
监控 前端开发 JavaScript
探索微前端架构:构建可扩展的现代Web应用
【10月更文挑战第29天】本文探讨了微前端架构的核心概念、优势及实施策略,通过将大型前端应用拆分为多个独立的微应用,提高开发效率、增强可维护性,并支持灵活的技术选型。实际案例包括Spotify和Zalando的成功应用。
|
18天前
|
前端开发 JavaScript
Bootstrap Web 前端 UI 框架
Bootstrap 是快速开发 Web 应用程序的前端工具包。
30 3
|
18天前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
17 3
|
18天前
|
前端开发 JavaScript API
前端框架新探索:Svelte在构建高性能Web应用中的优势
【10月更文挑战第26天】近年来,前端技术飞速发展,Svelte凭借独特的编译时优化和简洁的API设计,成为构建高性能Web应用的优选。本文介绍Svelte的特点和优势,包括编译而非虚拟DOM、组件化开发、状态管理及响应式更新机制,并通过示例代码展示其使用方法。
33 2
|
19天前
|
开发框架 前端开发 JavaScript
Web前端框架
Web前端框架等名词
16 2
|
30天前
|
人工智能 前端开发
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
|
19天前
|
监控 前端开发 JavaScript
前端技术探索:构建高效、可维护的Web应用
【10月更文挑战第23天】前端技术探索:构建高效、可维护的Web应用
37 0
|
移动开发 前端开发 JavaScript
Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十二】
  《Web 前端开发精华文章推荐》2014年第一期(总第二十二期)和大家见面了。梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 和 CSS3 技术应用,推荐优秀的 网页设计 案例,共享精美的设计素材和优秀的 Web 开发工具,希望这些精心整理的前端技术文章能够帮助到您。
7635 0
|
1月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
101 3