草庐IT

CSS盒子模型

微风洋洋 2023-06-03 原文

📜个人简介

⭐️个人主页:微风洋洋🙋‍♂️
🍑博客领域:编程基础💡,后端💡,大数据,信息安全
🍅写作风格:干货,干货,还是tmd的干货
🌸精选专栏【JavaScript】【HTML+CSS】【Java学习笔记】【Java必刷题】
🚀支持洋洋:点赞👍、收藏⭐、留言💬

好久不见,甚是想念!
大家好🙋‍♂️

我是微风洋洋 今天这篇文章就是来和大家详细聊聊CSS盒子模型,希望大家读完有所收获,那我辛苦码字也就值了🎈🎈🎈

文章目录

盒模型是CSS控制页面布局的一个非常重要的概念,页面上的所有元素,包括文本、图像、超级链接、div块等,都可以被看作盒子。

由盒子将页面中的元素包含在一个矩形区域内,这个矩形区域则称为“盒模型”。

网页页面布局的过程可以看作在页面空间中摆放盒子的过程。通过调整盒子的边框、边界等参数控制各个盒子,实现对整个网页的布局。

盒模型由内到外依次分为内容(content)、填充(padding)、边框(border)和边界(margin)4部分。

盒子的实际大小为各部分之和,下图所示的盒子宽度为:左边界+左边框+左填充+内容宽度+右填充+右边框+右边界。



一、盒模型的组成

🍑内容

内容(content)是盒子里的“物品”,是盒模型中必须有的部分,可以是网页上的任何元素,如文本、图片、视频等各种信息。

定义盒模型语法格式如下:

width: auto | length;

height: auto | length;

overflow: auto | visible | hidden | scroll;

举个例子👇

代码

	<!DOCTYPE html>
	<html>
	<head>
	<meta charset="utf-8">
	<style type="text/css">
	* {
	font-size: 16px;
	}
	.box1 {
	height: 60px;
	width: 200px;
	background-color: #3CC;
	}
	
	.box2 {
	height: 60px;
	width: 70%;
	overflow: auto;
	background-color: #CCC;
	}
	</style>
	</head>
	<body>
	<div class="box1">第一个盒子高度是固定的,但盒子里信息过多,超出内容属性所限定的大小,盒子的高度将自动放大</div>
	<p>
	
	<div class="box2">第二个盒子高度和第一个盒子一样,是固定的,但设置了overflow属性为auto,出现滚动条,盒子高度不变。</div>
	</body>
	</html>
	

效果


🍑边界

边界(margin)是盒模型与其他盒模型之间的距离,使用margin属性定义。示例演示了边界设置.

定义盒模型边界语法格式如下:

margin: auto | length;

举个例子👇

代码

效果


🍑填充

填充(padding)用来设置内容和盒子边框之间的距离,可用padding属性设置。

定义盒模型填充语法格式如下:

padding: length;

举个例子👇

代码

	<!DOCTYPE html>
	<html>
	<head>
	<meta charset="utf-8">
	<style type="text/css">
	div {
	height: 20px;
	width: 150px;
	background-color: #999;
	margin: 10px;
	}
	
	div#p1 {
	padding: 20px;
	}
	
	div#p2 {
	padding: 10px 20px 30px 40px;
	}
	</style>
	</head>
	<body style="font-size: 14px">
	<div id="p1">填充设置1</div>
	<div>无填充设置</div>
	<div id="p2">填充设置2</div>
	</body>
	</html>
	

效果



🍑边框

边框(border)是盒模型中介于填充(padding)和边界(margin)之间的分界线。

(1)边框样式

(2)边框宽度

(3)边框颜色

举个例子👇

代码

	<!DOCTYPE html>
	<html>
	<head>
	<meta charset=utf-8>
	<style type="text/css">
	div {
	width: 200px;
	background-color: #EFEFEF;
	margin: 10px;
	padding: 10px;
	}
	
	.b1 {
	border-style: inset;
	border-width: 10px;
	border-color: rgb(100%, 0%, 0%);
	}
	
	.b2 {
	border-style: double;
	border-width: thick;
	border-color: black;;
	}
	
	.b3 {
	border: groove thin rgb(255, 255, 0);
	}
	
	.b4 {
	border: #000 medium dashed;
	}
	</style>
	</head>
	<body>
	<div class="b1">边框设置1</div>
	<div class="b2">边框设置2</div>
	<div class="b3">边框设置3</div>
	<div class="b4">边框设置4</div>
	</body>
	</html>
	

效果



二、盒的类型

CSS中的盒子可分为block类型与inline类型,使用display属性来定义。

直接来看个例子吧,这个例子看懂了,盒的类型你也就明白了👇

代码

	<!DOCTYPE HTML>
	<html>
	<head>
	<meta charset=utf-8>
	<title>block、inline、inline-block对比</title>
	<style>
	div.div1 {
	display: block; /*div默认值*/
	width: 120px;
	height: 40px;
	margin: 2px;
	background-color: green;
	}
	div.div2 {
	display: inline; /*修改为inline类型*/
	width: 120px;
	height: 40px;
	margin: 2px;
	background-color: blue;
	}
	div.div3 {
	display: inline-block; /*inline-block类型*/
	width: 120px;
	height: 40px;
	margin: 2px;
	background-color: red;
	}
	div.div4 {
	display: inline-block;
	margin: 2px;
	background-color: grey;
	}
	</style>
	</head>
	
	<body>
	<div class="div1">block类型</div>
	<div class="div1">block类型</div>
	<hr/>
	<div class="div2">inline类型</div>
	<div class="div2">inline类型</div>
	<hr/>
	<h3>inline-block类型,设置width和height属性</h3>
	<div class="div3">inline-block类型</div>
	<div class="div3">inline-block类型</div>
	<hr/>
	<h3>inline-block类型,无width和height属性</h3>
	<div class="div4">inline-block类型</div>
	<div class="div4">inline-block类型</div>
	</body>
	</html>
	

效果

🔺 block类型是独占一行,而inline是可一个多个在一行,拓展的inline-block则是把block转换成与inline相似



三、CSS3新增的与盒相关的属性

🍑overflow-x与overflow-y属性

指定了盒的宽度与高度后,可能出现盒子无法承载其中内容的情况,为了避免内容溢出,使用overflow属性来指定如何显示盒中容纳不下的内容。

举个例子👇

代码

	<!DOCTYPE HTML>
	<html>
	<head>
	<meta charset=utf-8>
	<title>overflow</title>
	<style>
	span {
	display: block;
	width: 180px;
	height: 100px;
	background-color: #CCC;
	overflow-x: auto;
	overflow-y: auto;
	}
	</style>
	</head>
	<body>
	<span>这个示例将span元素定义为block类型,同时设置了overflow-x和overflow-y的属性。如果取消这两个属性的设置,指定的区域无法承载,将出现溢出……
	</span>
	</body>
	</html>
	

效果


🍑text-overflow属性

text-overflow属性用于指定盒子中文本溢出的显示方式,可以在盒的末尾显示一个代表省略的符号"…"。

举个例子👇

代码

	<!DOCTYPE HTML>
	<html>
	<head>
	<meta charset=utf-8>
	<title>text-overflow</title>
	<style>
	div {
	white-space: nowrap; /*确保水平方向溢出*/
	width: 300px;
	height: 30px;
	overflow-x: hidden; /*水平滚动条需要隐藏*/
	text-overflow: ellipsis; /*text-overflow效果*/
	border: 1px solid grey;
	}
	</style>
	</head>
	<body>
	<div>text-overflow属性只在当盒中的内容在水平方向上超出盒的容纳范围时有效
	</div>
	</body>
	</html>
	

效果


🍑box-shadow属性

box-shadow属性让盒在显示时产生阴影效果。

box-shadow属性的指定方式如下。

box-shadow: xlength ylength r color

举个例子👇

代码

	<!DOCTYPE HTML>
	<html>
	<head>
	<meta charset=utf-8>
	<title>box-shadow</title>
	<style>
	div {
	width: 200px;
	height: 100px;
	background-color: blue;
	box-shadow: 10px 10px 5px grey;
	/*box-shadow: 10px 10px 0px grey;
	box-shadow: 0px 0px 5px grey;
	box-shadow: -10px -10px 5px grey;*/
	}
	</style>
	</head>
	<body>
	<div></div>
	</body>
	</html>
	

效果


🍑box-sizing属性

使用box-sizing属性,可以指定用width属性与height属性指定的宽度值与高度值是否包含元素的填充区域(padding)与边框(border)的宽度与高度,从而实现更为精确的定位。

举个例子👇

代码

	<!DOCTYPE HTML>
	<html>
	<head>
	<meta charset=utf-8>
	<title>box-sizing</title>
	<style>
	div {
	width: 300px;
	border: solid 30px blue;
	padding: 30px;
	background-color: #ccc;
	margin: 20px auto;
	}
	
	div#div1 {
	box-sizing: content-box;
	}
	
	div#div2 {
	box-sizing: border-box;
	}
	</style>
	</head>
	<body>
	<div id="div1">在第一个div元素的box-sizing属性中指定content-box属性值</div>
	<div id="div2">在第二个div元素 的box-sizing属性中指定border-box属性值</div>
	</body>
	</html>
	

效果


下面这个例子使用了box-sizing属性,每个盒子的总宽度为浏览器宽度的50%,实现了一个精确的布局👇

代码

	<!DOCTYPE HTML>
	<html>
	<head>
	<meta charset=utf-8>
	<title>box-sizing</title>
	<style>
	div {
	width: 50%;
	height: 200px;
	float: left;
	padding: 20px;
	box-sizing: border-box;
	}
	
	div#div1 {
	border: solid 20px blue;
	}
	
	div#div2 {
	border: solid 20px green;
	}
	</style>
	</head>
	<body>
	<div id="div1">使用box-sizing属性的目的是对元素的总宽度做一个控制</div>
	<div id="div2">利用border-box属性值会使得页面布局更加方便</div>
	</body>
	</html>
	

效果

四、总结

CSS盒子模型在CSS中算是比较重要的部分了,他已经开始涉及到网页布局和设计了,对于这一块内容要引起重视,多加练习。


如果觉得对你有一丢丢启发的话,不妨 点赞👍、收藏⭐、留言💬支持一下,你的支持将是我继续创作的最大动力。下一篇将介绍CSS网页布局,到时不见不散❤️❤️❤️

关注,即可提高学习效率。Perfect!

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

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  3. ruby - capybara field.has_css?匹配器 - 2

    我在MiniTest::Spec和Capybara中使用以下规范:find_field('Email').must_have_css('[autofocus]')检查名为“电子邮件”的字段是否具有autofocus属性。doc说如下:has_css?(path,options={})ChecksifagivenCSSselectorisonthepageorcurrentnode.据我了解,字段“Email”是一个节点,因此调用must_have_css绝对有效!我做错了什么? 最佳答案 通过JonasNicklas得到了答案:No

  4. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  5. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  6. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  7. ruby-on-rails - 如何将验证与模型分开 - 2

    我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:

  8. ruby-on-rails - Rails 模型——非持久类成员或属性? - 2

    对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs

  9. ruby-on-rails - Rails - 从另一个模型中创建一个模型的实例 - 2

    我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案

  10. ruby-on-rails - Ruby 中的内存模型 - 2

    ruby如何管理内存。例如:如果我们在执行过程中采用C程序,则以下是内存模型。类似于这个ruby如何处理内存。C:__________________|||stack|||------------------||||------------------|||||Heap|||||__________________|||data|__________________|text|__________________Ruby:? 最佳答案 Ruby中没有“内存”这样的东西。Class#allocate分配一个对象并返回该对象。这就是程序

随机推荐