使用边距和浮点水平对齐div

时间:2015-06-30 14:09:05

标签: html css alignment margin

我有3个div - 每个div在父div中,宽度为100%。 CSS:

 .parentDiv {
  height: 454px;
  width: 100% auto;
}
.Div1, .Div2, .Div3{
  display: block;
  position: relative;
  text-align: center;
  height: 434px;
  margin-top: 10px;
  margin-bottom: 10px;
}
.Div1 {
  margin-left: 10px;
  float: left;
  width: 351px;
}
.Div2 {
  width: 351px;
  padding: 0px;
  margin: auto;
  display: block;
}
.Div3 {
  margin-right: 10px;
  float: right;
  width: 351px;
}

Divs的排序方式与HTML中的CSS相同。 然而,结果是左元素(Div1)在正确的位置,假定居中的元素居中(Div2),尽管它的两边都有填充整个父Div的边距。因此,我认为这会导致Div3溢出父Div并垂直“崩溃”。

我真正想知道的是如何对齐div,使左边有一个,一个居中,一个居中。以前关于类似问题的问题在这种情况下似乎没有帮助我:/如果有办法缩短Div2的边距,以便他们可以允许所有的Div在父div中保持正确对齐 - 我真的很想知道如何(最好不要使用绝对像素测量)

这可能没有任何意义 - 但我真的很感激所有的建议/答案:) 干杯

补充说明: 这就是目前的情况: Div1Div2Div3 我想要的是什么: Div1 Div2 Div3 其长度等于parentDiv

HTML(本节内容)

    <div class="parentDiv">

        <div class="Div1">
            <!--Insert code here-->
        </div>

        <div class="Div2">
            <!--Insert code here-->
        </div>

        <div class="Div3">
            <!--Insert code here-->
        </div>

    </div>

4 个答案:

答案 0 :(得分:1)

解决方案#1

您可能会看到JSFIDDLE DEMO

HTML CODE

<div class="parentDiv">
    <div class="Div1">
        Div 1 - Some text
    </div>        
    <div class="Div2">
        Div 2 - Some text
    </div>       
    <div class="Div3">
        Dive 3 - Some text
    </div>           
</div>

CSS代码

 .parentDiv {
  height: 454px;
  width: 100% auto;
}
.parentDiv div{
    float:left;
}
.Div1, .Div2, .Div3{
  display: block;
  position: relative;
  text-align: center;
  height: 434px;
  margin-top: 10px;
  margin-bottom: 10px;
  border: 1px solid #c4c4c4;
}
.Div1 {
  margin-left: 10px;
  width: 351px;
}
.Div2 {
  width: 351px;
  padding: 0px;
  display: block;
}
.Div3 {
  margin-right: 10px;
  width: 351px;
}

解决方案#2

请浏览FIDDLE DEMO

以下是完整的源代码:

  • 我已向所有3个div添加了margin-left。

代码:

<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<style>
 .parentDiv {
  height: 454px;
  width: 100% auto;
}
.parentDiv div{
    /* float:left; */
}
.Div1, .Div2, .Div3{
  display: block;
  position: relative;
  text-align: center;
  height: 434px;
  margin-top: 10px;
  margin-bottom: 10px;
  border: 1px solid #c4c4c4;
}
.Div1 {
  margin-left: 10px;
  width: 351px;
}
.Div2 {
    display: block;
    margin-left: 361px;
    padding: 0;
    width: 351px;  
}
.Div3 {
    margin-left: 714px;
    width: 351px;
}
</style>
</head>
<body>
<div class="parentDiv">
    <div class="Div1">
        Div 1 - Some text
    </div>        
    <div class="Div2">
        Div 2 - Some text
    </div>       
    <div class="Div3">
        Dive 3 - Some text
    </div>           
</div>
</body>
</html>

正如您将观察到的那样:

  1. 我已从margin移除Div2
  2. 我为.parentDiv div添加了新的css - 所以您可以从其他个别div中删除float
  3. 您可能希望删除div的BORDER
  4. 我的建议

    1. 我建议使用自适应断点让您的网页自适应

答案 1 :(得分:0)

尝试在div2上执行此操作:

 .Div2 {
      width: 351px;
      padding: 0px;
      margin: auto;
      display: block;
      margin: 0 auto;
      float: left;
    }

答案 2 :(得分:0)

如果您想要一个比浮动元素更好的解决方案,请将其更改为display:inline-block elements。

.parentDiv > div { font-size: 1em; display: inline-block; vertical-align: top; }
.parentDiv { font-size : 0; }

这有效,并且优于浮动。 Float仅适用于浮动元素,不适用于设计布局。这是一些前端开发人员的错误和最常见的技术。感谢浮动,您可以在页面上看到数千吨的clearfix。这是残酷的,废话。

答案 3 :(得分:0)

不用担心,最终使用一些jQuery来解决它:

$(document).ready(function(){
    var width = $(".parentDiv").css("width")
    var width = width.replace("px","");
    var width = parseInt(width,10);
    var val1 = width-1073;
    var val2 = val1/2;
    $(".Div2").css("margin-left",val2);
    $(".Div2").css("margin-right",val2);

    $(window).resize(function(){
        var width = $(".parentDiv").css("width");
        var width = width.replace("px","");
        var width = parseInt(width,10);
        if(1073>width) {
            $(".Div3").css("display","hidden")
        }
        else {
            var val1 = width-1073;
            var val2 = val1/2;
            $(".Div2").css("margin-left",val2);
            $(".Div2").css("margin-right",val2);
        }
    });

我知道它不是最有效的,也不是漂亮的代码(我对jQuery和Javascript很新) - 但它确实有用:)我想向任何人道歉非常友好地试图破译我令人震惊的解释:/

请注意,我还将Child Div的定位类型设置为绝对,然后将Div1设置为left:0;和Div3为右:0;