当前位置: 首页 > Web前端 > HTML

[翻译]HTML&CSSLesson4-BoxModel

时间:2023-04-02 22:31:17 HTML

现在我们已经熟悉了HTML和CSS。学习了它的基础知识。现在让我们更深入地了解页面上元素的呈现和大小。在本课中,我们将讨论什么是盒子模型及其工作原理。我们还将在课程中学习一些新的CSS属性,并介绍三个长度单位。元素是如何显示的在了解盒子模型之前,我们先来了解一下元素是如何显示的。在第二课中,我们学习了块元素和行内元素的区别。快速回顾一下,块元素从一个新行开始并占据所有可用宽度,无论它们是否有内容。另一方面,内联元素是并排显示的,它们的宽度会随着内容的变化而变化。块元素通常用于大块内容,例如标题、结构元素。内联元素用于小块内容,例如加粗或斜体一些句子。display属性显示元素(例如块元素、行内元素和其他元素)如何由display属性display确定。每个元素都有一个默认的显示属性值。与其他属性值一样,可以覆盖此属性值。显示值有很多,最常用的有block、inline、line-block和none。我们可以使用CSS选择一个元素,然后更改并重新声明该元素的显示属性的值。如果值为block,则该元素可以显示为块元素。p{display:block;}将值设置为inline以将元素转换为行内元素。p{display:inline;}inline-block比较有意思,它可以让元素的所有块元素的属性生效。但是,元素显示为内联元素,不会另起一行。p{display:inline-block;}两个内联块元素之间的间隙。inline-blockinline-block元素有一个很重要的点,就是它们不是首尾相接的。两个行内块元素之间有一个小间隙。这种差距虽然令人讨厌,但却是正常的。我们将讨论为什么存在这个差距以及如何消除它。最后是none属性值,它会完全隐藏该元素,在页面渲染时将其视为不存在。任何包含在该属性值元素中的元素都将被隐藏。div{display:none;}了解元素如何显示以及如何修改display属性非常重要,因为它会影响盒模型的渲染效果。在讨论盒模型时,我们就会知道它们之间的区别、意义和影响。什么是盒子模型?根据盒子模型的概念,页面上的每个元素都是一个矩形盒子,有宽度、高度、padding、border和margin。页面上的每一个元素都符合盒模型的定义,因此非常重要。让我们使用一些新的CSS属性来熟悉它。使用盒子模型,每个元素都是一个矩形盒子,有几个属性可以决定盒子的大小。盒子的核心属性是元素的宽度和高度。这两个值可能是由元素的display属性,元素的内容,或者具体的width和height属性值产生的。填充和边框扩展了元素的高度和宽度。最后是我们在边框外定义的边距。盒模型对应的CSS属性有:width、height、padding、border、margin。让我们看一个例子:div{border:6pxsolid#949599;高度:100px;边距:20px;填充:20px;width:400px;}根据盒模型,元素总宽度计算如下:margin-right+border-right+padding-right+width+padding-left+border-left+margin-left使用上面公式,可以算出高宽值例子中Width:492px=20px+6px+20px+400px+20px+6px+20pxHeight:192px=20px+6px+20px+100px+20px+6px+20px毫无疑问盒子模型是HTML和CSS中最令人困惑的部分之一。我们将width的值设置为400像素,但元素的实际宽度为492像素。默认情况下,框模型是可加的。所以要确定盒子的实际尺寸,我们需要考虑四个边的内边距、边框和外边距。width不仅仅是width属性的值,还有左右两边的padding、borders、margin。到目前为止,上述属性似乎没有多大意义。因为这只是为了阐明构成盒子模型的所有属性:宽度、高度、填充、边框和边距。宽度和高度每个元素都有默认的高度和宽度。虽然宽度和高度都可能为0像素,但默认情况下浏览器会以该大小呈现每个元素。元素的默认宽度和高度取决于元素的显示方式。如果该元素是页面布局的关键元素。然后需要设置具体的宽度和高度属性值。在这种情况下,只能为非行内元素指定属性值。width元素的默认宽度取决于其display属性的值。块元素的默认宽度为100%,占据整行。内联元素和内联块元素的宽度都会随着元素内容的变化而变化。内联元素没有固定的尺寸,所以width和height属性只对非内联元素有效。下面是一个为非行内元素设置宽度的例子:div{width:400px;}Height元素的默认高度取决于它的内容。元素根据内容的需要垂直扩展或收缩。我们可以使用height属性为非行内元素设置高度:div{height:100px;}调整行内元素请记住,行内元素不支持width和height属性及其关联值。块元素和内联块元素支持width和height属性及其对应的值。边距和填充浏览器根据元素设置它们的默认边距和填充,使其更易读。让我们使用基于文本的元素来看一下这种现象。默认边距和填充可能因浏览器和元素而异。我们在第1课中谈到了CSS重置,以将这些差异缩小或归零。这样我们就可以从头开始定义我们需要的样式。margin属性设置元素周围的空间量。边距在元素的边界之外并且是完全透明的。边距帮助我们将元素定位在页面的特定位置,并使它们远离其他元素。例子如下:div{margin:20px;}margin有一个特殊的现象,即垂直边距margin-top和margin-bottom在内联元素中无效,但在块元素和内联块元素中有效。padding属性类似于margin属性,只是它在边框内部,padding为元素提供内部空间。一个例子如下:div{padding:20px;}padding属性和margin属性不一致的地方是垂直padding在inline元素中也是有效的;尽管垂直填充出现在元素基线的上方或下方,但它确实存在。行内元素的边距和边距行内元素的padding和margin的实现不同于块元素和行内块元素。只有水平margin-left和margin-right对外边距有效。padding对内联元素完全有效,但是垂直的padding-top和padding-bottom显示在元素基线的上方或下方(译者注:在内联元素中添加垂直padding后,内容部分在视觉上没有偏移)。块元素和行内块元素的边距和填充显示正常。如何声明边距和边距在CSS中,很多属性都有多种声明方式。常见的写法是一个属性一个值一一列出。但是我们也可以使用速记,一个属性包含多个值。并不是所有的属性都有简写形式,所以我们必须确保写出的属性和值的结构正确。margin和padding的写法有两种:normal和abbreviated。当元素的所有边都设置了相同的边距时,可以使用margin属性,只指定一个值:div{margin:20px;}如果上下边距的值相同,则取值的左右边距是一样的,我们可以输入两个值。设置前面的顶部和底部边距的值。下面的例子设置上下边距为10像素,设置左右边距为20像素:div{margin:10px20px;}如果四个值不一致,那么我们在上、右、下、左的顺序。比如我们设置一个上外边距为10px,右外边距为20px,下外边距为0px,左外边距为15px的div:div{margin:10px20px015px;}如果我们要设置多个值,margin和padding优先。但是我们也可以用普通的写法输入属性和值的一一对应关系。每个属性名称(本例中的边距和填充)后跟一个破折号-以及要设置值的框的方向:顶部、底部、右侧和左侧。例如,padding-left属性只接受一个值,它设置元素的左内边距;margin-top只接受一个值,它设置元素的顶部外边距。div{margin-top:10px;padding-left:6px;}当我们只想在一侧设置margin和padding值时,这种常见的写法是最好的选择。保持代码精确可以防止混淆。例如,我们是否只希望元素的上、右、左、左外边距为0,是否只希望下外边距为10像素?用通俗易懂的语言输入属性和值可以使目标更加具体。在处理三个或更多值时,缩写更有帮助。outermargin和innermargin的colormargin和padding属性是完全透明的,不能设置颜色。但是因为它是透明的,所以它通过相关元素的背景颜色显示。在元素的边距中看到的颜色是其父元素的背景色。在元素的填充部分看到的颜色是元素的背景色。边框边框在填充和边距之间绘制元素的轮廓。border属性需要三个值:宽度、样式和颜色。border属性简写值的顺序是:width、style、color。在正常的书写中,边框的三个属性分别命名为:border-width、border-style和border-color。普通表示法更容易修改和重写,因为它是单个值。边框的宽度和颜色可以分别使用第三课讨论的长度单位和颜色值。边框有许多不同的样式。最常用的样式值是solid、dashed、dotted和none,但您可以在列表中看到许多其他样式值。下面是设置边框的例子:div{border:6pxsolid#949599;}单边边框与margin和padding属性相同,一次只能在元素的一个方向设置边框.使用属性名称:border-top、border-right、border-bottom和border-left。它们的属性值与边框的属性值相同:宽度、样式和颜色。如下图:div{border-bottom:6pxsolid#949599;}此外,单边边框的样式还可以细分,如下图:div{border-bottom-width:12px;}这些高度细分的边框属性名都是用连字符隔开的,以border这个词开头,接着是border的方向:top,right,bottom,left,最后是要设置的样式:width,style,color。border-radiusborder-radius使元素的角变圆。border-radius接受各种长度单位,例如百分比和像素,以确定元素角的圆角半径。单个值表示四个角的弧度。两个值分别代表top-left/bottom-right和top-right/bottom-left。输入四个值依次表示:top-left、top-right、bottom-right和bottom-left。在考虑多个border-radius值(包括margin和padding)的顺序时,请记住它们是从左上角开始顺时针排序的(margin和padding从顶部开始)。div{border-radius:5px;}border-radius属性也允许我们用正常的方式写单个属性值。这些常用属性以单词边框开头,然后是角的垂直位置(顶部或底部),然后是角的水平位置(左或右),最后是半径。例如,要设置

右上角的圆角半径,可以使用border-top-right-radius属性:div{border-top-right-radius:5px;}box-sizing现在,在盒子模型中有一个额外的属性。如果将元素的宽度设置为400像素,并将填充设置为20像素,将边框设置为10像素,则框的实际宽度为460像素。请记住,框的宽度是通过添加width、padding和border获得的。但是在CSS3中,盒子模型有不同的计算方法。CSS3引入了box-sizing属性,彻底改变了盒模型的运行方式和元素尺寸的计算方式。该属性具有三个主要值——content-box、padding-box和border-box——它们各自计算框模型的大小略有不同。content-boxcontent-box这个属性值是默认值。这个默认值和元素不加box-sizing属性时的效果是一致的。元素是根据width和height属性的值,加上padding、border、margin属性值来计算得到盒子的实际大小。div{-webkit-box-sizing:内容框;-moz-box-sizing:内容框;box-sizing:content-box;}浏览器特定的属性和值上例中box-sizing属性前的链接是什么字符和字母?引入CSS3后,浏览器逐渐开始通过前缀支持新的属性和值,包括box-sizing属性。随着一些CSS规范被浏览器广泛支持以及浏览器版本更新,前缀的作用越来越小,随着时间的推移将不再是问题。但它在旧浏览器中仍然是不可或缺的。属性名和属性值都可以加前缀。比如上面例子中的box-sizing属性名是有前缀的。浏览器可以选择什么时候加前缀,什么时候不加前缀,所以有的属性需要加特定浏览器的前缀,有的属性不需要。在接下来的课程中,如果属性或值需要前缀,则只会在引入该属性时添加前缀(这有助于保持代码简洁)。但是不要忘记在实际编写代码时添加前缀。最常见的浏览器前缀总结如下:Mozilla的Firefox浏览器:-moz-Microsoft的IE浏览器:-ms-Webkit(Google的Chrome浏览器和Apple的Safari浏览器):-webkit-padding-box当属性值为padding-box时,该元素将padding属性值计算为width和height属性值,改变了盒模型的计算方式。例如,如果元素的宽度设置为400像素,而padding值设置为20像素,则最终元素的实际宽度仍为400像素。随着padding的扩大,元素的内容区域缩小,但盒子的实际大小并没有改变。如果我们增加边框或边距,那么盒子的大小就是这些属性的值加上宽度和高度。比如我们设置元素的宽度为400像素,每个方向的border设置为10像素,padding设置为20像素,那么元素的实际宽度就是420像素。div{box-sizing:padding-box;}valuepadding-boxhasbeendeprecated随着CSS规范的更新,box-sizing的valuepadding-box已经被弃用,我们不应该再使用它了。BorderBox的最后一个属性值是border-box,它把元素的width和height属性值中的border和padding都算进去了。例如,一个元素的宽度为400像素,每边填充20像素,边框为10像素,但实际宽度仍为400像素。如果我们还加上了margin属性,那么在获取框的总尺寸时需要加上它的值。无论box-sizing属性的值如何,在计算总框大小时都需要添加任何边距值。div{box-sizing:border-box;}使用box-sizing属性一般来说,box-sizing最好的属性值是border-box,比较容易计算。如果我们将一个元素的宽度设置为400像素,那么无论你增加边框还是填充,它的大小仍然是400像素。或者,我们也可以很容易地做出相对值。如果我们将一个元素的宽度设置为40%,元素每边的padding值为20像素,border值为10像素。然后尽管在某处设置了像素值,元素框的实际大小仍然是40%。唯一遗憾的是box-sizing是CSS3的一个属性,并不是所有的浏览器都支持,尤其是老版本。好在随着浏览器版本的更新,影响会越来越小。我们在使用box-sizing的时候需要注意哪些浏览器会出现兼容性问题。开发者工具大多数浏览器都有开发者工具。我们可以使用这些工具来查看页面上的元素,这些元素的HTML结构和CSS属性及其值。他们中的大多数都有盒模型图。打开Chrome浏览器的菜单栏,在“更多工具”选项中找到“开发者工具”选项并点击,浏览器窗口底部会弹出一个窗口,里面提供了一些代码检查工具。悬停或单击视口中的元素节点以查看有关此元素的信息。选择一个元素后,选择窗口右侧的“Computed”选项,我们就可以看到我们选择的元素的盒模型。Chrome、Firefox、Safari和其他浏览器中都有开发者工具。通过查看源代码,您可以学到很多东西。我一般在写HTML和CSS的时候都会打开开发者工具,经常用它来查看和分析其他网站的源代码。Exercise现在让我们回到我们之前做的“styleworkshop”站点,给它添加更多的内容。首先,在main.css文件中添加一个box-sizing属性,值为border-box,这样可以让我们的元素更容易控制。在文件中的页面重置样式下,添加有助于站点布局的注释。将它放在样式重置代码下会将它放在正确的堆栈上。这里,我们可以使用通配符选择器*,后面跟着带有伪元素*:before和*:after的选择器,这样就可以选择页面中的所有元素,并将它们的box-sizing值设置为border-box。请记住,box-sizing是有前缀的,因为它是一个较新的属性。/*==========================================网格==============================================*/*,*:之前,*:之后{-webkit-box-sizing:border-box;-moz-box-sizing:边框框;box-sizing:border-box;}接下来我们需要创建一个类属性作为元素的容器。用它来设置不同元素的通用宽度和填充属性,并使元素居中。在我们的通配符选择器下,创建一个名为container的新类选择器。在选择器中,将宽度设置为960像素,将padding-left和padding-right设置为30像素,将上下边距设置为0,将左右边距设置为auto。container告诉浏览器使用这个选择器的所有元素的宽度。将左右边距设置为auto,连同设置的宽度值,可以让浏览器自动计算出左右边距相等,元素相对于页面居中。最后设置左右padding,让内容不紧贴元素边缘,为内容提供一点喘息空间。.container{保证金:0自动;左填充:30px;向右填充:30px;width:960px;}现在容器可以使用了,我们将它添加到所有页面的
元素中,所有页面包括index.html、speakers.html、schedule.html、venue.html和register.html页面。...
...接下来,我们将容器添加到引入会话的元素中,并包含
在`
元素上作为子元素。...
此外,在其他页面中包含

元素的
元素中也加入了容器。

...

我们稍后会回来调整这些元素和类属性。现在让我们先做另一件事。现在我们的内容已居中,让我们为我们的元素创建垂直间隔。让我们首先将标题和段落的下边距设置为22px。我们把这个排版风格和它的注解放在之前的容器风格下。/*==========================================排版===========================================*/h1,h3,h4,h5,p{margin-bottom:22px;}这里我们跳过了

元素,因为

在设计中不需要边距,而

这次也不会用到。现在我们在页面第一个
的底部放置一个按钮,并给它一个边框和圆角。我们首先添加一个元素,并将其class属性值设置为btn和btn-alt。...接下来,我们在typographystyle下添加样式这两个属性值。首先创建一个可以被所有按钮共享的类选择器btn。我们希望所有按钮的边框半径为5像素,显示为内联块,并移除所有边距。/*==========================================按钮=============================================*/.btn{边框半径:5px;显示:内联块;margin:0;}我们使用btn-alt为当前按钮设置特殊样式。我们添加一个1像素的灰色边框,并将顶部和底部填充设置为10像素,将左右填充设置为30像素。btn-alt{border:1pxsolid#dfe2e5;padding:10px30px;}我们在同一个元素中使用了btn和btn-alt,那么相应的样式就会被渲染出来。在主页上,我们为包含上述元素的
元素设置填充样式。我们通过在其上添加一个类属性值英雄来做到这一点。...
最后我们在css文件中分离出一个section来设置首页的样式,然后给hero加上padding属性。/*==========================================首页==============================================*/.hero{填充:22px80px66px80px;}现在我们的网站更完整了,尤其是主页。通配符选择器在本练习的第一步中,我们提到了通配符选择器*,它选择所有元素。与其一一列出所有可能的单个元素,不如使用它来选择所有元素。我们在第一步中也提到了伪元素:before和:before,它们可以在CSS中动态生成元素。我们不会在当前项目中使用它。但是,通常的做法是将伪元素与通配符选择器一起使用。演示源代码这是练习的源代码。单击下载摘要稍事休息,我们将继续。学习盒子模型的一切并不容易。这些概念虽然介绍的很简单,但是要掌握起来却花了很多时间。本课内容总结如下:元素如何显示什么是盒模型,为什么它很重要如何修改元素的大小,包括宽度和高度如何添加外边距、内边距和边框如何修改元素盒-调整大小及其对盒模型的影响现在我们对如何显示元素和设置大小有了更好的理解,让我们更深入地了解元素定位。文章来源http://learn.shayhowe.com/htm...