关于CSS你应该知道的基础知识 - 盒模型篇
浏览器渲染引擎通过盒模型的方式来布局html元素。我们可以将每一个html元素都看做是一个盒子,每一个盒子都有长和款,多个这样的盒子组成了我们的网页。
Margin,Border,Padding
每一个盒子都会有margin,border和padding属性。我们可以通过CSS来指定这三个属性的大小。例如:
.box {
margin: 40px;
padding: 20px;
border: black 2px solid;
text-align: center
}
<body>
<div class="box">
box
</div>
<div class="box">
box
</div>
<div class="box">
box
</div>
</body>
box class被应用后的样式如下:
- margin 应用后元素与元素之间产生了相应的空间。
- border 应用后元素的外边框增加了宽度。
- padding 应用后元素内的内容和边框之间产生了相应的空间。
我们同样可以通过Chrome的Developer Tools来验证相应的属性。上面的代码在Developer Tools中的计算结果如下:
上栗中,我们将盒子四个方向的margin都设置成了40px。我们还可以只修改上下左右中的其中一个或几个。
/* 具体指定上右下左的margin */
.box {
margin-top: 10px;
margin-right: 20px;
margin-bottom: 30px;
margin-left: 40px;
}
/* 以简写的方式指定margin,依次为上,右,下,左 */
.box {
margin: 10px 20px 30px 40px;
}
/* 以简写的方式指定margin,依次为上下,左右 */
.box {
margin: 10px 20px;
}
padding设置的语法与margin相同,这里就不列出了。border的设置比较特殊,有机会会找专门一个章节来介绍。
这里还有一个小技巧,就是如果想将一个元素水平居中,可以将它的margin-left
和margin-right
属性设置成auto
。即左右两边的margin根据当前窗口宽度自动调节到合适大小。
Margin 塌陷
下面这块代码中,盒模型的计算结果和我们预期的不太一样:
.box1 {
margin-bottom: 30px;
border: black 2px solid;
text-align: center
}
.box2 {
margin-top: 60px;
border: black 2px solid;
text-align: center
}
<body>
<div class="box1">
box 1
</div>
<div class="box2">
box 2
</div>
</body>
如果按照前面的解释,box1和box2这间的空间应该是30px + 60px = 90px
,但实际上只有60px。原因是浏览器渲染元素时,垂直方向相邻的元素margin值只会取设置的较大的那个值。这就是Margin Collapsing。在上栗中,最后计算结果是60px。通过Chrome的工具,我们可以验证,如下图:
橘黄色部分为两个盒元素的margin区域。图例中可以看出margin的高度不是两个元素marign相加,而是取较大的那个。
block元素和inline元素
html元素中,有一些元素是block元素,即元素的宽度会占满整个窗口的宽度,例如div
。还有一些是inline元素,即元素的宽度是根据自己内容需要计算出来的宽度,且会紧贴在前一个inline元素的后面,例如span
。
<body>
<div>
我是block
</div>
<span>
我是inline
</span>
<span>
我是inline
</span>
<div>
我是block
</div>
</body>
我们可以通过display
属性还改变元素的默认显示属性。例如想将一个span
以block形式展现,只需将其设置成display: block;
还有一点需要注意的是,以inline形式展现的元素,是不受上下margin属性控制的,如果想给一个inline元素设置margin-top
和margin-bottom
则需要将display
设置成inline-block
.
<span class="inline">
我是inline
</span>
<span class="inline">
我是inline
</span>
上下margin不起作用
.inline {
margin: 20px;
border: red 1px solid;
}
上下margin起作用
.inline {
margin: 20px;
border: red 1px solid;
display: inline-block;
}
盒模型长度和宽度的计算
盒模型的长度可以通过width属性还设置,例如width: 200px
。我们来看一个例子:
.box {
margin: 10px auto;
padding: 10px;
border: red 1px solid;
text-align: center;
width: 200px;
}
<div class="box">
box
</div>
我们设置了元素宽度是200px
,但通过Developer Tools查看到最后的结果是222px
。原因是浏览器渲染引擎默认理解width
属性是内容加上padding的宽度,整个元素宽度还要加上border和margin,即200px + 2 * 10px (margin) + 2 * 1px (border) = 222px
。
这种对width
属性的处理很多时候会带来一些不便,因为我们无法准确的知道最后的元素到底有多宽。要解决这个问题,可以通过设置box-sizing: border-box;
,这样元素最后整体宽度就是我们设置的宽度了。如下图:
我们在引用一些CSS框架时,大多数框架都会将所有元素的box-sizing
设置成border-box
。有兴趣的同学可以看看Bootstrap等框架的源码。
* {
box-sizing: border-box;
}
关于盒模型的高度,可以通过height
属性来设置。而如何将设置垂直居中,还是建议使用flex-box
来实现,网上关于flex-box
的资料很多,有兴趣的话可以去看看。
关于CSS你应该知道的基础知识 - 盒模型篇的更多相关文章
- 关于CSS你应该知道的基础知识 - 样式应用篇
上一篇简单总结了一下选择器,如果一个元素被多个选择器选中,元素的样式就会以级联方式被应用到.要搞清最终那个样式被应用到元素上了,首先要明白引用CSS代码的几种方式. CSS代码引用方式 如何应用CSS ...
- jQuery学习笔记 - 基础知识扫盲入门篇
jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...
- 大数据基础知识问答----spark篇,大数据生态圈
Spark相关知识点 1.Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架 dfsSpark基于mapredu ...
- 编程必备基础知识|计算机组成原理篇(09):CPU的控制器和运算器
计算机基础方面的知识,对于一些非科班出身的同学来讲,一直是他们心中的痛,而对于科班出身的同学,很多同学在工作之后,也意识到自身所学知识的不足与欠缺,想回头补补基础知识.关于计算机基础的课程很多,内容繁 ...
- c++ 实时通信系统(基础知识TCP/IP篇)
编写前的基础知识 C/S结构: C/S是Client/Server,即客户端/服务器端架构,一种典型的两层架构.客户端包含一个或多个在用户的电脑上运行的程序服务器端有两种,一种是数据库服务器端,客户端 ...
- CSS基础必备盒模型及清除浮动
盒模型 盒模型是有两种标准的,一个是标准模型,一个是IE模型. css如何设置两种模型 这里用到了CSS3 的属性 box-sizing /* 标准模型 */ box-sizing:content-b ...
- css布局详解(一)——盒模型
一.网页布局的几种情况 今天让我们总结一下在css布局的各种情况做一个总结,为我们以后布局网页时做一个参考. 先看一张图,这是去年cssConf大会时阿里的 @寒冬winter 老师放出来的: 如图所 ...
- CSS文字,文本,背景,盒模型等记录
文字: font-family:" "; /*设置字体*/ font-size:6px;/*设置文字字号*/ color:red;/*设置文字颜色*/ font-weight:bo ...
- CSS学习笔记1:基础知识
CSS规则由两部分组成,选择器和声明 选择器:标签,告诉浏览器哪些标签需要用到这个样式 声明:样式的内容,由一或多对属性:值以:隔开组成,由{}包围,需要多个选择器时以逗号隔开 ...
随机推荐
- Python基本语法_基本数据类型_数值型详解
目录 目录 软件环境 Python变量调用的过程 数值型 删除一个数值类型对象 布尔型 Bool 标准整型 Int 长整型 双精度浮点型 Float 复数 数值类型对象的内建功能函数 absNumbe ...
- oracle-不完全数据库恢复-被动恢复-ORA-00313/ORA-00366
继上一篇不完全恢复 oracle-不完全数据库恢复-被动恢复-ORA-00313/ORA-00366 场景2:数据库拥有备份,CURRENT状态日志组中所有的在线日志头损坏,在发生日志切换时实例被自动 ...
- 应用安全 - Java Web 应用 - Confluence - 漏洞汇总
CVE-2019-3395 Date: -- 类型: SSRF 影响范围: Confluence 1.*.*.*.*.3.*.*.4.*.*.5.*.* Confluence 6.0.*.1.*.6. ...
- 精读《What's new in javascript》
1. 引言 本周精读的内容是:Google I/O 19. 2019 年 Google I/O 介绍了一些激动人心的 JS 新特性,这些特性有些已经被主流浏览器实现,并支持 polyfill,有些还在 ...
- springboot+dubbo基于zookeeper快速搭建一个demo
由于小编是在windows环境下搭建的,故该示例均为在windows下操作,这里只是提供一个快速搭建思路,linux操作也基本上差不多. 首先本示例的dubbo是基于zookeeper发布订阅消息的, ...
- CentOS7使用集群同步脚本对配置文件同步分发
1.介绍 使用集群同步脚本对配置文件同步分发 2.操作 1)在/root目录下创建bin目录,并在bin目录下创建文件xsync,文件内容如下: [root@hadoop101 ~]$ mkdir b ...
- P1106删数游戏
这道题曾经在CQOJ上考过,是第二次做了. 这是一道使用字符串的贪心题.首先要根据机组例子来确定:删除递增序列的最后一位.即循环找到那一位后,把后面的数往前压.所以我在艰难处理完双重循环后(这个处理不 ...
- C++ 线性表实现
List.h #pragma once #include "targetver.h" #include <stdio.h> #include <tchar.h&g ...
- Centos7防火墙开启3306端口
CentOS7的默认防火墙为firewall,且默认是不打开的. systemctl start firewalld # 启动friewall systemctl status firewalld # ...
- HNUSTOJ-1695 跳格子(略感头疼)
1695: 跳格子 时间限制: 1 Sec 内存限制: 128 MB提交: 230 解决: 57[提交][状态][讨论版] 题目描述 逸夫楼的大厅的地面有10行10列的石砖,我们用坐标(x,y)来 ...