【问题标题】:Make right div within container responsive使容器内的正确 div 响应
【发布时间】:2015-04-30 21:26:00
【问题描述】:

我在一个容器中有 2 个 div,一个在中间,一个在右侧。我希望右侧 div 的宽度响应式。目前,只有居中的max-width 有效。

看到这个jsFiddle

如何让正确的 div 也响应?

HTML:

<div id="container">

    <div id="middle">Centered</div>

    <div id="right">Make me responsive</div>

</div>

CSS:

#container {
    width: 100%;
    text-align: center;
    position: relative;
}

#middle {
    background: #ddd;
    margin: 0 auto;
    position: relative;
    width: 100%;
    max-width:300px;
    height:300px;
    display: inline-block;
    vertical-align: top;
}

#right {
    background:yellow;
    width:100%;
    max-width:300px;
    display: inline-block;
    vertical-align: top;
    position: absolute;
}


@media screen and (max-width: 350px) {
    #right {
        display: none;
    }
}

【问题讨论】:

  • 您希望两个响应式相邻 div 会有什么反应?!
  • @AliSheikhpour 从逻辑上讲,右侧的 div 应该“缩小”,直到屏幕碰到居中的 div。在小提琴中缩小屏幕以进行演示。
  • @nima 不确定我是否理解您的问题。中间的 div 应该设置为 max-width:300px;

标签: html css responsive-design


【解决方案1】:

这个想法是使用flexbox。并为左列添加一个伪元素,以便使用现有标记使中间的列居中。

JSFiddle Demo

#container {
    display: flex;
}
#container:before, #middle, #right {
    border: 1px solid red;
    flex: 1 1 0;
}
#container:before {
    content:"";
}
#middle {
    max-width: 100px;
}
<div id="container">
    <div id="middle">Centered</div>
    <div id="right">Responsive</div>
</div>

【讨论】:

    【解决方案2】:

    您可以通过执行以下操作来完成您想要的:JSFiddle
    唯一的问题是你的中间 div 必须有一个固定的宽度,但使用媒体查询你可以忘记这一点。请记住,calc browser support 可能会更好(尽管有 polyfills)。

    #middle {
        position: relative;
        margin: 0 auto;
        height: 300px;
        width: 340px;
        background: #ddd;
        text-align: center;
    }
    
    #right {
        position: absolute;
        top: 0; right: 0;
        width: calc(50% - 170px);
        background: red;
    }
    
    @media screen and (max-width: 340px) {
        #middle {
            width: auto;
            max-width: 340px;
        }
        #right {
            display: none;
        }
    }
    


    编辑前

    max-width 不适用于 position 设置为 absolute 的元素。

    你到底想用absolute做什么,最后你想得到什么样的布局?

    【讨论】:

      【解决方案3】:

      从右 div 中删除最大宽度。您还必须设置一个小于 100% 但完全 100% 的百分比才能对响应式 div 有意义:

      #container {
        width: 100%;
        text-align: center;
        position: relative;
      }
      #middle {
        background: #ddd;
        margin: 0 auto;
        position: relative;
        width: 80%;
        max-width: 300px;
        height: 300px;
        display: inline-block;
        vertical-align: top;
      }
      #right {
        background: yellow;
        width: 20%;
        display: inline-block;
        vertical-align: top;
        position: absolute;
      }
      @media screen and (max-width: 350px) {
        #right {
          display: none;
        }
        #middle {
          width: 100%;
        }
      }
      <div id="container">
      
        <div id="middle">Centered</div>
      
        <div id="right">Make me responsive</div>
      
      </div>

      【讨论】:

      • 感谢您的回答。但有一个问题。我的目标是填满整个屏幕。所以居中的 div 覆盖了 700px 的宽度,右边的 div 覆盖了剩余部分的 50%(因为我们的左边空间是空的)。所以正确的 div 应该总是到达屏幕的末端,但不能重叠。您的解决方案不适用于此,对吗?
      猜你喜欢
      • 2012-09-19
      • 2018-12-25
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多