DIV+CSS 自适应布局
两栏布局,左边定宽200px,右边自适应。如何实现?
我的第一个反应就是:用flex伸缩盒呀,然后balabala...
说完之后,面试官说,还有没有别的方法?flex有些浏览器不支持
嗯...我愣了一下,平常遇到这种问题貌似都是这么写的...
别的方法?我又想了想。JS?对,JS肯定可以。
然后就说,可以用JS获取当前窗口宽度,然后减去200px就是右边的宽度了
面试官:嗯,这样的确可以,但是布局一般不要用JS,还有没有别的方法?CSS的
额,这下我完全愣住了好嘛,人也变得有些紧张。还要别的方法啊,什么方法呢???
哎呀妈呀,想不出来,肿么办...
然后面试官看了我半天,十分体谅的说,那我们进行下一个问题吧...
(以上面试官原话记不大请了,但是意思就是这样~)
回来后,经过百度,哇!原来方法如此之多~还如此简单~
下面就来总结一下~
一、两栏布局(左定宽,右自动)
1. float + margin
即固定宽度元素设置float属性为left,自适应元素设置margin属性,margin-left应>=定宽元素宽度。
举例:
HTML代码:
- <div class="wrap">
- <div class="wrap_left">
- 我是左栏
- </div>
- <div class="wrap_right">
- 我是右栏
- </div>
- </div>
复制代码
CSS代码
- html,body,div{
- margin: 0;
- padding: 0;
- }
- .wrap{
- margin: 10px;
- }
- .wrap_left{
- float: left;
- width: 200px;
- background-color: red;
- }
- .wrap_right{
- margin-left: 220px;
- background-color: green;
- }
复制代码
2.position + margin
即在父标签设置position属性为relative;子标签中定宽元素设置position属性为absolute;自适应元素设置margin属性,margin-left>=定宽元素宽度。
举例:
HTML代码
- <div class="wrap">
- <div class="wrap_left">
- 我是左栏
- </div>
- <div class="wrap_right">
- 我是右栏
- </div>
- </div>
复制代码
CSS代码
- html,body,div{
- margin: 0;
- padding: 0;
- }
- .wrap{
- margin: 10px;
- position: relative;
- }
- .wrap_left{
- position: absolute;
- width: 200px;
- background-color: red;
- }
- .wrap_right{
- margin-left: 220px;
- background-color: green;
- }
复制代码
3.float + 负margin
即给自适应宽度元素定义一个父标签,并设置float属性为left;width为100%;自适应宽度元素设置margin,margin-left应>=定宽元素宽度;
固定宽度元素设置margin-left属性为负值:-100%;
除此之外应注意HTML结构中应先写自适应元素,再写固定宽度元素。
举例:
HTML代码
- <div class="wrap">
- <div class="wrap_right">
- 我是右栏
- </div>
- </div>
- <div class="wrap_left">
- 我是左栏
- </div>
复制代码
CSS代码
- html,body,div{
- margin: 0;
- padding: 0;
- }
- .wrap{
- float: left;
- width: 100%;
- }
- .wrap .wrap_right{
- margin-left: 220px;
- background-color: green;
- }
- .wrap_left{
- float: left;
- width: 200px;
- margin-left: -100%;
- background-color: red;
- }
复制代码
注:使用的float属性,必要时清除一下浮动。
4.用table布局实现
来自评论里@qazxsw的方法:
- <table width="100%" cellspacing="0" cellpadding="0" border="1" height="300">
- <tr>
- <td width="200" bgcolor="red"></td>
- <td bgcolor="green"></td>
- </tr>
- </table>
复制代码
不过这个方法,一定要设置高度才可以~
5.触发BFC实现 —— 来自评论里柯南同学@15913127081的方法
关于BFC是什么、怎么触发BFC以及BFC可以用来做什么,大家可以看看这篇,前端精选文摘:BFC 神奇背后的原理(我会告诉你我也是才看的么~哈哈~)
实现方法,即为定宽元素设置float:left;自适应宽度元素设置可以触发BFC的属性。(可以触发BFC的属性?继续看上面那个链接!!)
示例:
HTML代码:
- <div class="wrap_left">
- 我是左栏
- </div>
- <div class="wrap_right">
- 我是右栏
- </div>
复制代码
CSS代码:
- html,body,div{
- margin: 0;
- padding: 0;
- }
- .wrap_left{
- float: left;
- width: 200px;
- background-color: red;
- }
- .wrap_right{
- overflow: hidden;
- background-color: green;
- }
复制代码
前面有说到一般我都是用的flex伸缩盒,那也来说一下用flex怎么实现的吧
6.flex伸缩盒方法
即父标签设置display:flex属性,自适应元素设置flex-grow:1;
HTML代码
- <div class="wrap">
- <div class="wrap_left">
- 我是左栏
- </div>
- <div class="wrap_right">
- 我是右栏
- </div>
- </div>
复制代码
CSS代码
- html,body,div{
- margin: 0;
- padding: 0;
- }
- .wrap{
- display: flex;
- display: -webkit-flex;
- }
- .wrap_left{
- width: 200px;
- background-color: red;
- }
- .wrap_right{
- flex-grow:1;
- -webkit-flex-grow:1;
- background-color: green;
- }
复制代码
进阶
二、三栏布局
掌握了上面的方法,我们会发现制作一个三栏布局也是非常容易的。
下面我们在上面栗子的基础上,看看实现一个两侧定宽,中间自适应的三栏布局如何实现
1. float + margin(两侧定宽,中间自适应)
HTML代码:
- <div class="wrap_left">
- 我是左栏
- </div>
- <div class="wrap_right">
- 我是右栏
- </div>
- <div class="wrap_content">
- 我是中间栏
- </div>
复制代码
CSS代码:
- html,body,div{
- margin: 0;
- padding: 0;
- }
- .wrap_left{
- width: 200px;
- float: left;
- background-color: red;
- }
- .wrap_content{
- margin-left: 220px;
- margin-right: 220px;
- background-color: yellow;
- }
- .wrap_right{
- width: 200px;
- float: right;
- background-color: green;
- }
复制代码
2. position + margin(两侧定宽,中间自适应)
HTML代码:
- <div class="wrap_left">
- 我是左栏
- </div>
- <div class="wrap_right">
- 我是右栏
- </div>
- <div class="wrap_content">
- 我是中间栏
- </div>
复制代码
CSS代码
- html,body,div{
- margin: 0;
- padding: 0;
- }
- .wrap_left{
- width: 200px;
- position: absolute;
- background-color: red;
- left: 0;
- }
- .wrap_content{
- margin-left: 220px;
- margin-right: 220px;
- background-color: yellow;
- }
- .wrap_right{
- width: 200px;
- position: absolute;
- right: 0;
- background-color: green;
- }
复制代码
3.float + 负margin(两侧定宽,中间自适应)
HTML代码
- <div class="wrap">
- <div class="wrap_content">
- 我是中间栏
- </div>
- </div>
- <div class="wrap_left">
- 我是左栏
- </div>
- <div class="wrap_right">
- 我是右栏
- </div>
复制代码
CSS代码
- html,body,div{
- margin: 0;
- padding: 0;
- }
- .wrap{
- float: left;;
- width: 100%;
- }
- .wrap_left{
- width: 200px;
- float: left;
- margin-left: -100%;
- background-color: red;
- }
- .wrap_content{
- margin-left: 220px;
- margin-right: 220px;
- background-color: yellow;
- }
- .wrap_right{
- width: 200px;
- float: left;
- margin-left: -200px;
- background-color: green;
- }
复制代码
4.table实现
- <table width="100%" cellspacing="0" cellpadding="0" border="1" height="300">
- <tr>
- <td width="200" bgcolor="red"></td>
- <td bgcolor="yellow"></td>
- <td width="200" bgcolor="green"></td>
- </tr>
- </table>
复制代码
5.BFC方法
HTML代码
- <div class="wrap_left">
- 我是左栏
- </div>
- <div class="wrap_right">
- 我是右栏
- </div>
- <div class="wrap_content">
- 我是中间栏
- </div>
复制代码
CSS代码
- html,body,div{
- margin: 0;
- padding: 0;
- }
- .wrap_left{
- float: left;
- width: 200px;
- background-color: red;
- }
- .wrap_right{
- float: right;
- width: 200px;
- background-color: green;
- }
- .wrap_content{
- overflow: hidden;
- background-color: yellow;
- }
复制代码
注:HTML中先写定宽元素,再写自适应宽度元素。
6.flex伸缩盒
即父标签设置display:flex属性,自适应元素设置flex-grow:1;
HTML代码
- <div class="wrap">
- <div class="wrap_left">
- 我是左栏
- </div>
- <div class="wrap_content">
- 我是中间栏
- </div>
- <div class="wrap_right">
- 我是右栏
- </div>
- </div>
复制代码
CSS代码
- html,body,div{
- margin: 0;
- padding: 0;
- }
- .wrap{
- display: flex;
- display: -webkit-flex;
- }
- .wrap_left{
- width: 200px;
- background-color: red;
- }
- .wrap_right{
- width: 200px;
- background-color: green;
- }
- .wrap_content{
- flex-grow:1;
- -webkit-flex-grow:1;
- background-color: yellow;
- }
复制代码
DIV+CSS 自适应布局的更多相关文章
- DIV+CSS自适应布局
自适应布局分两类:高度和宽度,方法有很多,我用三列布局举例,我就列几个通俗易懂的例子呗,懂了三列的,两列的原理一样,呵呵哒. 效果图如下:高度自适应——宽度自适应 1,高度自适应 ...
- 【转】一个DIV+CSS代码布局的简单导航条
原文地址:http://www.divcss5.com/shili/s731.shtml 简单的DIV CSS代码布局实现导航条 一个蓝色主题的导航条布局案例,本CSS小实例,采用DIV CSS实现. ...
- 总结与学习DIV+CSS网页布局技巧
以前用表格布局时设置网页居中非常方便,把表格对齐方式设置为居中就行了,就这么简单,现在呢,用DIV+CSS样式表控制,好像不是那么容易了,其实也很简单,只不过方式不同而已. <style> ...
- DIV+CSS自适应窗口高度
<html> <head> <title>DIV+CSS自适应窗口高度</title> <style type="text/css&qu ...
- div,css&table布局有哪些区别
DIV+CSS布局与TABLE布局相比,有哪些优点? 1.代码少,页面文件小,下载快 Div+css的布局现在属于国际W3C标准,table不是. 都知道用div的布局代码肯定少,所有的样式都在CSS ...
- 这可能是史上最全的CSS自适应布局总结教程
标题严格遵守了新广告法,你再不爽,我也没犯法呀!话不多说,直入正题. 所谓布局,其实包含两个含义:尺寸与定位.也就是说,所有与尺寸和定位相关的属性,都可以用来布局. 大体上,布局中会用到的有:尺寸相关 ...
- CSS自适应布局(左右固定 中间自适应或者右侧固定 左侧自适应)
经常在工作中或者在面试中会碰到这样的问题,比如我想要个布局 右侧固定宽度 左侧自适应 或者 三列布局 左右固定 中间自适应的问题. 下面我们分别来学习下,当然我也是总结下而已,有如以下方法: 一: 右 ...
- CSS自适应布局(包括两边宽度固定中间宽度自适应与中间宽度固定两边宽度自适应)
1.两边宽度固定,中间宽度自适应 (1)非CSS3布局,浮动定位都可以(以下用浮动) css样式: #left { float: left;width: 200px; background: lime ...
- [css] 自适应布局 移动端自适应
一.宽度自适应 三列布局左右固定.中间不固定或者两列布局,左边固定右边不固定 原文链接:http://www.cnblogs.com/2050/archive/2012/07/30/2614852.h ...
随机推荐
- 关于textView的字数限制
在一个项目中遇到texteView的字数限制,在iOS7.0上,会出现崩溃.我在这里栽了一个大跟头,废话不多说,下面直接贴代码吧. - (void)textViewDidChange:(UITextV ...
- 学习在创建好的工程里面添加CoreData
在学习CoreData中, 在建工程后, 没有添加, 于是就参考网络文章进行更改. 这几天在学习做一个ios的小项目,项目中需要对数据进行基本的增删改查操作.于是就想用一把CoreData.但在创建项 ...
- SignalR2.0开发实例之——创建房间聊天
SignalR作为一个强大的集线器,已经在hub里面集成了Gorups,也就是分组管理,使用方法如下: //作用:将连接ID加入某个组 //Context.ConnectionId 连接ID,每个页面 ...
- dom的element类型
1)getElementById 后面的nodeName和tagName都一样 var a=document.getElementById("my_div"); console.l ...
- shell中的eval
eval语法 eval arg1 arg2 ... eval的作用就是将后面的参数arg1 arg2等等当成一个pipeline,然后重新执行shell处理pipeline的流程(有关pipeline ...
- shell中的path expansion
glob扩展 在shell中的路径扩展中,涉及到的glob有如下几种: ? 匹配任何单个字符 * 匹配0到多个字符 [set] 匹配任何一个在set当中的字符,如[0-9],则匹配任何一个数字 [!s ...
- composer在ubuntu下安装
通过curl下载composer安装包 curl -sS https://getcomposer.org/installer | php 将安装包移动到全局安装文件夹下 mv composer.pha ...
- android技术下载
http://www.linuxidc.com/Linux/2011-08/41339.htm http://linux.linuxidc.com/2011%E5%B9%B4%E8%B5%84%E6% ...
- BZOJ1532: [POI2005]Kos-Dicing
1532: [POI2005]Kos-Dicing Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1060 Solved: 321[Submit][St ...
- 在线服装零售商Betabrand获得650万美元风投 - 投资风向 - 创业邦
在线服装零售商Betabrand获得650万美元风投 - 投资风向 - 创业邦 在线服装零售商Betabrand获得650万美元风投