当前位置: 首页 > 知识库问答 >
问题:

如何在不使用flexbox的情况下垂直对齐两个响应div?

岳阳文
2023-03-14

我试图使用两个div并排响应设计。左div包含一个随页面大小变化的图像。右div包含一个不会改变的菜单。当页面达到一定大小(太小)时,菜单应该在图像下方并停留在中间)。

但它也需要垂直对齐在左边的div的中间。

应在较大屏幕上垂直居中:

目前,它可以在较小的屏幕上正常工作:

这是我的HTML:

<div id="container">
        <div id="content">
            <div class="row">
              <div class="column" style="background-color:#aaa;">
                <img class="header-img" sr="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png"/>
          </div>
          <div class="column" style="background-color:#bbb;">
            <table style="width:100%">
              <tr>
                <td>Menu</td>
                <td>Menu</td> 
                <td>Menu</td>
                <td>Menu</td>
              </tr>
              </table>
              <table style="width:100%">
              <tr>
                <td>Menu</td>
                <td>Menu</td> 
                <td>Menu</td>
                <td>Menu</td>
                <td>Menu</td>
              </tr>
            </table>
    </div>
</div>

这是我的CSS:

    #content {
        max-width: 1500px;
        margin-left: auto;
        margin-right: auto;
        background-color:red;
    }

    * {box-sizing: border-box;}

    body { 
      margin: 0;
      font-family: Arial, Helvetica, sans-serif;
    }

    /* Create two equal columns that floats next to each other */
    .column {
      float: left;
      width: 50%;
      padding: 10px;
    }

    /* Clear floats after the columns */
    .row:after {
      content: "";
      display: table;
      clear: both;
    }

    /* Responsive layout - makes the two columns stack on top of each other instead of next to each other */
    @media screen and (max-width: 600px) {
      .column {
        width: 100%;
      }
    }

    .header-img {
        width: 100%;
        max-width: 500px;
    }

    td {
        text-align: center;
    }

我尝试了所有方法,但是所有其他常规对齐方法都打破了其他方法。

共有2个答案

齐乐逸
2023-03-14

与jleggio类似的答案,但这里的红色背景仍然根据问题中的图像。

* {box-sizing: border-box;}

body { 
    margin: 0;
    font-family: Arial, Helvetica, sans-serif;
}

#container {
	display: table;
	width: 100%;
}

#content {
	max-width: 1500px;
	margin-left: auto;
	margin-right: auto;
	background-color: red;
}

.cell {
	width: 50%;
	display: table-cell;
	vertical-align: middle;
}


@media screen and (max-width: 600px) {
	.cell {
	    width: 100%;
		display: block;
	}
}

.header-img {
	width: 100%;
	max-width: 500px;
}

td {
    text-align: center;
}
<div id="container">
	<div id="content">
		<div class="cell" style="background-color: #aaa;">
			<img class="header-img" src="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png"/>
		</div>
		<div class="cell">
			<div style="background-color: #bbb;">
    			<table style="width:100%">
					<tr>
						<td>Menu</td>
						<td>Menu</td> 
						<td>Menu</td>
						<td>Menu</td>
					</tr>
				</table>
				<table style="width:100%">
					<tr>
						<td>Menu</td>
						<td>Menu</td> 
						<td>Menu</td>
						<td>Menu</td>
						<td>Menu</td>
					</tr>
			    </table>
			</div>
		</div>
	</div>
</div>
古扬
2023-03-14

您可以使用display:tabledisplay:table cell

.row{
  display:table;
  width:100%;
}

.column {
  display:table-cell;
  vertical-align:middle;
  width: 50%;
  padding: 10px;
}

@media screen and (max-width: 600px) {
  .column {
    width: 100%;
    display:block;
  }
}

<代码>垂直对齐:中间< /代码>使所有东西在中间也垂直对齐。

这是一支密码笔,你可以看到

 类似资料:
  • 我想使用flexbox来垂直对齐 中的一些内容,但没有取得很大的成功。 我在网上查了一下,很多教程实际上都使用了包装器div,它从父级的flex设置中获得,但我想知道是否可以去掉这个附加元素? 我选择在此实例中使用flexbox,因为列表项高度将是动态的。 null null

  • 问题内容: 我的布局有一个容器flex-container和一个孩子。 HTML: 容器和孩子的身高未知。目标是: 如果孩子的身高低于容器,则其水平和垂直居中。 如果孩子的身高大于容器,则它会调整到顶部和底部,我们可以滚动。 方案: 在此处输入图片说明 使用flexbox将元素居中的最快方法是: 但是,如果容器的子代具有更高的高度,则该子代将无法 正确显示。子项显示为割伤(仅顶部)。 问题答案:

  • 我有个问题快把我逼疯了。 我有一个包装器,其中包含一个带有一些文本的div和一个图像。图像和div的大小各不相同。包装器div将调整为较大包装器的大小。 它们都应该垂直对齐,如下所示: 我偶然发现了这个帖子: http://www.jakpsatweb.cz/css/css-vertical-center-solution.html 正如你在小提琴上看到的: http://jsfiddle.net

  • 问题内容: 所以我知道如果使用,我们可以将div水平居中。应该按照我认为的方式工作?垂直居中对齐吗? 为什么也不起作用? 问题答案: 您不能使用: 因为它是不是适用于块级元素 并且因为它们的使用值将计算为零 因为基于百分比的边距值是相对于包含块的宽度计算的 实际上,文档流和元素高度计算算法的性质使得不可能使用边距将元素垂直放置在其父元素内部居中。每当垂直边距的值更改时,都会触发父元素高度的重新计算

  • 垂直对齐 1. grid-template-areas 属性值保持换行,并使用空格保持每列垂直对齐。 例如: .foo { grid-template-areas: "header header" "nav main" "footer ...."; } 2. grid、grid-template

  • 问题内容: 目标:纯Canvas上的Android> = 1.6。 假设我想编写一个函数,该函数将绘制一个(宽度,高度)大的红色矩形,然后在其中绘制一个黑色的 Hello World 文本。我希望文本在视觉上位于矩形的中心。因此,让我们尝试: 现在,我不知道要在drawText的参数中加上标记的内容,即我不知道如何垂直对齐文本。 就像是 ???? = topLeftY + height / 2 +