CSS学习摘要-盒子模型

注:全文摘要自网络开发者网站,当然间隔也会整理一些思路和格式排版添加进去。

CSS框模型(译者注:也被称为“盒模型”)是网页布局的基础 ——每个元素被表示为一个矩形的方框,框的内容、内边距、边界和外边距像洋葱的膜那样,一层包着一层构建起来。浏览器渲染网页布局时,它会算出每个框的内容要用什么样式,周围的洋葱层有多大,以及框相对于其它框放在哪里。在理解如何创建 CSS 布局之前,你需要理解框模型。

框属性

文档的每个元素被构造成文档布局内的一个矩形框,框每层的大小都可以使用一些特定的CSS属性调整。相关属性如下:

widthheight】宽度和高度

widthheight设置内容框(content box)的宽度和高度。内容框是框内容显示的区域——包括框内的文本内容,以及表示嵌套子元素的其它框。

注意: 还有其他属性可以更巧妙地处理内容的大小——设置大小约束而不是绝对的大小。这些属性包括min-widthmax-widthmin-heightmax-height

padding】内边距

padding 表示一个 CSS 框的内边距 ——这一层位于内容框的外边缘与边界的内边缘之间。

该层的大小可以通过简写属性padding一次设置所有四个边,或用 padding-toppadding-rightpadding-bottompadding-left 属性一次设置一个边。

  • padding-top 是指一个元素在内边距区域(padding area)中上方的高度。
  • padding-bottom 是指一个元素在内边距区域(padding area)中下方的高度。
  • padding-left 是指一个元素在内边距区域(padding area)中左边的宽度。
  • padding-right 是指一个元素在内边距区域(padding area)中右边的宽度。
  • 内边距(padding)是指一个元素的内容和边框之间的区域。和外边距(margin)不同,内边距(padding)是不允许有负值的。内边距(padding)可以用四个值声明一个元素的四个方向的内边距(paddings),这是一种CSS缩写属性。

border】边界边框

CSS的border属性是一个用于设置各种单独的边界属性的简写属性。border可以用于设置一个或多个以下属性的值: border-width, border-style, border-color。

CSS 框的边界(border)是一个分隔层,位于内边距的外边缘以及外边距的内边缘之间。边界的默认大小为0——从而让它不可见——不过我们可以设置边界的厚度、风格和颜色让它出现。

border简写属性可以让我们一次设置所有四个边,例如 border: 1px solid black;但这个简写可以被各种普通书写的更详细的属性所覆盖:

  • border-topborder-right, border-bottom, border-left : 分别设置某一边的边界厚度/风格/颜色。
  • border-width, border-style, border-color: 分别仅设置边界的厚度/风格/颜色,并应用到全部四边边界。
  • 你也可以单独设置某一个边的三个不同属性,如 border-top-width, border-top-style, border-top-color,等。

附:

  • border-top是属性 border-top-color, border-top-style, 和border-top-width 的三者的缩写。这些属性都是在描述一个元素的上方的边框border。
  • border-right 是属性border-right-color, border-right-style, 和border-right-width的三者的缩写。这些属性都是在描述一个元素的右边的边框border。
  • border-bottom 简写属性把下边框的所有属性: border-bottom-color,border-bottom-style 与 border-bottom-width设置到了一个声明中。这些属性描述了元素的下边框样式。
  • border-left 是属性border-left-color, border-left-style, 和border-left-width的三者的缩写。这些属性都是在描述一个元素的左边的边框border。
  • border-style 是一个 CSS 简写属性,用来设定元素所有边框的样式。
  • border-color 是一个用于设置元素四个边框颜色的快捷属性: border-top-color, border-right-color, border-bottom-color, border-left-color

margin】外边距

外边距(margin)代表 CSS 框周围的外部区域,称为外边距,它在布局中推开其它 CSS 框。其表现与 padding 很相似;简写属性为 margin,单个属性分别为 margin-topmargin-rightmargin-bottommargin-left

注意: 外边距有一个特别的行为被称作外边距塌陷(margin collapsing):当两个框彼此接触时,它们的间距将取两个相邻外边界的最大值,而非两者的总和。

  • margin属性为给定元素设置所有四个(上下左右)方向的外边距属性。这是四个外边距属性设置的简写。四个外边距属性设置分别是: margin-top, margin-right, margin-bottom 和 margin-left 。指定的外边距允许为负数。
  • margin-top 属性用来设置元素的顶部外边距,你也可以使用负值。
  • margin-bottom 属性用于设置元素的底部外边距,允许设置负数值。一个正数值将让它相对于正常流与邻近块更远,而负数值将使得更近。
  • margin-left 属性 设置与元素相关联的盒子模型的左外边距。这个值可以为负值。
  • 竖直排列相邻的两个盒子模型的外边距会重叠,称为 margin collapsing.

一些提示及想法

  • 默认情况下background-color/background-image 延伸到了border的内边缘。background-clip( background-clip 设置元素的背景(背景图片或颜色)是否延伸到边框下面。) 属性来改变。
  • 如果content框变得比示例输出窗口大,它将从窗口溢出,此时会出现滚动条,你可以滚动窗口来查看盒子剩余的内容 。你可以使用overflow(overflow 属性指定当内容溢出其块级容器时,是否剪辑内容,显示滚动条或显示溢出的内容。)属性来控制溢出。
  • 框的高度不遵守百分比的长度;框的高度总是采用框内容的高度,除非指定一个绝对的高度(如:px 或者em),它会比在页面上默认是100%高度更实用。
  • border也忽略百分比宽度设置。
  • 你应该注意的是框的总宽度是width, padding-right, padding-left, border-right, 以及 border-left 属性之和。在一些情况下比较恼人(例如,假使你想要一个框占窗口宽度的50%,但边界和内边距是用像素来表示时该怎么办?),为了避免这种问题,有可能使用属性box-sizing来调整框模型。使用值border-box,它将框模型更改成这个新的模型:

box-sizing 属性用于更改用于计算元素宽度和高度的默认的 CSS 盒子模型。可以使用此属性来模拟不正确支持CSS盒子模型规范的浏览器的行为。

高级的框操作

在设置框的width, height, border, padding 及margin之外, 还有一些其他的属性可以改变它们的行为。本节讨论这些其他的属性。

溢流

当你使用绝对的值设置了一个框的大小(如,固定像素的宽/高),允许的大小可能不适合放置内容,这种情况下内容会从盒子溢流。我们使用overflow属性来控制这种情况的发生。它有一些可能的值,但是最常用的是:

  • auto: 当内容过多,溢流的内容被隐藏,然后出现滚动条来让我们滚动查看所有的内容。
  • hidden: 当内容过多,溢流的内容被隐藏。
  • visible: 当内容过多,溢流的内容被显示在盒子的外边(这个是默认的行为)

该示例展示了这些设置是如何工作的:

首先是HTML代码:

<p class="autoscroll">
   Lorem ipsum dolor sit amet, consectetur adipiscing elit.
   Mauris tempus turpis id ante mollis dignissim. Nam sed
   dolor non tortor lacinia lobortis id dapibus nunc. Praesent
   iaculis tincidunt augue. Integer efficitur sem eget risus
   cursus, ornare venenatis augue hendrerit. Praesent non elit
   metus. Morbi vel sodales ligula.
</p>

<p class="clipped">
   Lorem ipsum dolor sit amet, consectetur adipiscing elit.
   Mauris tempus turpis id ante mollis dignissim. Nam sed
   dolor non tortor lacinia lobortis id dapibus nunc. Praesent
   iaculis tincidunt augue. Integer efficitur sem eget risus
   cursus, ornare venenatis augue hendrerit. Praesent non elit
   metus. Morbi vel sodales ligula.
</p>

<p class="default">
   Lorem ipsum dolor sit amet, consectetur adipiscing elit.
   Mauris tempus turpis id ante mollis dignissim. Nam sed
   dolor non tortor lacinia lobortis id dapibus nunc. Praesent
   iaculis tincidunt augue. Integer efficitur sem eget risus
   cursus, ornare venenatis augue hendrerit. Praesent non elit
   metus. Morbi vel sodales ligula.
</p>

然后是应用到HTML的CSS代码:

p {
  width  : 400px;
  height : 2.5em;
  padding: 1em 1em 1em 1em;
  border : 1px solid black;
}

.autoscroll { overflow: auto;    }
.clipped    { overflow: hidden;  }
.default    { overflow: visible; }

上边的代码给出了以下的结果:

背景裁剪(Background clip)

框的背景是由颜色和图片组成的,它们堆叠在一起(background-color, background-image)。 它们被应用到一个盒子里,然后被画在盒子的下面。默认情况下,背景延伸到了边界外沿。这通常是OK的,但是在一些情况下比较讨厌(假使你有一个平铺的背景图,你只想要它延伸到内容的边沿会怎么做?),该行为可以通过设置盒子的background-clip属性来调整。

让我们通过一个示例来看看这个是怎么工作的。首先是我们的HTML代码:

<div class="default"></div>
<div class="padding-box"></div>
<div class="content-box"></div>

然后是CSS代码:

div {
  width  : 60px;
  height : 60px;
  border : 20px solid rgba(0, 0, 0, 0.5);
  padding: 20px;
  margin : 20px 0;

  background-size    : 140px;
  background-position: center;
  background-image   : url(‘https://mdn.mozillademos.org/files/11947/ff-logo.png‘);
  background-color   : gold;
}

.default     { background-clip: border-box;  }
.padding-box { background-clip: padding-box; }
.content-box { background-clip: content-box; }

上述代码产生以下结果:

轮廓(Outline)

最后,还有重要的一点, 一个框的 outline 是一个看起来像是边界但又不属于框模型的东西。它的行为和边界差不多,但是并不改变框的尺寸(更准确的说,轮廓被勾画于在框边界之外,外边距区域之内)

Note: 使用 outline 属性的时候要注意,它一般只在需要可用性的一些情况才被使用,例如在一些用户点击它的时候使用 outline 来表示高亮、可用,如果你要使用 outline,请确保不要因为它看起来像链接的高亮让用户迷惑。

CSS 框类型

之前我们说的所有对于框的应用都表示的是块级元素的,然而,CSS还有一些表现不同的其他框类型。我们可以通过display属性来设定元素的框类型。display属性有很多的属性值。在本篇文章,我们将关注三个最常见的类型:block, inline, and inline-block。

  • 块框( block box)是定义为堆放在其他框上的框(例如:其内容会独占一行),而且可以设置它的宽高,之前所有对于框模型的应用适用于块框 ( block box)
  • 行内框( inline box)与块框是相反的,它随着文档的文字(例如:它将会和周围的文字和其他行内元素出现在同一行,而且它的内容会像一段中的文字一样随着文字部分的流动而打乱),对行内盒设置宽高无效,设置padding, margin 和 border都会更新周围文字的位置,但是对于周围的的块框( block box)不会有影响。
  • 行内块状框(inline-block box) 像是上述两种的集合:它不会重新另起一行但会像行内框( inline box)一样随着周围文字而流动,而且他能够设置宽高,并且像块框一样保持了其块特性的完整性,它不会在段落行中断开。(在下面的示例中,行内块状框会放在第二行文本上,因为第一行没有足够的空间,并且不会突破两行。然而,如果没有足够的空间,行内框会在多条线上断裂,而它会失去一个框的形状。)

注意:默认状态下display属性值,块级元素display: block ,行内元素display: inline

这些东西在短时间听起来可能让你很混乱,现在让我们来看一些简单的小例子。

首先,HTML代码:

<p>
   Lorem ipsum dolor sit amet, consectetur adipiscing elit.
   <span class="inline">Mauris tempus turpis id ante mollis dignissim.</span>
   Nam sed dolor non tortor lacinia lobortis id dapibus nunc.
</p>

<p>
  Lorem ipsum dolor sit amet, consectetur adipiscing elit.
  <span class="block">Mauris tempus turpis id ante mollis dignissim.</span>
  Nam sed dolor non tortor lacinia lobortis id dapibus nunc.
</p>

<p>
  Lorem ipsum dolor sit amet, consectetur adipiscing elit.
  <span class="inline-block">Mauris tempus turpis id ante mollis dignissim.</span>
  Nam sed dolor non tortor lacinia lobortis id dapibus nunc.
</p>

现在我们加一些CSS:

p {
  padding : 1em;
  border  : 1px solid black;
}

span {
  padding : 0.5em;
  border  : 1px solid green;

  /* That makes the box visible, regardless of its type */
  background-color: yellow;
}

.inline       { display: inline;       }
.block        { display: block;        }
.inline-block { display: inline-block; }

上面的代码给出了这个结果,说明了显示类型的不同效果:

例:制作三角形盒子模型

HTML代码如下:

<!--制作三角形-->
<div class="triangle"></div>

CSS代码:

.triangle{
            width: 0;
            height: 0;

/*只定义盒子的下方和左右两边的border且让它们重合就生成了三角形*/
            border-bottom: 30px solid red;
            /*transparent 完全透明*/
            border-left: 30px solid transparent;
            border-right: 30px solid transparent;
        }

效果如图,当然你还可以更改color及三条边的长度来做出等腰三角形等:

end

2018-06-01

原文地址:https://www.cnblogs.com/tielemao/p/9122278.html

时间: 2024-08-18 19:02:24

CSS学习摘要-盒子模型的相关文章

CSS学习之盒子模型

1. 前言 盒子模型,英文即box model.无论是div.span.还是a都是盒子. 但是,图片.表单元素一律看作是文本,它们并不是盒子.这个很好理解,比如说,一张图片里并不能放东西,它自己就是自己的内容. 2. 盒子中的区域 一个盒子中主要的属性就5个:width.height.padding.border.margin.如下: width和height:内容的宽度.高度(不是盒子的宽度.高度). padding:内边距. border:边框. margin:外边距. 盒子模型的示意图:

DIV+CSS两种盒子模型(W3C盒子与IE盒子)

在辨析两种盒子模型之前,先简单说明一下什么叫盒子模型. 原理: 先说说我们在网页设计中常听的属性名:内容(content).填充(padding).边框(border).边界(margin), CSS盒子模式都具备这些属性. 这些属性我们可以把它转移到我们日常生活中的盒子(箱子)上来理解,日常生活中所见的盒子也就是能装东西的一种箱子,也具有这些属性,所以叫它盒子模式. 特点: 每个盒子都有:边界.边框.填充.内容四个属性: 每个属性都包括四个部分:上.右.下.左:这四部分可同时设置,也可分别设置

CSS Flexbox 弹性盒子模型

CSS Flexbox 弹性盒子模型 设置元素样式为 display: flex 或 display: inline-flex, 让元素变成flex容器, 从而可以通过flex模式布局它的子元素. flex-direction: 值 row | row-reverse | column | column-reverse默认值 row flex-wrap: 值 nowrap | wrap | wrap-reverse默认值 nowrap flex-flow: 值 <flex-direction>

CSS学习摘要-引入样式

CSS学习摘要-引入样式 注:主要是摘录自MDN 网络开发者这个网站的. CSS 实际上如何工作? 当浏览器显示文档时,它必须将文档的内容与其样式信息结合.它分两个阶段处理文档: 浏览器将 HTML和 CSS转化成 DOM(文档对象模型).DOM在计算机内存中表示文档.它把文档内容和其样式结合在一起. 浏览器显示 DOM 的内容. 如何将你的 CSS 应用到你的 HTML 上 这有你常见的三种不同方式将 CSS 应用到 HTML 文档上,有的方式比其他方式更有用.在这里,我们将简要回顾一下每一种

CSS基础学习——理解盒子模型

初了解 CSS盒子模型,一个神秘的方形组织. MDN中的定义:W3C盒模型是 CSS 规范的一个模块,它定义了一个长方形的盒子,每个盒子拥有各自的内边距和外边距,并根据视觉格式化模型来对元素进行布局. 自己的话来解释一番:盒子模型是相对于块状元素和行内可替换元素而言的,当我们编辑好html与css,命令浏览器开始渲染时,浏览器的渲染引擎会根据盒子模型而将所有符合要求的元素表示为一个矩形的盒子,而我们编写好的CSS样式,便决定着这个盒子的各组成元素的大小.盒子的位置.颜色.背景.边框等等属性. 两

CSS学习笔记——盒模型,块级元素和行内元素的区别和区别

今天本来打算根据自己的计划进行前端自动化的学习的,无奈早上接到一个任务需求需要新增一个页面.自从因为工作需要转前端之后,自己的主要注意力几 乎都放在JavaScript上面了,对CSS和HTML这方面其实基础真的很差,今天在写页面的时候就被浮动啊.内外边距啊这些耽误了不少时间. 反思一下,自己确实在这些基础方面的不足很多,所以今后的学习笔记主要是我在工作中遇到的一些问题和他们的解决方法.其中可能中会有JS.CSS.HTML各方面的,我会把自己每一天学到的内容都记录一下,辅助自己打好基础. 今天在

web第六天,CSS优先级与盒子模型

一,CSS继承 文字相关的样式可以被继承 例 : color   line-height   font-style   font-size   font-weight 布局相关的样式不能被继承 (默认行为) 通过设置inherit值,可以改变默认的继承方式. 二,CSS优先级 相同样式优先级 当设置相同样式时,后写的优先级较高,但不建议出现重复设置样式的情况. 内部样式与外部样式 内部样式与外部样式优先级相同,如果都设置了相同样式,后引入的优先级高. 单一样式优先级 style行间> id>

标准W3C盒子模型和IE盒子模型CSS布局经典盒子模型(转)

盒子模型是css中一个重要的概念,理解了盒子模型才能更好的排版.其实盒子模型有两种,分别是 ie 盒子模型和标准 w3c 盒子模型.他们对盒子模型的解释各不相同,先来看看我们熟知的标准盒子模型: 从上图可以看到标准 w3c 盒子模型的范围包括 margin.border.padding.content,并且 content 部分不包含其他部分. ie 盒子模型 从上图可以看到 ie 盒子模型的范围也包括 margin.border.padding.content,和标准 w3c 盒子模型不同的是

CSS边距---盒子模型

CSS盒子模型 盒子模型主要是有margin(外边距).border(边框).padding(内边距).content(内容)组成,这些属性我们可以把它转移到我们日常生活中的盒子上来理解,日常生活中所见的盒子也就是装东西的箱子,也具有这些属性,所以叫它盒子模型 其中content(内容)又可以有两个元素width(宽)和height(高) CSS边框样式 可以使用border-style来设置边框的样式,也可以分别来设置上下左右的样式: border-top-style border-left-