当前位置:  开发笔记 > 前端 > 正文

如何使div填充剩余的水平空间?

如何解决《如何使div填充剩余的水平空间?》经验,为你挑选了8个好方法。

我有2个div:一个在左侧,一个在我的页面右侧.左侧的那个有固定的宽度,我希望右侧的一个填充剩余的空间.

    #search {
        width: 160px;
        height: 25px;
        float: left;
        background-color: #ffffff;
    }
    #navigation {
        width: 780px;
        float: left;  
        background-color: #A53030;
    }



1> Hank..:

我在Boushley的回答中发现的问题是,如果右列比左侧更长,它只会环绕左侧并继续填充整个空间.这不是我想要的行为.在搜索了很多"解决方案"之后,我发现了这个关于创建三个列页面的精彩教程.

作者提供了三种不同的方式,一种固定宽度,一种具有三个可变列,一种具有固定外柱和可变宽度中间.比我发现的其他例子更优雅和有效.显着提高了我对CSS布局的理解.

基本上,在上面的简单情况下,向左浮动第一列并给它一个固定的宽度.然后在右边的列中给出一个比第一列略宽的左边距.而已.完成.Ala Boushley的代码:

这是Stack Snippets&jsFiddle的演示

#left {
  float: left;
  width: 180px;
}

#right {
  margin-left: 180px;
}

/* just to highlight divs for example*/
#left { background-color: pink; }
#right { background-color: lightgreen;}
left


2> Mihai Frenti..:

解决方案来自display属性.

基本上你需要使两个div像表格单元格一样.因此,不必使用float:left,您必须display:table-cell在两个div 上使用,并且还需要设置动态宽度div width:auto;.应将两个div放入具有该display:table属性的100%宽度容器中.

这是css:

.container {display:table;width:100%}
#search {
  width: 160px;
  height: 25px;
  display:table-cell;
  background-color: #FFF;
}
#navigation {
  width: auto;
  display:table-cell;
  /*background-color: url('../images/transparent.png') ;*/
  background-color: #A53030;
}

*html #navigation {float:left;}

和HTML:

重要信息:对于Internet Explorer,您需要在动态宽度div上指定float属性,否则不会填充空格.

我希望这能解决你的问题.如果你愿意,你可以在我的博客上阅读我写的关于此的完整文章.


@einord,这个解决方案不使用表,我知道表只应该用于表格数据.所以,这里是脱离背景的.实际表格和显示:表格(+其他变化)属性是完全不同的东西.
div中宽度为:auto的内容大于视口中可用空间的其余部分时不起作用.
@einord,使用HTML表意味着HTML代码中整个表结构的定义.CSS表模型允许您使几乎任何元素表现得像表元素而不定义整个表树.

3> Jordan..:

现在,您应该使用该flexbox方法(可能适用于具有浏览器前缀的所有浏览器).

.container {
    display: flex;
}

.left {
    width: 180px;
}

.right {
    flex-grow: 1;
}

更多信息:https://css-tricks.com/snippets/css/a-guide-to-flexbox/


Flexbox FTW ...我已经尝试了这个线程中的所有其他解决方案,没有任何作用,我尝试这个flexbox解决方案,它立即工作...经典CSS(即在flexbox和css网格出现之前)完全糟糕的布局... flex和网格规则:-)

4> mystrdat..:

由于这是一个相当受欢迎的问题,我倾向于使用BFC分享一个很好的解决方案.
下面的示例Codepen 这里.

.left {
  float: left;
  width: 100px;
}
.right {
  overflow: auto;
}

在这种情况下,overflow: auto触发上下文行为并使正确的元素扩展到可用的剩余宽度,如果.left消失,它将自然地扩展到全宽.对于许多UI布局来说,这是一个非常有用和干净的技巧,但最初可能很难理解"它为何起作用".



5> Boushley..:

这似乎可以实现您的目标.

#left {
  float:left;
  width:180px;
  background-color:#ff0000;
}
#right {
  width: 100%;
  background-color:#00FF00;
}
left


6> Marcos B...:

如果您不需要与某些浏览器的旧版本(例如IE 10 8或更低版本)兼容,则可以使用calc()CSS功能:

#left {
   float:left;
   width:180px;
   background-color:#ff0000;
}

#right {
   float: left;
   width: calc(100% - 180px);
   background-color:#00FF00;
}



7> 小智..:

@ Boushley的答案是最接近的,但是有一个问题没有得到解决.的格取浏览器的整个宽度; 内容采用预期的宽度.要更好地看到这个问题:



    


    

Left

http://jsfiddle.net/79hpS/

内容位于正确的位置(在Firefox中),但宽度不正确.当子元素开始继承宽度(例如表格width: 100%)时,它们的宽度等于浏览器的宽度,导致它们从页面右侧溢出并创建水平滚动条(在Firefox中)或不浮动并向下推(在铬).

您可以通过添加到右栏轻松解决此问题overflow: hidden.这为内容和div提供了正确的宽度.此外,表格将获得正确的宽度并填充剩余的可用宽度.

我尝试了上面的其他一些解决方案,它们没有完全适用于某些边缘情况,并且太复杂而无法修复它们.这很有效,而且很简单.

如果有任何问题或疑虑,请随意提出.


@tomswift设置`overflow:hidden`将右列放在自己的块格式化上下文中.块元素占用它们可用的所有水平空间.请参阅:https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context

8> Dariusz Siko..:

以下是对已接受解决方案的一点修复,可防止右列落入左列.如果有人不知道的话,width: 100%;overflow: hidden;一个棘手的解决方案取而代之.




    This is My Page's Title
    



    
left

http://jsfiddle.net/MHeqG/2600/

[edit]同时查看三栏布局的示例:http: //jsfiddle.net/MHeqG/3148/

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有