两列左列浮动,右列自适应宽度的四种方法

第一种方法,网上流传比较广的方法。采用左列 left 浮动,右列不浮动,采用 margin-left 定位的方式。此方法会有一个 ie6 3px bug . 另外,当浏览器框缩小到一定程度时,右侧会掉下来。

<!DOCTYPE html>
<html>
<head>
<title>方法一</title>
<style type="text/css">
#left
{width:100px;height:100px;background-color:#ccc;border:2px solid #333;float:left;}
#right
{height:300px;margin-left:104px; border:2px solid #333;background:#ccc url(http://www.baidu.com/img/baidu_logo.gif) no-repeat;
}
</style>
</head>
<body>
   <div id="left"> left </div>
   <div id="right"> 1111<br />1111<br />1111<br />1111<br />1111<br />1111<br />111<br />11</div>
</body>
</html>

第二种方法:采用左列向左浮动,右列绝对定位。为解决 ie6 下右列不撑开问题,在右列中设置一元素右浮动 ( 不是个好方法 )。

<!DOCTYPE html>
<html>
<head>
<title>方法二</title>
<style type="text/css">
#sidebar
{width:100px;height:100px;float:left;background-color:#cccccc;border:2px solid #333333;}
#Wrap
{position:absolute;left:113px;right:5px;height:300px;border:2px solid #333333;
   background:#ccc url(http://www.baidu.com/img/baidu_logo.gif) no-repeat;}
#floatSpan {float:right;} //for ie6
</style>
</head>
<body>
<div id="sidebar"> left </div>
<div id="Wrap"> right<br />right<br />right<br />right<br />right<br />right<br />
right<br />right<br />right<br /> <span id="floatSpan"><span>
</div>
</body>
</html>

此中 wrap 的 right:0; 本是为撑开右列而设置。无奈 ie6 下无效。故设置了 floatSpan。有此之后,去除 float:right 也无影响于效果。

第三种方法,左列使用绝对定位,右列使用 margin-left 定位。

(个人认为此法仍然是最好的方法。)

<!DOCTYPE html>
<html>
<head>
<style type="text/css">
.left{width:100px;height:100px;background-color:#ccc;border:2px solid #333; position:absolute;left:0; top:0; }
.right{height:300px;margin-left:104px;border:2px solid #333;background:#ccc url(http://www.baidu.com/img/baidu_logo.gif) no-repeat;}
</style>
</head>
<body>
<div style="position:relative;overflow:hidden;width:100%;"> <!-- 使用width是为了解决ie6下的bug -->
   <div class="left"> left </div>
   <div class="right"> right<br />right<br />right<br />right<br />right<br />
right<br />right<br />right<br />right</div>
</div>
</body>
</html>

纵观前面的几种方法,不是使用了 margin-left 定位,就是借助 position 的 left 定位,这两种定位方法,都需要事先知道 left 列的宽度,扩展性上不是很好。

那么,抛弃这两种定位方法,可不可以呢?也许你要说,CSS 中定位的方法也就只有这两种,抛弃这两种定位方法,就没有其他定位方法了。难道不用定位也成?

没错。

第四种方法,我们可以借助 ie 下的 haslayout 让 right 列触发 haslayout。而 FF 下则使用 overflow:hidden( 这个的原理不是很理解 )。

<!DOCTYPE html>
<html>
<head>
<title>利用haslayout</title>
<style type="text/css">
#left
{float:left;width:100px;height:100px;background-color:#ccc;border:2px solid #333;
}
#right
{overflow:hidden;zoom:1; border:2px solid #333;background:#ccc url(http://www.baidu.com/img/baidu_logo.gif) no-repeat;
}
</style>
</head>
<body>
   <div id="left"> left </div>
   <div id="right"> 1111<br />1111<br />1111<br />1111<br />1111<br />1111
<br />111<br />11</div>
</body>
</html>
时间: 2024-11-12 13:14:38

两列左列浮动,右列自适应宽度的四种方法的相关文章

数字格式化,从右往左每隔三位加逗号的四种方法

转载自:http://www.uedsc.com/micrometer-method.html 有時候我个必需将数字加上每三个位数加上一个逗号,例如20000变成20,000,目的是为了在方便财务上阅读,所以我整理了以下四种解決的方法: 1.javascript //一个迂回函式 function formatNumber(str) { if(str.length <= 3){ return str; } else { return formatNumber(str.substr(0,str.l

css布局两边固定中间自适应的四种方法

第一种:左右侧采用浮动 中间采用margin-left 和 margin-right 方法. 代码如下: <div style="width:100%; margin:0 auto;"> <div style="width:200px; float:right; background-color:#960">这是右侧的内容 固定宽度</div> <div style="width:150px; float:left

两个变量交换的四种方法

对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. class TestEV //创建一个类 { public static void main(String[]args) { int x =5,y=10; //定义两个变量 int temp = x; //定义第三临时变量temp并提取x值 x = y; //把y的值赋给x y = temp; //然后把临时变量temp值赋给y System.out.println("x="+x

Android提交数据到服务器的两种方式四种方法

Android应用开发中,会经常要提交数据到服务器和从服务器得到数据,本文主要是给出了利用http协议采用HttpClient方式向服务器提交数据的方法. /** * @author Dylan * 本类封装了Android中向web服务器提交数据的两种方式四种方法 */ public class SubmitDataByHttpClientAndOrdinaryWay { /** * 使用get请求以普通方式提交数据 * @param map 传递进来的数据,以map的形式进行了封装 * @p

两个变量交换的四种方法(Java)

对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) class TestEV//创建一个类{ public static void main(String[]args) { int x =5,y=10; //定义两个变量 int temp = x; //定义第三临时变量temp并提取x值 x = y; //把y的值赋给x y = temp; //然后把临时变量temp值赋给y System.out.println("x=&

清除浮动——让包围元素包含浮动元素的四种方法

什么是CSS清除浮动? 在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响(甚至破坏)布局的现象.这个现象叫浮动溢出,为了防止这个现象的出现而进行的CSS处理,就叫CSS清除浮动. 有一段代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta

Java中取小数点后两位(四种方法)

摘自http://irobot.iteye.com/blog/285537 Java中取小数点后两位(四种方法) 一 Long是长整型,怎么有小数,是double吧     java.text.DecimalFormat   df=new   java.text.DecimalFormat("#.##");     double   d=3.14159;     System.out.println(df.format(d)); 二 java.math.BigDecimal     B

CSS 清除浮动的四种方法

在实际项目中,我们经常会用到float属性来对页面进行布局.当使用float时,意味着该元素已经脱离了文档流,相当于浮于文档之上,不占据空间.但是针对兄弟元素为文字内容时,会占据一定空间,从而产生文字环绕的效果.如果不清除浮动,会导致父元素的高度撑不开等一系列问题. 那如何清除浮动呢?给出以下几种方法,一些不常用的就不说明了. 1.对浮动元素的父容器添加after伪类,并给伪类设置clear属性(给浮动元素的周围元素添加clear属性,清除该浮动元素)在浮动元素的后面增加一个块元素,对块元素设置

两个变量交换的四种方法(Java) 七种方法(JS)

对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) 1 class TestEV 2 //创建一个类 3 { 4 public static void main(String[]args) 5 { 6 int x =5,y=10; //定义两个变量 7 8 int temp = x; //定义第三临时变量temp并提取x值 9 x = y; //把y的值赋给x 10 y = temp; //然后把临时变量temp值赋给y