CSS盒子模型

JackLiu1788 2019-03-29 原文

CSS盒子模型

盒子模型是html和css当中非常重要的一块,只有深入了解了盒子模型,才能在页面布局时得心应手,少走弯路。

一、盒子模型的概念

css盒子模型又称为框模型(Box Model) ,包含了元素内容(content)、内边距(padding)、边框(border)、外边距(margin)几个要素。

在盒子模型中,margin是透明的,而border、padding、content均可以设置背景颜色。

一个盒子的总宽度 = 元素内容的宽度 + 左右内边距的宽度 + 左右边框的宽度 + 左右外边距的宽度

同理,盒子的高度 = 元素内容的高度 + 左右内边距的高度 + 左右边框的高度 + 左右外边距的高度

border-color属性用来设置border的颜色,当盒子的内容为简单的文本时,background-color属性通常用来设置content和padding的背景颜色。

下图是盒子的3D模型

 

二、盒子模型的外边距塌陷

当两个上下方向的盒子垂直相邻时,会发生外边距的叠加,叠加后的高度等于合并前两个盒子中外边距较高的那个值。

图示如下:

 

这种外边框叠加的现象只会出现在普通文档流中。

三、盒子模型的box-sizing属性

box-sizing有几种不同的值box-sizing : content-box | border-box | inherit;

(1)content-box(默认值)

当content-box设置为content-box时,我们用css设置的width和height是被设置在了content上,此时:

盒子的总宽度 = width + padding(left、right) + border(left、right) + margin(left、right)

高度同理。

(2)border-box

当content-box设置为border-box时,我们用css设置的width和height值为content、padding和border的总值。此时:

盒子的总宽度 = width + margin(left、right)

(3))inherit

规定应从父元素继承 box-sizing 属性的值。

 

四、开发常见问题和应用

(一)margin越界(第一个子元素的margin-top和最后一个子元素的margin-bottom的越界问题)

以第一个子元素的margin-top 为例:

当父元素没有边框border时,设置第一个子元素的margin-top值的时候,会出现margin-top值加在父元素上的现象,解决方法有四个:

(1)给父元素加边框border (副作用)

(2)给父元素设置padding值  (副作用)

(3)父元素添加 overflow:hidden (副作用)

(4)父元素加前置内容生成。(推荐)

以第四种方法为例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        #father{
            width: 600px;
            height: 500px;
            background-color: burlywood;
        }
        #father:before{
            content: "";
            display: table;
        }
        #child{
            width: 300px;
            height: 200px;
            background-color: lightskyblue;
            margin-top: 50px;
        }
    </style>
</head>
<body>
<div id="father">
  <div id="child"></div>
</div>
</body>
</html>

 图示:

 

(二)标准盒子模型与IE盒子模型

    标准的盒子模型box-sizing为content-box,而IE模型更像是 box-sizing : border-box; 其内容宽度还包含了border和padding。

    在IE8及以上box-sizing属性默认为content-box,在IE7及以下box-sizing 属性为 border-box.

(三)用盒子模型画三角形

原理:盒子模型的边框被盒子的对角连线分为四个方向 ,当设置盒子的content和padding的宽高都为零时,盒子的可显示部分只剩下border,此时给border设置一个宽度,然后设置四个方向都透明,最后单独设置一个方向的的border就可以了。

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        div{
            width: 0;
            border: transparent 50px solid;
            border-top: 50px black solid;
        }
    </style>
</head>
<body>
<div></div>
</body>
</html>

 效果图:

以上就是笔者对盒子模型的一些简单总结啦,如有错误和不足之处,欢迎在评论区留言~

 

发表于 2019-03-29 22:20 上官仲文 阅读() 评论() 编辑 收藏

 

版权声明:本文为JackLiu1788原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/JackLiu1788/p/10618401.html

CSS盒子模型的更多相关文章

  1. 【HTML笔记】— 内联元素间距问题及解决方案

    一、内联元素间距问题    在HTML实践中我们会发现,有时候内联元素之间会存在一定的间距,并且这间距和mar […]...

  2. 深色模式适配和主题切换

    1.1 前置 如果你已经了解 CSS 自定义属性和匹配系统主题设置的相关知识,略过此部分。 1.1.1 CSS […]...

  3. CSS position属性和实例应用

    目前几乎所有主流的浏览器都支持position属性(”inherit”除外,̶ […]...

  4. css渲染(二) 文本

    一、文本样式  首行缩进  text-indent   首行缩进是将段落的第一行缩进,这是常用的文本格式化效果 […]...

  5. 山寨版计算器

    今天小酌一杯,起了点点飞智,想用HTML/CSS/JS来山寨一个mac系统自带的计算器。先给自己树立两个标杆: […]...

  6. 如何优雅阻止view UI 的 Switch 切换?

    一、官方文档提供的方法   个人觉得官方提供的方法有时候不能够满足现实需求,第二点是view UI版本必须是4 […]...

  7. Web学习的第四天

    Web学习的第四天 今天通过前面的学习,自己写了段代码。 今天还学习了列表,列表的分类有:无序列表、菜单列表、 […]...

  8. CSS position定位

    今天和大家分享一下position定位的相关知识   1、主要的属性:relative  absolute f […]...

随机推荐

  1. foxmail 6在使用中的问题

    出差中.放图有点麻烦.不是自己的电脑. foxmail在使用过发现,地址本老是乱码,出现的原因很简单,当你点邮 […]...

  2. ubuntu使用scrcpy手机投屏-免费神器scrcpy【介绍、安装、使用】

    目录 scrcpy的介绍、安装、使用 scrcpy介绍 scrcpy安装 步骤1:启动adb服务 第一次,安装 […]...

  3. ppp协议采用什么差错控制,连接是面向连接还是无连接

    ①ppp:点对点协议 (ppp:point to point protocol) 点对点协议(ppp)为在点对 […]...

  4. GNOME和KDE两种图形界面有什么区别?

    KDE与GNOME是很类似的:它们在本质上都是桌面环境,必须和窗口管理器配合使用,以提供类似于MS-Windo […]...

  5. 吴裕雄–天生自然聚类分析K均值算法讲解 – 吴裕雄

    吴裕雄–天生自然聚类分析K均值算法讲解 聚类分析及K均值算法讲解 吴裕雄 当今信息大爆炸时代,公司 […]...

  6. ORACLE数据库性能优化概述

     实际上,为了保证ORACLE数据库运行在最佳的性能状态下,在信息系统开发之前就应该考虑数据库的优化策略。优化 […]...

  7. 搭建一个简单的FTP服务器

    本文介绍通过win7自带的IIS来搭建一个只能实现基本功能的FTP服务器,第一次装好WIN7后我愣是没整出来, […]...

  8. Java 线程基础

    Java 线程基础...

展开目录

目录导航