如何让HTML页面内容上下排列而非并排?
解决内容并排问题的方案
问题核心是你的.contact-info-container使用了display: flex且默认方向为横向(row),所以内部元素会并排排列。以下是具体修改步骤:
1. 调整容器的Flex布局方向
将.contact-info-container改为垂直排列:
.contact-info-container { display: flex; flex-direction: column; /* 切换为垂直排列 */ gap: 20px; /* 用gap统一控制元素间距,替代零散的margin */ margin-top: 20px; }
2. 重置子元素的Flex属性
去掉原有的横向布局相关设置,让子元素自动占满容器宽度:
.contact-info-container div { flex-basis: auto; /* 重置为默认值,取消固定宽度占比 */ margin: 0; /* 去掉左右margin */ } .contact-info-container .map-container { flex-basis: auto; /* 重置地图容器的宽度设置 */ margin-left: 0; /* 去掉左侧margin */ }
3. 修改表单容器的显示方式
把.container的inline-block改为block,确保它独占一行:
.container { background-color: #FFFFFF; padding: 40px; border-radius: 10px; box-shadow: 0px 0px 10px #333333; width: 400px; margin: 0 auto; display: block; /* 改为block,避免和其他元素同行 */ }
完整修改后的CSS代码
body { background-color: #ffffff; color: #000000; font-family: Arial, sans-serif; min-height: 1000px; } #header { background-color: #000000; padding: 10px; text-align: center; } #header h1 { color: #FFFFFF; margin-top: 10px; padding-top: 10px; } #navbar { background-color: #000000; overflow: hidden; margin: auto; width: auto; text-align: center; } #navbar a { position: relative; display: inline-block; color: #FFFFFF; text-align: center; padding: 14px 16px; text-decoration: none; } #navbar a:hover { background-color: #666666; } #content { margin-top: 20px; padding: 20px; } #about { margin-top: 20px; padding: 20px; } #footer { background-color: #000000; color: #ffffff; padding: 10px; text-align: center; position: fixed; bottom: 0; width: 100%; } label { display: block; margin-bottom: 10px; } input[type=text], input[type=email], textarea { width: 100%; padding: 12px 20px; margin: 8px 0; display: inline-block; border: 1px solid #ccc; box-sizing: border-box; font-size: 16px; } textarea { height: 150px; } input[type=text], input[type=password] { width: 100%; padding: 12px 20px; margin: 8px 0; display: inline-block; border: 1px solid #ccc; box-sizing: border-box; font-size: 16px; } button[type=submit] { background-color: #000000; color: #FFFFFF; padding: 12px 20px; border: none; border-radius: 4px; cursor: pointer; font-size: 16px; } button[type=submit]:hover { background-color: #666666; } .container { background-color: #FFFFFF; padding: 40px; border-radius: 10px; box-shadow: 0px 0px 10px #333333; width: 400px; margin: 0 auto; display: block; } .contact-info { display: flex; justify-content: space-between; margin-top: 20px; } .contact-info div { flex-basis: calc(33.3% - 20px); margin: 0 10px; } .map-container { margin-top: 20px; position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; } .map-container iframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .contact-info-container { display: flex; flex-direction: column; gap: 20px; margin-top: 20px; } .contact-info-container div { flex-basis: auto; margin: 0; } .contact-info-container .map-container { flex-basis: auto; margin-left: 0; }
效果说明
flex-direction: column直接让flex容器内的元素从上到下垂直排列gap属性可以简洁地控制元素间的垂直间距,无需逐个设置margin- 重置子元素的Flex属性,避免原有横向布局的样式残留干扰
内容的提问来源于stack exchange,提问作者Mhegazy
相关产品推荐
相关产品推荐

