You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现着陆页三垂直分栏?布局与过渡问题排查

三垂直区块着陆页布局与过渡异常问题排查及修复

嘿,我来帮你解决这两个头疼的问题:中间区块没居中,还有过渡效果重叠的异常。咱们一步步拆解问题并修正:

问题1:中间区块未处于页面中心

错误原因

.split.middle没有设置正确的绝对定位位置,你添加的display: inline-block对绝对定位元素无效——因为绝对定位元素脱离了文档流,这个属性起不到居中作用。而左右两个区块分别用left: 0和right: 0固定了位置,中间区块需要手动设置left: 33.33%来占据三分之一的中间位置。

修复代码(修改CSS)

.split.middle {
  left: 33.33%; /* 新增:固定中间区块的左侧定位 */
  background: url('https://image.ibb.co/m56Czw/designer.jpg') center center no-repeat;
  background-size: cover;
}

删除原来的display: inline-block,这个属性对绝对定位元素完全多余。

问题2:过渡效果重叠

错误原因

  1. 选择器语法错误:比如.hover-right .middle:before .left:before是错误的嵌套选择器,应该用逗号分隔两个独立的伪元素选择器;
  2. z-index设置逻辑错误:部分hover状态下,没有将当前hover区块的伪元素设为最高层级,导致其他区块的伪元素覆盖上来;
  3. hover状态的z-index目标错误:比如.hover-left里错误地给中间区块的伪元素设置z-index,应该给当前hover的左侧区块伪元素设置最高层级。

修复代码(修改CSS)

  1. 修正.hover-left的z-index目标:
.hover-left .left:before {
  z-index: 2; /* 改为给左侧hover区块的伪元素设置最高层级 */
}

替换原来的.hover-left .middle:before { z-index: 2; }

  1. 修正.hover-middle的z-index目标:
.hover-middle .middle:before {
  z-index: 2; /* 改为给中间hover区块的伪元素设置最高层级 */
}

替换原来的.hover-middle .right:before { z-index: 2; }

  1. 修正.hover-right的选择器语法:
.hover-right .middle:before, .hover-right .left:before {
  z-index: 2; /* 用逗号分隔两个独立选择器,同时设置中间和左侧伪元素的层级 */
}

替换原来的.hover-right .middle:before .left:before { z-index: 2; }

完整修复后的CSS代码

:root {
  --container-bg-color: #333;
  --left-bg-color: rgba(223, 39, 39, 0.7);
  --left-button-hover-color: rgba(161, 11, 11, 0.3);
  --middle-bg-color: rgba(39, 217, 223, 0.7);
  --middle-button-hover-color: rgba(14, 32, 196, 0.151);
  --right-bg-color: rgba(43, 43, 43, 0.8);
  --right-button-hover-color: rgba(92, 92, 92, 0.3);
  --hover-width: 70%;
  --other-width: 15%;
  --speed: 1000ms;
}
html, body {
  padding: 0;
  margin: 0;
  font-family: 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;
  width: 100%;
  height: 100%;
  overflow-x: hidden;
}
h1 {
  font-size: 3rem;
  color: #fff;
  position: absolute;
  left: 50%;
  top: 20%;
  transform: translateX(-50%);
  white-space: nowrap;
}
.button {
  display: block;
  position: absolute;
  left: 50%;
  top: 40%;
  height: 2.5rem;
  padding-top: 1.3rem;
  width: 15rem;
  text-align: center;
  color: #fff;
  border: #fff solid 0.2rem;
  font-size: 1rem;
  font-weight: bold;
  text-transform: uppercase;
  text-decoration: none;
  transform: translateX(-50%);
}
.split.left .button:hover {
  background-color: var(--left-button-hover-color);
  border-color: var(--left-button-hover-color);
}
.split.middle .button:hover {
  background-color: var(--middle-button-hover-color);
  border-color: var(--middle-button-hover-color);
}
.split.right .button:hover {
  background-color: var(--right-button-hover-color);
  border-color: var(--right-button-hover-color);
}
.container {
  position: relative;
  width: 100%;
  height: 100%;
  background: var(--container-bg-color);
}
.split {
  position: absolute;
  width: 33.33%;
  height: 100%;
  overflow: hidden;
}
.split.left {
  left: 0;
  background: url('https://image.ibb.co/m56Czw/designer.jpg') center center no-repeat;
  background-size: cover;
}
.split.left:before {
  position: absolute;
  content: "";
  width: 100%;
  height: 100%;
  background: var(--left-bg-color);
}
.split.middle {
  left: 33.33%;
  background: url('https://image.ibb.co/m56Czw/designer.jpg') center center no-repeat;
  background-size: cover;
}
.split.middle:before {
  position: absolute;
  content: "";
  width: 100%;
  height: 100%;
  background: var(--middle-bg-color);
}
.split.right {
  right: 0;
  background: url('https://image.ibb.co/m3ZbRb/programmer.png') center center no-repeat;
  background-size: cover;
}
.split.right:before {
  position: absolute;
  content: "";
  width: 100%;
  height: 100%;
  background: var(--right-bg-color);
}
.split.left, .split.middle, .split.right, .split.right:before, .split.left:before, .split.middle:before {
  transition: var(--speed) all ease-in-out;
}
.hover-left .left {
  width: var(--hover-width);
}
.hover-left .middle {
  width: var(--other-width);
}
.hover-left .right {
  width: var(--other-width);
}
.hover-left .left:before {
  z-index: 2;
}
.hover-middle .middle {
  width: var(--hover-width);
}
.hover-middle .left {
  width: var(--other-width);
}
.hover-middle .right {
  width: var(--other-width);
}
.hover-middle .middle:before {
  z-index: 2;
}
.hover-right .right {
  width: var(--hover-width);
}
.hover-right .middle {
  width: var(--other-width);
}
.hover-right .left {
  width: var(--other-width);
}
.hover-right .middle:before, .hover-right .left:before {
  z-index: 2;
}
@media(max-width: 800px) {
  h1 {
    font-size: 2rem;
  }
  .button {
    width: 12rem;
  }
}
@media(max-height: 700px) {
  .button {
    top: 70%;
  }
}

效果验证

修改后,三个区块会默认垂直平分页面宽度,鼠标hover任意区块时:

  • 当前区块平滑扩展到70%宽度
  • 另外两个区块收缩到15%宽度
  • 过渡过程中不会出现重叠覆盖的问题

内容的提问来源于stack exchange,提问作者Ashish Dhase

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:22:13