整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

前端自适应布局方法总结

前端自适应布局方法总结

文:http://www.cnblogs.com/dragonir/archive/2017/10/27/7744192.html

一栏固定一栏自适应

实现代码:

右两栏固定,中间自适应

方法一 :使用float浮动

自身浮动法的原理就是使用对左右使用分别使用float:left和float:right,float使左右两个元素脱离文档流,中间元素正常在正常文档流中,使用margin指定左右外边距对其进行一个定位。

推荐下我的前端群:524262608,不定期会有干货分享,初学者还有一套整理好的入门教程,欢迎初学者和进阶中的小伙伴。

方法二:使用绝对定位

绝对定位法原理是将左右两边使用absolute定位,因为绝对定位使其脱离文档流,后面的center会自然流动到他们上面,然后使用margin属性,留出左右元素的宽度,既可以使中间元素自适应屏幕宽度。

方法三:使用负margin(圣杯布局)

圣杯布局的原理是margin负值法。使用圣杯布局首先需要在center元素外部包含一个div,包含div需要设置float属性使其形成一个BFC,并设置宽度,并且这个宽度要和left块的margin负值进行配合,具体原理参考这里。这里对圣杯布局解释特别详细。

方法四:使用flex(css3新特性)

TML中常用的布局元素:<table>、<div>+CSS

<table>标签:

<table>指的是表格,用表格来搭建界面布局,即用表格的嵌套,来搭建界面布局。

<table>布局优势:

table优势:开发时间短(使用DW开发速度快);纯table各浏览器不会有兼容问题;内容可自适应;在搜索引擎排名能靠前;

但是 table如果布局变更,需要重新开发;如果table里有div ul 等,可能会出现浏览器兼容问题;加载速度慢;table嵌套的太多,运维是非常困难的。

<div>块级(block-level)标签:

DIV是层叠样式表中的定位技术,全称DIVision,即为划分。有时可以称其为图层。

<div>布局优势:

一.精简代码,减少重构难度。

网站使用DIV+CSS布局使代码很是精简,css文件可以在网站的任意一个页面进行调用,而若是使用table表格修改部分页面却是显得很麻烦。要是一个门户网站的话,需手动改很多页面,而且看着那些表格也会感觉很乱也很浪费时间,但是使用css+div布局只需修改css文件中的一个代码即可。

二.网页访问速度

使用了DIV+CSS布局的网页与Table布局比较,精简了许多页面代码,那么其浏览访问速度自然得以提升,也从而提升了网站的用户体验度。

三.SEO优化

采用div-css布局的网站对于搜索引擎很是友好,因此其避免了Table嵌套层次过多而无法被搜索引擎抓取的问题,而且简洁、结构化的代码更加有利于突出重点和适合搜索引擎抓取。

四.浏览器兼容性

若使用table布局网页,在使用不同浏览器情况下会发生错位,而div+css则不会,无论什么浏览器,网页都不会出现变形情况。


HTML中常用的3种布局方式:

1.流动式布局:是HTML网页默认的布局方式

特点:

1.块级元素都会在所处的包含元素内自上而下按顺序处置延伸分布,且默认状态下,块级元素占整个文档流,默认宽度为100%。

2.内联元素都会在所处的包含元素内从左到右水平分布显示,不占整个文档流。

常见的块级(block)元素有:<h1-h5> 、<table>、 <ul>、<li> 、<p> 、<form>、 ol

常见的内内联(行内)元素有:<a>、<span>、<img>、<input>、<select>、<textarea>

2.浮动布局(float)

特点:

浮动布局依靠【 浮动属性 float:left/right/... 】来使标签脱离文档流,达到两个块级元素并排显示的效果。

float:left ; 浮动脱离当前文档流浮动。

同时可以依靠【展示属性display:inline/block/inline-block】来进行行内元素和块级元素的效果切换。从而达到灵活运用块级元素和行内元素布局的效果。

3.层模型布局又叫定位布局

特点:

当我们应拥div布局是,在第一层块界面上来做第二层块界面的开发时,就要用到我们所说的定位布局。

通过运用【定位属性position:absolute/relative/fixed】 来进行第二层界面的定位布局。

网页是静态的,网页上的定位

position:absolute ;绝对定位脱离文档流,不受浮动影响,就是相对于窗体(body)边界的margin定位。

position:relative; 相对定位不脱离文档流,相对于父级标签元素的位置定位。

position:fixed;固定位置,不会受任何因素影响。

滚动条移动前

滚动条移动后

优先层显示方法:【属性:z-index:0/1/2...】

特点: 数值越大,越优先显示。

注意:只有元素使用了position属性的,才具有z-index属性。


本文部分内容来自网络,如有侵权,请联系修改。

目:假设高度已知,请写出三栏布局,其中左栏、右栏高度各为300px,中间自适应

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>Layout</title>

<style media="screen">

html *{

padding: 0;

margin: 0;

}

.layout article div{

min-height: 100px;

}

.layout.float .left{

float:left;

width:300px;

background: red;

}

.layout.float .center{

background: yellow;

}

.layout.float .right{

float:right;

width:300px;

background: blue;

}

</style>

</head>

<body>

<!--浮动布局 -->

<section class="layout float">

<h1>三栏布局</h1>

<article class="left-right-center">

<div class="left"></div>

<div class="right"></div>

<div class="center">

<h2>浮动解决方案</h2>

</div>

</article>

</section>

<!-- 绝对布局 -->

<section class="layout absolute">

<style>

.layout.absolute .left-center-right>div{

position: absolute;

}

.layout.absolute .left{

left:0;

width: 300px;

background: red;

}

.layout.absolute .center{

left: 300px;

right: 300px;

background: yellow;

}

.layout.absolute .right{

right:0;

width: 300px;

background: blue;

}

</style>

<h1>三栏布局</h1>

<article class="left-center-right">

<div class="left"></div>

<div class="center">

<h2>绝对定位解决方案</h2>

</div>

<div class="right"></div>

</article>

</section>

<!-- flexbox布局 -->

<section class="layout flexbox">

<style>

.layout.flexbox{

margin-top: 110px;

}

.layout.flexbox .left-center-right{

display: flex;

}

.layout.flexbox .left{

width: 300px;

background: red;

}

.layout.flexbox .center{

flex:1;

background: yellow;

}

.layout.flexbox .right{

width: 300px;

background: blue;

}

</style>

<h1>三栏布局</h1>

<article class="left-center-right">

<div class="left"></div>

<div class="center">

<h2>flexbox解决方案</h2>

</div>

<div class="right"></div>

</article>

</section>

<!-- 表格布局 -->

<section class="layout table">

<style>

.layout.table .left-center-right{

width:100%;

height: 100px;

display: table;

}

.layout.table .left-center-right>div{

display: table-cell;

}

.layout.table .left{

width: 300px;

background: red;

}

.layout.table .center{

background: yellow;

}

.layout.table .right{

width: 300px;

background: blue;

}

</style>

<h1>三栏布局</h1>

<article class="left-center-right">

<div class="left"></div>

<div class="center">

<h2>表格布局解决方案</h2>

</div>

<div class="right"></div>

</article>

</section>

<!-- 网格布局 -->

<section class="layout grid">

<style>

.layout.grid .left-center-right{

width:100%;

display: grid;

grid-template-rows: 100px;

grid-template-columns: 300px auto 300px;

}

.layout.grid .left-center-right>div{

}

.layout.grid .left{

width: 300px;

background: red;

}

.layout.grid .center{

background: yellow;

}

.layout.grid .right{

background: blue;

}

</style>

<h1>三栏布局</h1>

<article class="left-center-right">

<div class="left"></div>

<div class="center">

<h2>网格布局解决方案</h2>

</div>

<div class="right"></div>

</article>

</section>

</body>

</html>

能写出以上五种来,已经很优秀了,但是面试官可能会继续追问以下问题:

1.这5种方案的优缺点是什么?

(1)浮动方案

优点:兼容性好

缺点:在于需要清除浮动,浮动以后是脱离文档流,如果处理不好会带来很多问题,这是它本身的局限性。

(2)绝对定位

优点:快捷

缺点:布局已经脱离文档流,意味着里面所有的子元素也必须脱离文档流,就导致了有效性/可使用性比较差

(3)flex布局

优点:CSS3中用于解决上面两个方案的不足出现的,比较完美的一个方案,移动端普遍使用

缺点:兼容性问题(IE8以上可用)

(4)table布局

兼容性好(比flex好)例子中,中间内容多撑开后两侧容器也会自动增高(同时也是自身的不足,选择哪个方案看具体的业务,没有绝对的优缺点)

(5)网格grid布局

一些CSS框架在做网格的事情,例如栅格系统,960px宽度设计12列,模拟网格控制每一部分的位置达到布局的方式,在新出的网格布局中,通过把它标准化也就是CSS开始支持,可以做很多复杂事情,同时代码量简化的多

2.如果把假设高度已知去掉,比如,中间部分的内容太多把容器撑高了,两侧的容器也要相应增高,这样哪种方案就不适用了?

flex布局和table布局可以继续使用,其它的不适用(两侧没有自动增高)。

3.5种方案的兼容性如何?如果让你真正去写业务中的页面布局,那最优的方案是哪个?

答案可以参考第1题

此处总结优缺点是比较常见通用的话术,小伙伴们也可以自行查找并整理出来,如果有什么问题欢迎留言一起讨论噢~