删除h1元素后Toggle Switch偏移故障排查求助
问题根源与解决方案
问题出在垂直外边距合并,以及table-cell布局的特性变化:
- 页面存在h1时,
.container是table-cell布局,table-cell内的块级子元素不会触发垂直外边距合并,开关按钮(.slideBtn)的margin-top:4px能正常生效,保持在滑块容器内的垂直居中位置。 - 删除h1后,滑块容器(
.slider)作为块级元素,和初始状态为块级的开关按钮触发了垂直外边距合并——父容器与子元素的顶部外边距合并为一个,导致开关按钮的margin-top:4px失效,直接贴在滑块顶部。 - 点击按钮后,JS给开关按钮设置了
float:left/right,浮动元素不会参与外边距合并,margin-top:4px重新生效,按钮回到正确位置。
修复方案(任选其一)
方案1:阻止滑块容器的外边距合并
给.slider类添加overflow:hidden,打破外边距合并的条件:
.slider { height: 100px; width: 200px; border-radius: 50px; background-color: #f2f2f2; margin: 0 auto; border: none; box-shadow: inset 0 0 7px #000; overflow: hidden; /* 添加此行 */ }
方案2:给滑块容器添加边框/内边距
给.slider添加透明边框或顶部内边距,同样能阻止外边距合并:
.slider { height: 100px; width: 200px; border-radius: 50px; background-color: #f2f2f2; margin: 0 auto; border-top: 1px solid transparent; /* 添加透明上边框 */ box-shadow: inset 0 0 7px #000; }
方案3:给开关按钮设置初始浮动
直接在.slideBtn的CSS里添加初始浮动,避免它以块级元素状态触发合并:
.slideBtn { border: 1px solid transparent; height: 90px; margin-top: 4px; margin-left: 5px; margin-right: 5px; width: 90px; border-radius: 50px; background-color: silver; box-shadow: 0 0 5px #000; float: left; /* 添加初始浮动 */ }
内容的提问来源于stack exchange,提问作者mjlynch
相关产品推荐
相关产品推荐

