【问题标题】:HTML/CSS - Responsive 3 column navigation barHTML/CSS - 响应式 3 列导航栏
【发布时间】:2013-03-08 00:48:54
【问题描述】:

真的为如何实现这一点而苦苦挣扎。

我想做一个导航栏,以页面为中心 960px。此导航栏中有 3 个不同的部分或列。最左边的最小,200px。中间的总是居中,总是 20px。最右边的最小为 300 像素,并与右侧对齐。在完整的 960 像素处,它看起来像这样:

在 740 像素时,它看起来像这样:

在 620 像素时,它看起来像这样:

在 520 像素时,它看起来像这样:

在这之后,它会进入一些替代设计,所以不用担心。 这样做的最佳方法是什么?

编辑:这就是我目前所拥有的。它在 960 像素处工作,但是当你调整它的大小时,中间的 div 不会停留在中心,因为有填充。当它变得太小时,它也会分崩离析,变成 2 行。

.left {
    float: left;
    width: 300px;
}
.right {
    float: right;
    width: 400px;
}
.middle {
    width: 100%;
    padding: 0 100px;
    height: 39px;
}

【问题讨论】:

  • 在我看来你也需要一个最大宽度,否则左右列与中间列之间可能永远不会有那个空白。
  • 居中是什么意思?在 960px 和 740px 中,中间 div 居中,但在 520px 视图中,它偏向左侧。
  • 在我看来,您希望左右列的宽度随着浏览器宽度的减小而增加,对吧?如果是这样,我认为这不能仅用 CSS 来完成。您可能需要 JavaScript。
  • @JoeyP 我添加了 620px,这是它可能会改变的地方——直到那时,中间的 div 居中。过了那个点,div 将与正确的 div 对齐。所以我想我只需要设计从 960 像素到 620 像素。过去这很容易
  • @JudeOsborn 不,它们看起来正在增长,因为图像已调整大小。如果您感到困惑,请在新标签页中打开图片。

标签: html css alignment multiple-columns


【解决方案1】:

您应该只需要一个媒体查询。在下面的示例中,当窗口缩小时,黄色 div 将居中直到 620 像素,然后它会与粉色 div 一起滑动,直到 520 像素才会滚动。不确定您是在寻找这个还是@jhunlio 的解决方案。

html

<div class="wrapper">
    <div class="left-col"></div>
    <div class="inner-wrapper">
        <div class="middle-col"></div>
        <div class="right-col"></div>
        <br class="clean" />
    </div>
</div>

css

body{
  margin: 0px;
}
.clean{
  clear: both;
}
.wrapper{
  height: 100px;
  position: relative;
  min-width: 520px;
}
.inner-wrapper{
  position: absolute;
  top: 0px;
  right: 0px;
  width: calc(50% + 10px);
  height: 100%;
}
.left-col{
  background: green;
  width: 200px;
  height: 100%;
}
.middle-col{
  width: 20px;
  height: 100%;
  float: left;
  background-color: yellow;
}
.right-col{
  float: right;
  width: 300px;
  background: pink;
  height: 100%;
}

@media screen and (max-width: 620px){
  .inner-wrapper{
    width: auto; 
  }
}

小提琴http://jsfiddle.net/BkFup/2/

【讨论】:

  • 这正是我想要的.. 但这只是黄色 div 一直粘在粉色 div 上?
【解决方案2】:

这是一个棘手的问题,因为它确实需要像素完美的媒体查询才能完成:

http://codepen.io/cimmanon/pen/cmJhx

<nav>
  <div class="a">a</div>
  <div class="b">b</div><!--
  --><div class="c">c</div>
</nav>

注意注释掉的空格^^

body {
  margin: 0;
  padding: 0;
}

@media (min-width: 520px) and (max-width: 620px) {
  nav {
    text-align: right;
  }

  nav div {
    text-align: left;
    display: inline-block;
  }

  .a {
    float: left;
  }
}

@media (min-width: 620px) {
  nav {
    position: relative;
    overflow: hidden;
  }

  .a {
    float: left;
    min-width: 200px;
  }

  .b {
    position: absolute;
    top: 0;
    left: 50%;
    margin-left: -10px;
  }

  .c {
    float: right;
    min-width: 300px;
  }
}

/* colors! */

.a {
  background: green;
  min-width: 200px;
}

.b {
  background: yellow;
  width: 20px;
}

.c {
  background: pink;
  min-width: 300px;
}

当然,问题在于您的第一个/最后一个元素是否不够大,无法容纳它们的子元素。因为中间元素绝对定位在页面中间的 620px 断点处,所以不能有任何出错的余地。

【讨论】:

  • 非常出色的工作!也非常简单,只有 3 个 div,而且顺序也正确。非常感谢!
【解决方案3】:

html

<div class="navWrap">
    <div class="nav">
        <div class="navLeft"></div>
        <div class="navCenterWrap">
            <div class="navCenter"></div>
        </div>
        <div class="navRight"></div>
    </div>
</div>    

css

.navWrap {margin:auto; width:960px;}
.nav {
    float:left;
    width:100%;
}
.navLeft {
    width:20%;
    float:left;
    padding:10px 0;
    background-color:green;
}
.navCenterWrap {
    margin:auto;
    width:5%;
}
.navCenter {
    float:left;
    width:100%;
    padding:10px 0;
    background-color:yellow;
}
.navRight {
    width:30%;
    float:right;
    padding:10px 0;
    background-color:blue;
}

@media screen and (max-width: 740px){ 
    .navWrap {
        width:100%;
    }
}

@media screen and (max-width: 520px){ 
    .navWrap {
        width:100%;
    }
    .navLeft {
      width:40%; 
        margin:0;
    }
    .navCenterWrap {
        width:5%;
        float:left;
    }
    .navRight {
        width:55%;
        margin:0;
    }
}

注意:滚动小提琴看看效果
工作demo

【讨论】:

  • 这是我想要的,但我需要它是流畅的,而不仅仅是在某些阈值处改变。
  • 您说您想要960px wrapper,但如果您想要更流畅的布局,只需将960px 删除为100%
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 2014-04-26
  • 2021-11-20
  • 1970-01-01
  • 2021-12-30
相关资源
最近更新 更多