在容器内做出正确的div响应

时间:2015-03-28 18:59:28

标签: html css responsive-design

我在一个容器中有两个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;
    }
}

3 个答案:

答案 0 :(得分:2)

想法是使用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>

答案 1 :(得分:1)

你可以通过这样的方式完成你想要的事: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完成什么,以及最终想要获得哪种布局?

答案 2 :(得分:0)

从右侧div中删除max-width。你还必须设置一个百分比小于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>