盒模型和定位

一、盒模型

页面上每一个HTML元素都是一个矩形盒子,每个矩形盒子都由heightweight组成,也可能包括内边距(padding)、边框(border)和外边距(margin)。
分解一个元素,包括盒模型的总宽,使用如下公式:
margin-right + border-right + padding-right + width+ padding-left + border-left + margin-left
类似的,总高公式:
margin-top + border-top + padding-top + height + padding-bottom + border-bottom + margin-bottom

1.度量单位

相对度量单位:

  • %
    表示包含元素的百分比;
  • em
    表示元素的字体大小,不会随所选字体的改变而改变;
  • rem
    表示文档的字体大小(即:html元素)

绝对度量单位:

  • px
    表示像素,但在不同设备上,不是完全一致的;
  • in,cm,mm
    表示英寸、厘米、毫米,但在不同设备上,不是完全一致的;
  • pt
    表示磅,一般在印刷设计中较为常见;

2.高度与宽度

元素默认的height属性由其内容决定。在垂直方向上所有元素都会尽可能的伸缩来适应内容。给一个块级元素设置一个特定的高度则需要使用height属性。

div {
    height:100px;
}

一个元素的width属性取决于它的显示类型。块级元素的width属性值默认为100%,高度则是其包含内容所需要的高度,它会铺满可用的整个横向空间。行内元素则是在横向方向尽可能的伸来适应内容。因为行内元素尺寸不可更改,CSS中width和height值只能在块级元素上起作用。

div {
    weight:400px;
}

3.外边距和内边距

给元素设置margin属性,即在元素的四周设置了一段空间。margin的值即外边距,处在边框的外面,完全透明。可以用margin来将元素定位到页面中特定的位置或者是将所有的元素隔开,给元素提供一个呼吸的空间。
padding和margin十分相像,只是padding处于元素边框的里面。padding值也就是内边距继承元素的背景,用来给元素内部提供空间,并不和margin一样用来定位元素。
元素的4个边都可以有不同的内、外边距值,顺序为:上、右、下、左。

div {
     padding:1px 2px 3px 4px;
     margin:1px 2px 3px 4px;
}

4.边框

在申明一个边框时,需要制定边框的宽度(border-width)、样式(border-style)和颜色(border-color),边框宽度通常以像素(px)为单位申明。

div {border:2px solid red;}

等价于

div {border-width:2px;}
div {border-style:solid;}
div {border-color:red;}

5.盒子大小

内边距、边框、外边距是否被作为元素的一部分计算在内,需要视情况而定。
CSS中有个新属性box-sizing,允许你在它的值border-boxcontent-box之间选择其一。
对于border-box,一旦你设置了块级元素的宽度,你对内边距、边框、外边距设置的宽度都将计算在内;相反,对于默认值的content-box,内边距、边框和外边距都不计算在盒子的宽度中。
这个属性并不完全被所有的浏览器支持,IE和 Opera已经支持此属性,我们只需要针对WebKit和 Mozilla使用前缀属性:

div {
    -webkit-box-sizing:border-box;
    -moz-box-sizing:border-box;
    box-sizing:border-box;
}

二、定位

默认的定位方式 是static(静态)定位,表示维持元素在正常的文档流中。
relative(相对)定位是相对于它自身原来在文档流中的位置来进行定位的,浏览器会保留元素原来所占用的空间。可以使用盒子的偏移属性(top,right,bottom,left)。
absolute(绝对)定位浏览器是使用包含该元素的第一个非静态定位的元素来对其进行定位的**,浏览器不会在保留元素原来所占的空间。可以配合盒子的偏移属性使用。
fixed (固定)定位与绝对定位非常相似,但它是相对于整个页面来定位的,而不是相对于它的包含元素。

html代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
  <div class="box1">
    <p class="box2">
      This is a paragraph with a fixed width,
      and left and right margins set to auto,
      So it's centered.<br>
    </p>
  </div>
</body>
</html>

CSS代码:

.box1 {
  background-color:pink;
  width:500px;
  height:200px;
  position:relative;
}

.box2 {
  background-color:green;
  width:450px;
  height:80px;
  position:absolute;
  left:50px;
  top:50px;
}

output:

position.png

在上图的例子中,div指定了postion属性值为relative,它便作为一个静态的容器,其内的绝对定位子元素p便基于它定位。因此绝对定位的p元素上下相对于静态容器div向右偏移50px,向下偏移50px。

三、浮动和清除

使用float(浮动)属性可以将元素浮动到它的包含元素(父元素)的左边或右边,后继的元素不论是块级元素还是行内元素都将环绕浮动的元素。
如果想取消浮动,仅需将clear属性应用于要取消浮动的第一个元素(元素将新起一行)。当应用clear属性时,left或right属性值需要与前面的float属性值想匹配。

html代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
  <div class="box1">
    <p class="box2">
      This is a paragraph with a fixed width,
      and left and right margins set to auto,
      So it's centered.<br>
    </p>
    <p class="box3">
      I believe that natural history has lost much by 
      the vague general treatment that is so common.
    </p>
    <p class="box4">
      What satisfaction would be derived from a ten-page
      sketch of the habits and customs of Man?
    </p>
  </div>
</body>
</html>

CSS代码:

.box1 {
  background-color:pink;
  width:500px;
  height:200px;
}

.box2 {
  background-color:green;
  width:260px;
  height:80px;
  float:left;
}

.box3 {
  background-color:blue;
  width:200px;
  height:100px;
  float:right;
}

.box4 {
  background-color:red;
  width:400px;
  height:80px;
  clear:both;
}

output:

float&clear.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容