响应式布局---盒子模型以及FLEX布局

前言

时代在进步,人对美也有了更高的追求,对于物品的追求不再是简简单单的实用就行,对美观也是有所要求。web网站也是如此,当我们用不同的设备访问一个网站时,我们是希望网站呈现出的东西跟我的设备刚刚匹配,页面的排版、字体的大小、模板的布局就专门针对这个设备开发的APP一样。但是终端设备种类如此之多,如果针对一个设备就开发一种页面,那么程序员就不单单是头秃了。所以,响应式页面布局就来了。

正文

今天就从CSS3引入的box-sizingFlex布局下手。

盒子模型

flex-01.jpg

上面就是一个盒子模型,下面是它的实现代码

div {
    width: 200px;
    height: 200px;
    border: 5px solid #ccc;
    padding: 20px;
    margin: 20px;
  }

我们最初设置这个div的宽高是200x200,但当我们设置paddingborder以后却发现这个div实际的宽高变成了250x250,这样就有一个问题,在开发的过程必须要计算它的宽高,另外当开发一个响应式页面的时候,我们可能需要设置两个div的宽度都为50%,但是这个divpaddingborder的时候,50%50%再加上padding/border就大于整个页面的宽度,这不是我们所希望的结果。

为了解决上面的问题,CSS3引入了box-sizing属性

box-sizing

box-sizing: content-box|border-box|inherit;

再看一下上面的图,这个图就跟个城市规划图一样,有4个环,一环是content环,二环是padding环,三环是border环,四环是margin环,于是box-sizing的两个属性就对应图中的一环和三环。(二环属性被废弃了,四环属性还没生出来)

content-box其实就一个值border-box,其他两个并没什么用。当设置为border-box时,width/height属性设置的其实是三环的大小,而不是一环的大小,也就是说设置的宽高包含了padding、border、content

当我们在上面的代码中加一句

box-sizing: border-box;

就变成了这样

flex-02.jpg

它的一环content自适应变成了150

Flex布局

基本的概念图就不搞了,看的人一头雾水,图盲一枚

Flex容器

  <div class="container">
    <div class="item item1">1</div>
    <div class="item item2">2</div>
    <div class="item item3">3</div>
    <div class="item item4">4</div>
    <div class="item item5">5</div>
    <div class="item item6">6</div>
  </div>

上面的代码的html结构中,container就是容器,当设置display:flex时,它就变成了一个Flex容器,此时它的所有子项(item)的float、clear、vertical-align就失效了。

有六种属性可以设置在Flex容器上,作用于它的子项item

  1. flex-direction: row | row-reverse | column | column-reverse
    子项的排列顺序:横向 | 横向(从右向左)| 竖向 | 竖向(从下向上)
  2. flex-wrap: nowrap | wrap | wrap-reverse;
    子项超出容器宽度是否换行:不换 | 换 | 换行(换行后第二行在第一行的上面)
  3. flex-flow: <flex-direction> || <flex-wrap>;
    集合属性,没卵用,过
  4. justify-content: flex-start | flex-end | center | space-between | space-around;
    子项对齐方式:左对齐 | 右对齐 | 居中 | 两端对齐,项目之间有相等间隔 | 平分容器的宽度
  5. align-items: flex-start | flex-end | center | baseline | stretch;
    子项的垂直对齐:上对齐 | 下对齐 | 居中对齐 | 文字对齐 | 默认值(如未设置高度,会占满容器的高度)
  6. align-content: flex-start | flex-end | center | space-between | space-around | stretch;
    这个属性跟justify-content相似,含义是轴线的竖向对齐方式,首先flex-wrap得设为为wrap,假如container宽度仅能容下两个item,那么两个item就在一根轴线上,那么上面代码中就存在三根轴线。这样以轴线为基本单位的实现方法就跟justify-content一致了,只不过一个在横向,一个在竖向。

子项item也有几个属性

  1. order: <integer>
    子项的顺序,数值越大越靠后,默认值0
  2. flex-basis: <length> | auto
    当设置这个属性以后,width属性就不起作用了,它的值可以是px也可以是%
  3. flex-grow: <number>
    项目的放大比例,默认值时0,当它的值不为0时,子项会等比放大填充满整个容器。同时这个属性也会覆盖widthflex-grow得值越大,其对应的子项宽度也越大

只有一个子项设置flex-grow后,它会填充容器所有的剩余空间

  1. flex-shrink: <number>
    项目的缩小比例,默认值1,当容器的宽度较小的时候,默认所有子项都要等比缩小的,但是当flex-shrink设置为0得时候,所有子项就会一直保持原来尺寸不变

只有一个子项设置flex-shrink为0的时候,其他子项会自动缩小,但它扔会保持原来尺寸

  1. flex: none | [<'flex-grow'><'flex-shrink'>? || <'flex-basis'>]
    234属性其实都有一个共性,就是当某一个子项设置这三个属性值与其他子项不一致时,都会导致该子项的宽度与其他不一致,而且三个属性值设置不同时还会冲突,因此三个属性集合出来一个属性flex
.item { flex : 0; }
// 相当于
.item {
  flex-grow: 1;
  flex-shrink: 1;
  flex-basis: 0%;
}

算了,集合属性变换多端,还是分开写吧。

  1. align-self: flex-start | flex-end | center | baseline | stretch;
    这个属性跟容器的align-items一个东西,当子项设置align-self的时候会覆盖容器的align-items属性。

基础理论学习完毕,多实战练习,收工。。。

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

推荐阅读更多精彩内容

  • H5移动端知识点总结 阅读目录 移动开发基本知识点 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇阅读 4,431评论 0 26
  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 3,460评论 0 6
  • 阅读目录移动开发基本知识点 calc基本用法box-sizing的理解及使用理解display:box的布局理解f...
    张宪宇阅读 1,515评论 0 1
  • 最近有家长朋友在公众号里问到有关孩子学习方法的问题,想想自己从高中以来在学习上也遇到过很多困惑,这次正好也小小地总...
    万能的造梦者阅读 444评论 0 1
  • 这是一部由白百何和郑中基主演的都市爱情轻喜剧,讲述了名牌大学毕业生郭晶因为长相不出众而丧失工作、爱情,在一...
    竹丝心语阅读 228评论 3 4