1.CSS布局_part 1

参考资料: learn css layout

1. display

每个元素都有一个默认的 display 值,这与元素的类型有关。对于大多数元素它们的默认值通常是 block 或 inline 。一个 block 元素通常被叫做块级元素。一个 inline 元素通常被叫做行内元素。

1.1 block

div 是一个标准的块级元素。一个块级元素会新开始一行并且尽可能撑满容器。其他常用的块级元素包括pform 和HTML5中的新元素: headerfootersection 等等。

1.2 inline

span 是一个标准的行内元素。一个行内元素可以在段落中 <span> 像这样 </span> 包裹一些文字而不会打乱段落的布局。 a元素是最常用的行内元素,它可以被用作链接。

1.3 none

另一个常用的display值是none。一些特殊元素的默认 display 值是它,例如 scriptdisplay:none通常被 JavaScript 用来在不删除元素的情况下隐藏或显示元素。

它和 visibility 属性不一样。把 display 设置成 none 不会保留元素本该显示的空间,但是visibility: hidden;还会保留。

1.4 其他 display 值

还有很多的更有意思的 display 值,例如 list-itemtable这里有一份详细的列表。之后我们会讨论下 inline-block 和 flex 。

每个元素都有一个默认的 display类型。不过可以随时随地的重写它——可以把有特定语义的元素改成行内元素。常见的例子是:把 li 元素修改成 inline,制作成水平菜单。

2. 水平居中 margin: auto;

#main {
  width: 600px;
  margin: 0 auto; 
}

设置块级元素的 width可以阻止它从左到右撑满容器。然后你就可以设置左右外边距为 auto来使其水平居中。元素会占据你所指定的宽度,然后剩余的宽度会一分为二成为左右外边距。

唯一的问题是,当浏览器窗口比元素的宽度还要窄时,浏览器会显示一个水平滚动条来容纳页面。

#main {
  max-width: 600px;
  margin: 0 auto; 
}

在这种情况下使用max-width替代 width 可以使浏览器更好地处理小窗口的情况。这点在移动设备上显得尤为重要.( 所有的主流浏览器包括IE7+在内都支持max-width)

3. 盒模型

在我们讨论宽度的时候,我们应该讲下与它相关的一个重点知识:盒模型。当你设置了元素的宽度,实际展现的元素却能够超出你的设置:因为元素的边框和内边距会撑开元素。看下面的例子,两个相同宽度的元素显示的实际宽度却不一样。

.simple {
  width: 500px;
  margin: 20px auto;
}

.fancy {
  width: 500px;
  margin: 20px auto;
  padding: 50px;
  border-width: 10px;
}

box-sizing

当你设置一个元素为 box-sizing: border-box; 时,此元素的内边距和边框不再会增加它的宽度。这里有一个与之前相同的例子,唯一的区别是两个元素都设置了 box-sizing: border-box;

.simple {
  width: 500px;
  margin: 20px auto;
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}

.fancy {
  width: 500px;
  margin: 20px auto;
  padding: 50px;
  border: solid blue 10px;
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}

这是目前最好的方法,为了让页面上所有的元素都有如此表现,所以开发者们把以下CSS代码放在他们页面上:

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

由于box-sizing 是个很新的属性,目前你还应该之前在例子中那样使用-webkit--moz-前缀。这可以启用特定浏览器实验中的特性。

注:支持IE8+。

4. position

4.1 static

.static {
  position: static;
}

static是默认值。任意position: static; 的元素不会被特殊的定位。一个 static 元素表示它不会被“positioned”,一个position 属性被设置为其他值的元素表示它会被“positioned”。

4.2 relative

.relative1 {
  position: relative;
}
.relative2 {
  position: relative;
  top: -20px;
  left: 20px;
  background-color: white;
  width: 500px;
}

relative表现的和 static 一样,除非你添加了一些额外的属性。

在一个相对定位(position属性的值为relative)的元素上设置toprightbottomleft 属性会使其偏离其正常位置。其他的元素则不会调整位置来弥补它偏离后剩下的空隙。

image

4.3 fixed


.fixed {
  position: fixed;
  bottom: 0;
  right: 0;
  width: 200px;
  background-color: white;
}

一个固定定位(position属性的值为fixed)元素会相对于视窗来定位,这意味着即便页面滚动,它还是会停留在相同的位置。和 relative 一样, toprightbottomleft属性都可用。

一个固定定位元素不会保留它原本在页面应有的空隙。

移动浏览器对 fixed 的支持很差。这里有相应的解决方案.

4.4 absolute

.relative {
  position: relative;
  width: 600px;
  height: 400px;
}
.absolute {
  position: absolute;
  top: 120px;
  right: 0;
  width: 300px;
  height: 200px;
}

image

absolute是最棘手的position值。 absolutefixed 的表现类似,除了它不是相对于视窗而是相对于最近的"positioned"祖先元素。如果绝对定位(position属性的值为absolute)的元素没有"positioned"祖先元素,那么它是相对于文档的body 元素,并且它会随着页面滚动而移动.

注意:一个"positioned"元素是指position值不是static 的元素。

position例子

.container {
  position: relative;
}
nav {
  position: absolute;
  left: 0px;
  width: 200px;
}
section {
  /* position is static by default(默认) */
  margin-left: 200px;
}
footer {
  position: fixed;
  bottom: 0;
  left: 0;
  height: 70px;
  background-color: white;
  width: 100%;
}
body {
  margin-bottom: 120px;
}

image

sectionrgin-left样式确保了有足够的空间容纳nav 元素。

当调整浏览器窗口时,除了nav(position: absolute;)之外,都可以实现自适应。

这个例子在容器比nav元素高的时候可以正常工作。如果容器比nav元素低,那么nav会溢出到容器的外面

5. float

另一个布局中常用的CSS属性是 float 。Float 可用于实现文字环绕图片,如下:

img {
  float: right;
  margin: 0 0 1em 1em;
}

image

6. 清除浮动

6.1 clear

clear 属性被用于控制浮动。比较下面两个例子:

<!-- html -->
<div class="box">...</div>
<section>...</section>
/* css */
.box {
  float: left;
  width: 200px;
  height: 100px;
  margin: 1em;
}

image

在这个例子中, section元素实际上是在 div 之后的(译注:DOM结构上)。然而div元素是浮动到左边的,于是 section中的文字就围绕了div ,并且section 元素包围了整个元素。

如果我们想让section 显示在浮动元素之后可采用以下做法:

.box {
  float: left;
  width: 200px;
  height: 100px;
  margin: 1em;
}
.after-box {
  clear: left;
}
image

section 添加class="after-box"
使用clear 我们就可以将这个段落移动到浮动元素 div 下面。你需要用 left 值才能清除元素的向左浮动。你还可以用 rightboth来清除向右浮动或同时清除向左向右浮动。

6.2 clearfix hack(兼容性好)

image

由于图片比包含它的元素还高, 而且它是浮动的,于是图片就溢出到了容器外面。

有一种方法可以解决这个问题 —— 清除浮动(clearfix hack).

加入一些新的CSS样式:

.clearfix {
  overflow: auto;
}
image

如果你想要支持IE6,还需要再加入如下样式:

.clearfix {
  overflow: auto;
  zoom: 1;
}

浮动布局例子

之前用 position实现的布局例子,改用float 实现

image

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

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,703评论 1 92
  • "display"属性 display 是CSS中最重要的用于控制布局的属性。每个元素都有一个默认的 displa...
    PYFang阅读 274评论 0 0
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,298评论 0 11
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 1,722评论 0 2
  • 昨天下午和朋友聊天,朋友跟我说,发现我最近状态似乎挺好的,比前段时间好了很多。我愣了一会笑说,难道是因为以前和...
    迷路的傻狐狸阅读 256评论 0 1