左侧固定宽,右侧自适应屏幕宽;

左右两列,等高布局;

左右两列要求有最小高度,例如:200px;(当内容超出200时,会自动以等高的方式增高)

要求不用JS或CSS行为实现;

仔细分析试题要求,要达到效果其实也并不是太难,只是给人感觉像有点蛋疼的问题一样。但是你仔细看后你会觉得不是那么回事:

左边固定,右边自适应布局,这个第一点应该来说是非常的容易,实现的方法也是相当的多,那么就可以说第一条要求已不是什么要求了;

左右两列等高布局,这一点相对来说要复杂一些,不过你要是了解了怎么实现等高布局,那么也是不难。我个人认为这个考题关键之处就在考这里,考你如何实现等高布局;所以这一点你需要整明白如何实现;

至于第三条要求,应该来说是很方面的,我们随处都可以看到实现最小高度的代码;

第四条这个要求我想是考官想让我们面试的人不能使用js来实现等高布局和最小高度的功能。

上面简单的分析了一下实现过程,那么最终关键之处应该是就是“让你的代码要能同时实现两点,其一就是左边固定,右边自适应的布局;其二就是实现两列等高的布局”,如果这两个功能完成,那么你也就可以交作业了。那么下面我们就先来看看这两 点是如合实现:

一、两列布局:左边固定宽度,右边自适应宽度

这样的布局,其实不是难点,我想很多同学都有实现过,那么我就在此稍微介绍两种常用的方法:

方法一:浮动布局

这种方法我采用的是左边浮动,右边加上一个margin-left值,让他实现左边固定,右边自适应的布局效果

HTML Markup

<div id="left">Left sidebar</div>

<div id="content">Main Content</div>

CSS Code

<style type="text/css">

*{

margin: 0;

padding: 0;

}

#left {

float: left;

width: 220px;

green;

}

#content {

orange;

margin-left: 220px;/*==等于左边栏宽度==*/

}

</style>

上面这种实现方法最关键之处就是自适应宽度一栏“div#content”的“margin-left”值要等于固定宽度一栏的宽度值,大家可以点击查看上面代码的DEMO

方法二:浮动和负边距实现

这个方法采用的是浮动和负边距来实现左边固定宽度右边自适应宽度的布局效果,大家可以仔细对比一下上面那种实现方法,看看两者有什么区别:

HTML Markup

<div id="left">

Left Sidebar

</div>

<div id="content">

<div id="contentInner">

Main Content

</div>

</div>

CSS Code

*{

margin: 0;

padding: 0;

}

#left {

green;

float: left;

width: 220px;

margin-right: -100%;

}

#content {

float: left;

width: 100%;

}

#contentInner {

margin-left: 220px;/*==等于左边栏宽度值==*/

orange;

}

这种方法看上去要稍微麻烦一点,不过也是非常常见的一种方法,大家可以看看他的DEMO效果。感觉一下,和前面的DEMO有什么不同之处。

我 在这里就只展示这两种方法,大家肯定还有别的实现方法,我就不在多说了,因为我们今天要说的不是这个问题。上面完成了试题的第一种效果,那么大家就要想办 法来实现第二条要求——两列等高布局。这一点也是本次面试题至关重要的一点,如果你要是不清楚如何实现等高布局的话,我建议您先阅读本站的《八种创建等高 列布局》,里面详细介绍了八种等高布局的方法,并附有相关代码,而且我们后面的运用中也使用了其中的方法。

现在关键的两点都完成了,那么我们就需要实现第三条要求,实现最小高度的设置,这个方法很简单:

min-height: 200px;

height: auto !important;

height: 200px;

上面的代码就轻松的帮我们实现了跨浏览器的最小高度设置问题。这样一来,我们可以交作业了,也完面了这个面试题的考试。为了让大家更能形象的了解,我在这里为大家准备了五种不同的实现方法:

方法一:

别的不多说,直接上代码,或者参考在线DEMO,下面所有的DEMO都有HTML和CSS代码,感兴趣的同学自己慢慢看吧。

HTML Markup

<div id="container">

<div id="wrapper">

<div id="sidebar">Left Sidebar</div>

<div id="main">Main Content</div>

</div>

</div>

CSS Code

<style type="text/css">

* {

margin: 0;

padding: 0;

}

html {

height: auto;

}

body {

margin: 0;

padding: 0;

}

#container {

background: #ffe3a6;

}

#wrapper {

display: inline-block;

border-left: 200px solid #d4c376;/*==此值等于左边栏的宽度值==*/

position: relative;

vertical-align: bottom;

}

#sidebar {

float: left;

width: 200px;

margin-left: -200px;/*==此值等于左边栏的宽度值==*/

position: relative;

}

#main {

float: left;

}

#maing,

#sidebar{

min-height: 200px;

height: auto !important;

height: 200px;

}

</style>

查看在线DEMO。

方法二

HTML Markup

<div id="container">

<div id="left" class="aside">Left Sidebar</div>

<div id="content" class="section">Main Content</div>

</div>

CSS Code

<style type="text/css">

*{margin: 0;padding: 0;}

#container {

overflow: hidden;

}

#left {

background: #ccc;

float: left;

width: 200px;

margin-bottom: -99999px;

padding-bottom: 99999px;

}

#content {

background: #eee;

margin-left: 200px;/*==此值等于左边栏的宽度值==*/

margin-bottom: -99999px;

padding-bottom: 99999px;

}

#left,

#content {

min-height: 200px;

height: auto !important;

height: 200px;

}

</style>

查看在线的DEMO。

方法三:

HTML Markup

<div id="container">

<div id="content">Main Content</div>

<div id="sidebar">Left Sidebar</div>

</div>

CSS Code

*{margin: 0;padding: 0;}

#container{

overflow:hidden;

padding-left:220px; /* 宽度大小等与边栏宽度大小*/

}

* html #container{

height:1%; /* So IE plays nice */

}

#content{

width:100%;

border-left:220px solid #f00;/* 宽度大小等与边栏宽度大小*/

margin-left:-220px;/* 宽度大小等与边栏宽度大小*/

float:right;

}

#sidebar{

width:220px;

float:right;

margin-left:-220px;/* 宽度大小等与边栏宽度大小*/

}

#content,

#sidebar {

min-height: 200px;

height: auto !important;

height: 200px;

}

查看在线DEMO效果。

方法四:

HTML Markup

<div id="container2">

<div id="container1">

<div id="col1">Left Sidebar</div>

<div id="col2">Main Content</div>

</div>

</div>

CSS Code

*{padding: 0;margin:0;}

#container2 {

float: left;

width: 100%;

background: orange;

position: relative;

overflow: hidden;

}

#container1 {

float: left;

width: 100%;

background: green;

position: relative;

left: 220px;/* 宽度大小等与边栏宽度大小*/

}

#col2 {

position: relative;

margin-right: 220px;/* 宽度大小等与边栏宽度大小*/

}

#col1 {

width: 220px;

float: left;

position: relative;

margin-left: -220px;/* 宽度大小等与边栏宽度大小*/

}

#col1,#col2 {

min-height: 200px;

height: auto !important;

height: 200px;

}

查看在线DEMO。

方法五:

HTML Markup

<div id="container1">

<div id="container">

<div id="left">Left Sidebar</div>

<div id="content">

<div id="contentInner">Main Content</div>

</div>

</div>

</div>

CSS Code

*{padding: 0;margin: 0;}

#container1 {

float: left;

width: 100%;

overflow: hidden;

position: relative;

#dbddbb;

}

#container {

orange;

width: 100%;

float: left;

position: relative;

left: 220px;/* 宽度大小等与边栏宽度大小*/

}

#left {

float: left;

margin-right: -100%;

margin-left: -220px;/* 宽度大小等与边栏宽度大小*/

width: 220px;

}

#content {

float: left;

width: 100%;

margin-left: -220px;/* 宽度大小等与边栏宽度大小*/

}

#contentInner {

margin-left: 220px;/* 宽度大小等与边栏宽度大小*/

overflow: hidden;

}

#left,

#content {

min-height: 200px;

height: auto !important;

height: 200px;

}

查看在线DEMO。

针对上面的面试题要求,我一共使用了五种不同的方法来实现,经过测试都能在各浏览器中运行,最后我有几点需要特别提出:

上面所有DEMO中,要注意其方向性的配合,并且值要统一,如果您想尝试使用自己布局需要的宽度值,请对照相关代码环节进行修改;

上面所有DEMO中,没有设置他们之间的间距,如果您想让他们之间有一定的间距,有两种方法可能实现,其一在上面的DEMO基础上修改相关参数,其二,在相应的里面加上"div"标签,并设置其“padding”值,这样更安全,不至于打破你的布局

因为我们这里有一列使用了自适应宽度,在部分浏览器下,当浏览器屏幕拉至到一定的大小时,给我们带来的感觉是自适应宽度那栏内容像是被隐藏,在你的实际项目中最好能在“body”中加上一个“min-width”的设置。

CSS左侧固定宽 右侧自适应(兼容所有浏览器)的更多相关文章

  1. css布局--两列布局,左侧固定,右侧自适应(其中左侧要可以拖动,右侧水平滚动条)

    (css布局所要实现的效果) 在前端面试中经常会被问到CSS布局,两列布局,左侧固定,右侧自适应.前几天去面试,遇到了这道题的升级版,要求左侧可拖动,右侧要有水平滚动条.拿到题目确实有些大脑短路,不知 ...

  2. css左侧固定宽度,右侧自适应的几种实现方法

    左侧固定,右侧自适应或者右侧固定在,左侧自适应是一样的.这种布局很常见,而且面试过程中也经常会问到,这里我总结的方法一共有5种.要实现这种布局,也算比较简单.我们先给出html结构: <div ...

  3. CSS基础布局--居中对齐,左侧定宽右侧自适应

    CSS页面布局是web前端开发的最基本的技能,本文将介绍一些常见的布局方法,涉及到盒子布局,column布局,flex布局等内容.本文中,你可以看到一些水平垂直居中的方法,左侧固定宽度,右侧自适应的一 ...

  4. CSS 实现左侧固定,右侧自适应两栏布局的方法

    "左边固定,右边自适应的两栏布局",其中有老生常谈的float方法,BFC方法,也有CSS3的flex布局与grid布局.并非所有的布局都会在开发中使用,但是其中也会涉及一些知识点 ...

  5. 请给出一个左侧定宽右侧自适应的HTML结构及样式

    <!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...

  6. css左右布局,左侧固定,右侧自适应

    实现布局的几种方法,见代码: <!DOCTYPE html> <html lang="cn"> <head> <meta charset= ...

  7. 左侧固定,右侧自适应的布局方式理解margin负值理论

    一.浮动布局 1.先让固定宽度的div浮动!使其脱离文档流.2.margin-left的值等于固定div的宽度相等. .aside{ float: left; width: 200px; backgr ...

  8. css经典布局之左侧固定大小右侧自动适应

    最近学习了一种经典布局,固定左侧或右侧的宽度,另一侧自适应宽度,此种布局挺常用,尤其是像后台,大部分都是采用这种结构,还比如像订餐类的APP,进入商家的时候,会出现一堆饭的列表,左侧是饭的分类,右侧是 ...

  9. css实现左侧固定宽,右侧自适应的7中方法

    一个面试会问的问题,如何实现两个盒子,左侧固定宽度,右侧自适应. 1.利用 calc 计算宽度的方法 css代码如下: .box{overflow: hidden;height: 100px;marg ...

随机推荐

  1. IOS网络请求之AFNetWorking 3.x 使用

    前言: 计划把公司的网络请求与业务解耦,所以想着学习一下网络请求,最近学习了NSURLSession,今天来学习一下基于NSURLSession封装的优秀开源框架AFNetWorking 3.x,之前 ...

  2. java基础知识点---size(),length(),length的区别

    List<Integer> a=new ArrayList<Integer>(); a.add(1); System.out.println(a.size()); int b[ ...

  3. IOS9.0 之后友盟分享详细过程

    一: 申请友盟的AppKey(友盟的Key是根据应用的名称生成的!) 在友盟注册了你自己的开发者账号后就可以申请AppKey了.然后在这个方法里面设置Key - (BOOL)application:( ...

  4. beautifulsoup 获取a(tag)的属性href

    一开始使用使用attrs(“href”) 出现错误TypeError: 'dict' object is not callable 由于attrs字典类型 atrrs["href" ...

  5. devexpress表格控件gridcontrol特殊应用(一)——实现禁用特定行(附源代码)

    一些特殊的项目中会存在一些特殊需求,如需要禁用特定行.这时候gridcontrol的一般属性是实现不了的,就需要做一些更改.这时候你就需要去devexpress官网中找寻些资料(官网https://w ...

  6. java程序员--小心你代码中的内存泄漏

    当你从c&c++转到一门具有垃圾回收功能的语言时,程序员的工作就会变得更加容易,因为你用完对象,他们会被自动回收,但是,java程序员真的不需要考虑内存泄露吗? 其实不然 1.举个例子-看你能 ...

  7. axios全攻略

    随着 vuejs 作者尤雨溪发布消息,不再继续维护vue-resource,并推荐大家使用 axios 开始,axios 被越来越多的人所了解.本来想在网上找找详细攻略,突然发现,axios 的官方文 ...

  8. git config全局配置

    在开发过程中,切换分支经常用到 [git checkout release] 所以为了快捷开发.提高效率,可以把checkout 设置为co 就可以用这个[git config --global al ...

  9. 网络性能测试工具Iperf/Jperf解读

    Iperf 是一个网络性能测试工具.Iperf 可以测试TCP 和UDP 带宽质量.Iperf 可以测量最大TCP 带宽,具有多种参数和UDP 特性. Iperf 可以报告带宽,延时抖动和数据包丢失. ...

  10. Java代理(静态/动态 JDK,cglib)

    Java的代理模式是应用非常广泛的设计模式之一,也叫作委托模式,其目的就是为其他的对象提供一个代理以控制对某个对象的访问和使用,代理类负责为委托类预处理消息,过滤消息并转发消息,以及对消息执行后续处理 ...