页面架构 1-3

1. CSS Reset

浏览器对标签进行样式设置,不同浏览器默认样式有差异

CSS Reset 全局定义样式,通过标签设置样式把默认样式覆盖。

注意事项:在项目初期把 Reset 定好,引入时在第一位。

CSS Reset 没有标准答案,不同产品需求不同。


2.布局解决方案

居中布局

水平居中

(1)inline-block + text-align

块级元素默认宽度会撑满父元素,inline-block 宽度根据内容决定。

text-align 对 inline 元素起作用

优点:兼容性好

inline-block IE6,7 不支持,通过 display:inline 和 zoom:1 实现

缺点:text-align 会被子元素继承,文字居中


(2) table + margin

display:table 宽度由内容决定,类似 block,IE8 以上支持

优点:只设置了子元素,不关心父元素样式。IE6,7 可把结构换为 table 的结构


(3) absolute + transform

position:absolute 绝对定位脱离文档流,宽度由内容决定

translateX 中百分比参照物为自身宽度

优点:不对其他元素产生影响

缺点:transform 为 CSS3 新属性,兼容性较差


(4) flex + justify-content

display:flex; 子元素(flex-item)宽度为内容宽度

优点:只需设置父元素

缺点:IE6,7,8 不支持 flex

水平居中


垂直居中

(1) table-cell + vertical-align

display:table-cell; 将元素变为单元格,兼容 IE8 及以上

vertical-align 作用在 inline,inline-block 以及 table-cell 元素

优点:兼容性较好,可把结构换为 table 以兼容 IE6,7


(2) absolute + transform

优点:子元素不干扰其他元素

缺点:transform 为 CSS3 新增属性,不同浏览器需要加上不同的私有前缀


(3) flex + align-items

父元素设置 display:flex ,align-items 默认值为 stretch,子元素被拉伸,高度撑满容器

优点:只需给 parent 设置样式

缺点:flex 兼容性问题


居中

(1) inline-block + text-align + table-cell + vertical-align

优点:兼容性较好

display:table-cell 在低版本浏览器可以把结构改为 table


(2) absolute + transform

优点:不影响其他元素

缺点:transform 兼容问题


(3) flex + justify-content + align-items

优点:只设置父元素 ,不需要设置子元素

缺点:兼容性问题


多列布局

定宽与自适应

(1) float + margin

float 对元素脱离文档流,对内容不脱离文档流(文字环绕)

right 中 margin-left 为 left 的宽度,可在此基础上加上间距。

优点:容易理解

缺点:兼容性,IE6 right 中文字会缩进 3像素;在 right 上第一个元素设置 clear:both 会清除浮动导致移至下一行。


(2) float + margin + (fix) 改进方案,增加 right-fix 

left,right 均为浮动元素,不存在像素问题,子元素清除浮动也不影响

right-fix 宽度设为 100%,会掉至下一行,margin-left 为 -100px 空出 100 像素,回到上一行盖住 left。在 right 上再设置 margin-left 露出 left。

在上面操作之后,right-fix z 轴上层级比 left 高,无法选中 left 中的文字。通过 position:relative; 提高 left 在 z 轴上的层级。

优点:兼容性好

缺点:多一个结构,样式较多


(3) float + overflow

overflow:hidden; 触发 BFC 模式(Block Formatting Context 块级格式化文本)

BFC 模式下容器中的内容与外界隔离,外界(如浮动元素)不影响容器中内容,间距设置在 left 上。

优点:只需设置 left 和 right ,right 只需设置 overflow:hidden;

缺点:IE6 不支持


(4) table

parent 设置 display:table; 后宽度默认为内容宽度;设置 table-layout:fixed; 固定表格布局,宽度与内容无关

left,right 设置 display:table-cell; 变为单元格,水平排列。

table 特性:两列宽度和一定等于整个表格宽度,不能设置margin,可以设置padding;right 为剩余宽度

table-layout:fixed; 的两个好处:加速 table 的渲染;实现了布局优点


(5) flex

display:flex; 子元素默认宽度为内容宽度

flex:1; 等价于 flex:1 1 0; 剩余空间都给 right

缺点:兼容性问题,适用于小范围布局


(6)两列定宽与自适应


不定宽与自适应(宽度由内容决定)

float + margin 无法实现,left 中的 width 和 right 中的 margin-left 强耦合

(1) float + overflow

IE6 不兼容

实现简单,代码量少


(2) table

display:table; IE6,7 无法实现

width:0.1%; 如果设为 1px ,IE8 兼容有问题


(3) flex


(4)两列不定宽 + 自适应


等分(每一列宽度相同,间距相同)

(1) float

实现条件:父容器增加一个间隔的宽度,每一列宽度需要包含间隔宽度

margin-left:-20px; 增加 20px 间距

box-sizing 设置 width 和 height 指定哪个区域的宽高,默认为 content-box

box-sizing:border-box; 让设置的宽度包含 padding 区域

总宽度增加了 20px,每一列都是 25% 宽度,并且间距包含在 25% 里面

优点:兼容性较好,IE8 以上完全兼容,IE6,7对于百分比,浮点数四舍五入兼容性不太好

存在一个问题:列数发生变化时,结构和样式耦合,需要修改样式 width


(2) table

每一列间的间距在 table 模式下无法用 margin,只能用 padding

table 的特性为宽度默认为内容宽度,需要设置宽度为 100%,无法加上间隔宽度

解决方案:在 parent 外加一层 parent-fix

把增加 20px 功能转到 parent-fix(设置之前 body 需要设置 margin:20px),令 parent 多出 20px

table-layout:fixed; 功能:使布局优先;假如单元格未设置宽度,单元格宽度平分,每一列不需要设置 25%,结构与样式解耦

缺点是多了一层


(3) flex

flex:1 分配剩余空间

.column+.column 为相邻兄弟选择器,只选择与 column 紧邻的后面的 column

HTML 和  CSS 解耦

缺点:兼容性问题


等高

(1) table

background-clip 裁剪背景图,默认为 border-box


(2) flex

flex item 默认辅轴上对齐方式(align-items)为 stretch (拉伸)


(3) float

float 没有任何特性可以做到完全等高

令 left 和 right 背景颜色高度相同(伪等高);padding-box 可承载背景颜色

padding-bottom:9999px; 背景变高,颜色到底,content-box 仍为原来高度

margin-bottom:-9999px; 抵消 padding

parent 中的 overflow:hidden; 把原先加上的 padding-bottom 截掉,截到两列内容较高的高度。

兼容性较好,伪等高


全屏布局

全屏布局特点:布局充满浏览器窗口;滚动条仅出现在内容区域

实现方案:Position;Flex

Position

绝对定位

IE6 下支持度不是很好

Flex

先从上到下划分区域,实现 flex,再关注侧栏和主栏

若需要实现百分比的布局,把原本定值的地方改成百分比即可

Flex兼容性:IE9 及以下

内容自适应 Flex


3.响应式

响应式布局简而言之,就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本。

优点:网站可以自动适配到不同的设备,开发成本低

缺点:有可能会导致资源冗余,加载之后隐藏

viewport

手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的窗口比屏幕宽,通过某一种比例等比缩小到屏幕的显示区域

通过改变 viewport ,防止出现缩小的情况

<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">

width=device-width 把 viewport 宽度设成设备宽度,不同移动设备 device-width 不同,           device-width 是设备推荐的一个比较恰当的值

initial-scale=1.0 把初始缩放设为 1.0 ,网站不会被缩放

user-scalable=no 防止用户手动缩放

一般情况下,如果采用了响应式实现方式,不需要用户手动缩放,通常情况下,都会加上这样的 viewport 设置

在做 CSS 布局时,尽可能少用定宽模式,应该用自适应模式

@media 媒体查询

当满足条件时,CSS 起作用

通过最小宽度或最大宽度的值设置,让屏幕应用某一样式

例子

当窗口变小为 320px 一下时,左右排列变为上下排列

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

推荐阅读更多精彩内容