网易微专业之《前端工程师》学习笔记(5)-CSS布局属性(草稿)

网页的布局其实在我理解起来,就类似于排版的问题。有点像平面设计中的内容排版。只不过平面设计中的排版是在photoshop里做的,而网页的排版却要通过写代码来实现。排版的意思,把这块东西放在网页的哪个地方,和别的东西怎么协调起来排版。布局要搞明白的意思大概就是这个。

布局会涉及到的几个CSS属性大致有这么一些。display,主要是用来设置元素的显示方式,position主要是用来给元素定位的,你可以用这个属性任意给元素定位到网页的任何一个地方。float也是用来定位的,只不过它的定位方式跟position有点不同,他只有两个方向,就是让元素左浮动或者又浮动。flex是很新鲜的一种流式布局方法,可以用它来做一些不是很复杂的响应式布局。下面我们来详细介绍下这几个属性。

01.display:设置元素的显示方式

它的值有很多,看下面我收集到的表格。
(1)display的值有哪些?

描述
none 此元素不会被显示
block 此元素将显示为块级元素。
inline 默认,此元素会被显示为内联元素。
inline-block 行内块元素
list-item 此元素会作为列表显示
table 此元素会作为块级表格来显示(类似<table>)
inline-table 此元素会作为内联表格来显示(类似<table>)
table-row-group 此元素会作为一个或多个行的分组来显示(类似<tbody>)
table-header-group 此元素会作为一个或多个行的分组来显示(类似<thead>)
table-footer-group 此元素会作为一个或多个行的分组来显示(类似<tfoot>)
table-row 此元素会作为一个表格行显示(类似<tr>)
table-column-group 此元素会会作为一个或多个列的分组来显示(类似<colgroup>
table-column 此元素会作为一个单元格列显示(类似<col>
table-cell 此元素会作为一个表格单元格显示(类似<td>和<th>)
table-caption 此元素会作为一个表格标题显示(类似<caption>

其中display最主要的三个值我下面再简单介绍下,其他的值不是很常用,不过我上面列出来的display的值只是其中的大部分,还算比较常用,如果有能力都要尝试下,当然除了我下面重点介绍的三个最常用的值之外,其他的值浏览器支持的不是很好。

(2)display最常用的三个值介绍

display 默认宽度 可设置宽高 起始位置 代表元素有哪些
block 父元素宽度 换行 div\p\h1~h6\ol\ul\dl\table\address\blockquot\form
inline 内容宽度 同行 a\span\br\i\em\strong\label\q\var\cite\code
inline-block 内容宽度 同行 input\textarea\select\button
  • block:默认宽度为父元素的宽度,可设置宽高,换行显示。

  • inline:默认宽度为内容宽度,也就是说,如果给这个元素设置了display:inline;元素的宽度就会变成它里面内容的宽度。不可以设置宽高,与别的前后元素之间同行显示。如果遇到宽度不够一行要换行的话,inline的元素是会内容拆开来换行的,相对来说,inline-block的元素反而是个整体,不拆开来换行,是整块换行的。

  • inline-block:默认宽度为内容宽度,可设置宽高,同行显示。如何遇到内容不够一行,是会整块作为一个整体,整块换行。inline-block和block的区别是inline-block对内是block属性,对外显示是inline属性,所以block的话,居中可以用margin:auto,但是inline-block用margin:auto就没用了,不能做到居中,inline-block和block的时候margin:auto的浏览器计算方法是不一样的。

display:inline-block;在ie6、ie7下只有设置在默认显示方式为inline的元素上才会生效,那么在IE6、IE7下,怎么实现块级元素的inline-block属性值设置呢?

E6、IE7支持对html行内元素设置inline-block。实际上只是看起来支持而已,IE6、IE7并不识别inline-block这个属性值,只是触发了layout,让行内元素有了inline-block的表征,比如说:行内显示且可设置宽高等等。

而对html块级元素设置inline-block,也只是触发了layout,对块级元素设置行内块级属性的目的没有达到。那么在IE6、IE7下,怎么实现块级元素的inline-block属性值设置呢?

常见有2种方法:
1.先使用display:inline-block属性触发块元素,然后再定义display:inline,让块元素呈递为行内对象(两个display 要先后放在两个CSS声明中才有效果,这是IE的一个经典bug,如果先定义了display:inline-block,然后再将display设回 inline或block,layout不会消失),代码如下:

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

2.直接让块元素设置为行内对象呈递(设置属性display:inline),然后触发块元素的layout(如:zoom:1 或float属性等),代码如下:

div { display:inline-block; _zoom:1;_display:inline;}/*推荐IE6*/
div { display:inline-block; *zoom:1;*display:inline;}/*推荐IE6或IE7*/

(3)display:none与visibility:hidden的区别

给元素设置了display:none以后,元素就消失了,在元素下面的元素会取代那个消失的元素的位置,而visibility:hidden设置的元素,是显示隐藏,但是在文档流中,它原先的位置还在,只是那个位置是空白的,在该元素下面的元素不会窜上来取代它的位置。

02.position:设置定位方式

设置定位方式最重要的是设置参照物。且要配合别的属性一起使用,有这些属性:top、right、bottom、left、z-index。

left等方向值代表的意思

position定位工作原理是先通过设定position:absolute/relative/fixed来确定要定位的参照物。然后通过left\right\top\bottom来设置元素与参照物之间的距离可以从图中看出,left\right\top\bottom表示元素边缘与参照物之间的距离。

然后再来讲讲position:absolute/relative/fixed的意思。relative相对定位,absolute绝对定位,fixed固定定位。三个定位各有自己的特色。

相对定位relative

如果给中间的那个橘黄小块设置了相对定位,它的位置是不会有变化的。仍然在文档流中。而且它的参照物是元素自己本身。所以一旦给这个元素再追加设置方向值topleft,意思就是相对于元素本身这个参照物原来的位置,左边距偏移了20px,上边距偏移了10px。

这个相对定位的属性,由于是以元素本身作为参照物的,而且如果单纯只是给元素设置相对定位的话,元素本身的位置是不发生变化的,因此,它常常用来作为下面要讲的绝对定位元素的参照物来设置。


绝对定位absolute

如果给图片中位于中间的那个深橘色的小块设置了绝对定位。那么按照绝对定位的特点,这个小块会脱离文档流,这样一来,位于下面的浅色橘黄小块就会窜上来,取代原先那个深色橘黄小块的位置。而且由于设置了绝对定位的关系,深色橘黄小块的宽度会缩小,变成内容宽度。

如果再给这个深色橘黄小块追加方向值top\left,绝对定位的小块的参照物如果不设置的话就是html的根元素,如果设置了的话,一般要看它祖先元素是不是设置了相对定位的,设置了的话,就按照那个相对定位的元素为参照物进行位置的偏移。

fixed固定定位

如果给位于中间的深橘色小块设置了position:fixed;那么这个小块会根据固定定位的特色,宽度会收缩成内容宽度,并且脱离文档流,而位于它下方的浅橘色小块会窜上来取代它的位置。而固定定位的参照物是浏览器视窗,所以一旦给这个深橘色小块追加方向值left\bottom,那么它位置的偏移就会按照浏览器的视窗作为参照物。偏移的结果就看上图的样子了。position:fixed 在ie6及以下不支持

03.float

float浮动

如果给这个深橘色的小块添加float:right;那么这个小块的宽度会收缩成内容宽度,并且脱离文档流,设置了右浮动,就会向右边一直移动,直到碰到边界。左浮动就向左边。

另外,值得注意的是,float对于元素来说是脱离文档流的,但是对于元素的内容来说是占据文档流的。这句话怎么理解呢,看下面的图:

float半脱离文档流

其实对于上图中的那个浅橘色的小块来说,它的大小是包括了那个深橘色的小块的,只不过它左边的地方被深橘色小块覆盖掉了,所以对于浅橘色小块这个元素来说,深橘色这个float元素是脱离文档流的。但是奇怪的是浅橘色小块的内容,确实如图中这样显示的,说明,对内容来说,float元素还是在文档流占据位置的。

关于清除浮动的方法有两个,一个是在浮动元素后面加一个空白的元素,给这个空白的元素添加样式{clear:both;}就好了。比如在浮动元素后面加一个

<br class="cb"/>

.cb{clear:both;height:0;overflow:hidden;visibility:hidden;}

另一种办法就是clearfix。给浮动元素的父元素添加一个clearfix的类。

.clearfix:after{content:".";display:block;clear:both;height:0;overflow:hidden;visibility:hidden;}
.clearfix{zoom:1;}

另外关于为什么要加zoom:1的原因,zoom的作用可以看看这篇文章《CSS中zoom:1的作用 ,小标签大作用》

04.flex

从缺,有空补~~

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

推荐阅读更多精彩内容