页面架构 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

页面架构 1-3_第1张图片

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

页面架构 1-3_第2张图片

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

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


(3) flex + align-items

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

优点:只需给 parent 设置样式

缺点:flex 兼容性问题


居中

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

页面架构 1-3_第3张图片

优点:兼容性较好

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


(2) absolute + transform

页面架构 1-3_第4张图片

优点:不影响其他元素

缺点:transform 兼容问题


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

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

缺点:兼容性问题


多列布局

定宽与自适应

页面架构 1-3_第5张图片

(1) float + margin

页面架构 1-3_第6张图片

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

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

优点:容易理解

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


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

页面架构 1-3_第7张图片
页面架构 1-3_第8张图片

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

页面架构 1-3_第9张图片

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

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

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

缺点:IE6 不支持


(4) table

页面架构 1-3_第10张图片

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

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

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

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


(5) flex

页面架构 1-3_第11张图片

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

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

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


(6)两列定宽与自适应

页面架构 1-3_第12张图片


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

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

(1) float + overflow

页面架构 1-3_第13张图片

IE6 不兼容

实现简单,代码量少


(2) table

页面架构 1-3_第14张图片

display:table; IE6,7 无法实现

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


(3) flex

页面架构 1-3_第15张图片


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

页面架构 1-3_第16张图片


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

(1) float

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

页面架构 1-3_第17张图片

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

页面架构 1-3_第18张图片

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

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

缺点是多了一层


(3) flex

页面架构 1-3_第19张图片

flex:1 分配剩余空间

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

HTML 和  CSS 解耦

缺点:兼容性问题


等高

(1) table

页面架构 1-3_第20张图片

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


(2) flex

页面架构 1-3_第21张图片

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


(3) float

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

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

页面架构 1-3_第22张图片

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

margin-bottom:-9999px; 抵消 padding

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

兼容性较好,伪等高


全屏布局

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

实现方案:Position;Flex

页面架构 1-3_第23张图片

Position

页面架构 1-3_第24张图片

绝对定位

IE6 下支持度不是很好

Flex

页面架构 1-3_第25张图片
页面架构 1-3_第26张图片

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

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

页面架构 1-3_第27张图片

Flex兼容性:IE9 及以下

内容自适应 Flex

页面架构 1-3_第28张图片


3.响应式

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

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

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

viewport

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

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

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

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

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

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

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

@media 媒体查询

页面架构 1-3_第29张图片

当满足条件时,CSS 起作用

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

例子

页面架构 1-3_第30张图片

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

页面架构 1-3_第31张图片

你可能感兴趣的:(页面架构 1-3)