【问题标题】:Two fluid columns on the sides and width:auto for the middle column两侧和宽度上有两个流体柱:中间柱为自动
【发布时间】:2015-01-12 22:08:30
【问题描述】:

我需要创建一个 CSS/HTML 导航菜单,其中的徽标居中对齐,菜单选项位于两侧。我想过这样做:

http://jsfiddle.net/d32an55L/

<div id="wrapper">
    <div id="left">aaaa</div>
    <div id="center"> Center content</div>
    <div id="right">aaaa</div>
</div>

#wrapper{
    display:table;
    width:100%;
    height:100%;
}
#wrapper > div{
    display:table-cell;
    height:100%;
}
#left {
    background-color:pink;
    text-align:right;
}
#center {
    background-color:green;
    width:100px;
}
#right {
    background-color:red;
}
body, html{
    width:100%;
    height:100%;
}

问题是我不知道如何使中间列的宽度适合列内的内容,例如 width:auto;

你们知道这是否可以做到吗?有没有更好的方法来实现这一点?

谢谢。

编辑: 我所需要的只是使中间列的宽度与它所包含的内容一样宽,而侧列保持流动。

【问题讨论】:

  • 我不确定我是否明白你在问什么。 width: auto; 如果内容未并排填充至少一行空间,则将列大小调整为内容与页面其余部分的比率。当涉及到侧边导航时,您通常只需为侧边栏设置一个固定宽度。
  • 好的,我只需要中间列的宽度与它所包含的内容一样宽,并且两边的列都是流畅的。这是否阐明了我想要实现的目标?

标签: html css menu fluid-layout


【解决方案1】:

在您说明意图之后,只有 2 种方法(我目前能想到的)来做到这一点。如果您需要保持反向兼容性,则需要使用 JavaScript。如果您只关心更现代的浏览器,CSS3 有一个属性和display 模式称为flex。它非常易于使用。这是修改后的 CSS 来实现它:

#wrapper {
    display:-webkit-box;
    display:-moz-box;
    display:-ms-flexbox;
    display:-webkit-flex;
    display:flex;
    width:100%;
    height:100%;
}

#wrapper > div {
    height:100%;
}

#left {
    background-color:pink;
    text-align:right;
    flex:1 0 auto;
}

#center {
    background-color:green;
    flex:0 1 auto;
}

#right {
    background-color:red;
    flex:1 0 auto;
}

body, html {
    width:100%;
    height:100%;
}

JSFiddle:http://jsfiddle.net/cwj7132y/

如果您需要对旧浏览器的兼容性,我可以绘制一些东西。

【讨论】:

  • 就是这样!但是我只是有点担心浏览器的兼容性。是否有浏览器兼容的非javascript方式来实现它?谢谢!
  • @human 抱歉回复慢,工作。 ^^' 通过额外的显示,您将获得对 IE10 和其他一些主要浏览器的向后兼容性,但我不知道除了 JavaScript 之外的任何解决方案来解决您正在寻找的内容。基本上,您必须渲染该列的内容,确定它需要的空间量,然后使用该值作为固定宽度重新渲染整个页面。这只能通过客户端脚本来实现。
猜你喜欢
  • 2015-11-05
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 2015-03-09
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多