html - 两个 div 在 html 和 CSS 中没有水平对齐

标签 html css

我目前在对齐我的页面上的两个 div 时遇到问题。它适用于三个盒子,但当使用不同的宽度时,垂直对齐会偏离几个像素。

当 PHP 变量设置为 0 时,您会看到 div 框在水平轴和垂直轴上完美对齐。但是,当您将 PHP 变量切换为 1 时,它们会垂直对齐(如果在当前变量下方添加了更多),但不会水平对齐。

如何设置才能使它们完美对齐?

下面是我的 CSS:

body {
   background-color:#FFFFFF;
   margin:0px;
   height:100%;
}
#container {
   min-height:100%;
   height:auto !important;
   height:100%;
   margin:0 auto -50px;
   overflow:hidden;
}
#nhHeader {
    background-color:#215967;
    width:100%;
}
#headerTitle {
   float:left;
   padding-left:5.5em;
   color:#FFFFFF;
}
#headerLinks {
   float:right;
   padding-right:1.5em;
   text-align:right;
   vertical-align:middle;
}
#nhBody {
   height:100%;
   width:100%;
}
#nhBodyHeader {
   float:left;
   padding-left:1em;
   display: table;
   width:100%;
}
#nhBodyMain {
   width:100%;
}
span.nhBodyHeaderText, span.nhBodyHeaderImage {
  vertical-align: middle;
  display: table-cell;
}
span.nhBodyHeaderText {
   font-size:large;
   font-weight:bold;
}
.detailCellContainer2 {
   float:left;
   padding:1.6%;
   width:63%;
}
.detailCellContainer3 {
   float:left;
   padding:1.6%;
   width:33%;
}
.detailCell1Header, .detailCell2Header {
   color:#FFFFFF;
   font-size:1.5em;
   width:100%;
}
.detailCell1Header {
   background-color:#93CDDD;
}
.detailCell2Header {
   background-color:#215968;
}
.detailCellHeaderText {
   padding:0.5em;
}
.detailCellMainText {
   background-color:#DBEEF4;
   padding:1em;
}

下面是我的 HTML/PHP:

<html>
    <head>
    <title>NH Reporting</title>
    <link rel='stylesheet' type='text/css' href='nh.css'>
    </head>

    <body>
    <div id='container'>
        <div id='nhHeader'>
        <div id='headerTitle'>
            DSU Reporting
        </div>
        <div id='headerLinks'>
            Links
        </div>
        </div>
        <div id='nhBody'>
        <?php
            $i = 1;
            switch ($i) {
            case 0:
                //For Main:
                echo "<div id='nhBodyHeader'><span class='nhBodyHeaderImage'><img src='images/NHLogo.png'></span><span class='nhBodyHeaderText'>NH - Reporting Menu</span></div>";
                echo "<div id='nhBodyMain'>";
                echo "<div class='detailCellContainer3'>";
                    echo "<div class='detailCell1header'><div class='detailCellHeaderText'>Activity</div></div>";
                    echo "<div class='detailCellMainText'>Report 1<br>Report 2</div>";
                echo "</div>";

                echo "<div class='detailCellContainer3'>";
                    echo "<div class='detailCell1header'><div class='detailCellHeaderText'>Financials</div></div>";
                    echo "<div class='detailCellMainText'>Report 1<br>Report 2</div>";
                echo "</div>";

                echo "<div class='detailCellContainer3'>";
                    echo "<div class='detailCell1header'><div class='detailCellHeaderText'>Organisation</div></div>";
                    echo "<div class='detailCellMainText'>Report 1<br>Report 2</div>";
                echo "</div>";

                echo "<div class='detailCellContainer3'>";
                    echo "<div class='detailCell1header'><div class='detailCellHeaderText'>Workforce</div></div>";
                    echo "<div class='detailCellMainText'>Report 1<br>Report 2</div>";
                echo "</div>";

                echo "<div class='detailCellContainer3'>";
                    echo "<div class='detailCell1header'><div class='detailCellHeaderText'>Quality</div></div>";
                    echo "<div class='detailCellMainText'>Report 1<br>Report 2</div>";
                echo "</div>";

                echo "<div class='detailCellContainer3'>";
                    echo "<div class='detailCell2header'><div class='detailCellHeaderText'>My Recent Reports</div></div>";
                    echo "<div class='detailCellMainText'>Report 1<br>Report 2</div>";
                echo "</div>";
                echo "</div>";
                break;
            case 1:
                //For Drill-down
                echo "<div id='nhBodyHeader'><span class='nhBodyHeaderImage'><img src='images/NHLogo.png'></span><span class='nhBodyHeaderText'>Activity Reporting Menu</span></div>";
                echo "<div id='nhBodyMain'>";
                echo "<div class='detailCellContainer2'>";
                    echo "<div class='detailCellContainer1'>";
                    echo "<div class='detailCell1header'><div class='detailCellHeaderText'>Workforce</div></div>";
                    echo "<div class='detailCellMainText'>Report 1<br>Report 2</div>";
                    echo "</div>";
                echo "</div>";

                echo "<div class='detailCellContainer3'>";
                    echo "<div class='detailCellContainer1'>";
                    echo "<div class='detailCell1header'><div class='detailCellHeaderText'>Favourites</div></div>";
                    echo "<div class='detailCellMainText'>Report 1<br>Report 2</div>";
                    echo "</div>";
                echo "</div>";
                echo "</div>";
                break;
            case 2:
                //For Reports:
                echo "<iframe src='http://www.linkhere.com.au/reportXYZ' frameborder=0 height='100%' width='100%'></iframe>";
                break;
            }

        ?>
        </div>
    </div>
    </body>
</html>

问题来了: Image Version of Problem

2014 年 2 月 13 日编辑: 在进一步挖掘之后,我发现它与 detailCellContainer2 和 detailCellContainer3 的宽度百分比有关。我不太确定如何解决它,但如果百分比相同,它们将显示在同一级别,如果百分比不同,则较小的百分比显示为高于较大的百分比(百分比之间的差异越大对齐的差异越大)。

最佳答案

好吧,你将无法在 JSFiddle 中重现那个 php 开关,但我在第一个案例中将所有内容加载到这里:JSFiddle

由此我可以看出 #nhBodyMain 的高度为 0,这是从祖先元素继承而来的。所以我认为这里的问题是两个 div 上方没有清除某些东西。使用开发工具检查并找出原因。你需要在你的 div 之间清除一些东西。也许是这样的(除了使用实际的 clearfix——如果你不知道的话谷歌它):

<div id="nhBodyHeader"><span class="nhBodyHeaderImage"><img src="images/NHLogo.png">                
</span><span class="nhBodyHeaderText">NH - Reporting Menu</span></div>
<div id="nhBodyMain">
<div class="detailCellContainer3">
<div class="detailCell1header"><div class="detailCellHeaderText">Activity</div></div>
<div class="detailCellMainText">Report 1<br>Report 2</div>
</div>

关于html - 两个 div 在 html 和 CSS 中没有水平对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21719680/

相关文章:

javascript - 获取 jQuery 中匹配元素周围的文本

html - 切换隐藏元素的 CSS 不透明度过渡

css - 当列表变大时,上下文菜单不会显示在正确的位置

css - 如何动画CSS伪类

html - 获取两个内联(或内联 block )元素以匹配高度

html - 我是否应该将完整的网页作为 html/text 传递给 rest GET 调用

javascript - pdfMake - open() 和 print() 函数不工作

html - 通过 HTML5 客户端连接到 Azure 远程应用程序

html - 缩小 iframe 中内容的 View

css - 如何保持具有动态内容的元素的圆形形状?