小屏幕下如何将时间线中线移至左侧?Grid布局适配求助
响应式时间线布局修复
问题
需要实现一个响应式时间线:
- 大屏(≥689px):内容分布在时间线中线两侧
- 小屏(<689px):所有内容在中线右侧,中线固定在左侧
目前大屏显示正常,但小屏状态下中线完全消失,不符合预期。
预期效果
大屏
Hello World | | 3 2 | | 4
小屏
| Hello World | 3 | 2 | 4
现有代码
CSS
@import url('https://fonts.googleapis.com/css2?family=Jost:wght@200;300;400&display=swap'); .timeline { width: 80%; max-width: 800px; display: flex; flex-direction: column; align-items: center; justify-content: center; } .timeline-content { overflow-wrap: break-word !important; margin-bottom: 10%; } .timeline-component { margin-top: 10%; margin-left: 10%; margin-right: 10%; } @media screen and (min-width: 689px) { .timeline { display: grid; grid-template-columns: 1fr 3px 1fr; } .timeline-middle { position: relative; background-image: linear-gradient(45deg, #F27121, #E94057, #8A2387); width: 3px; height: 100%; } .main-middle { opacity: 0; } .timeline-circle { position: relative; top: 0; left: 50%; width: 15px; height: 15px; border-radius: 50%; background-image: linear-gradient(45deg, #F27121, #E94057, #8A2387); -webkit-transform: translateX(-50%); transform: translateX(-50%); } }
HTML
<div class="timeline"> <div class="timeline-empty"> </div> <div class="timeline-middle"> <div class="timeline-circle"></div> </div> <div class="timeline-component timeline-content"> <p>Time line 1</p> </div> <div class="timeline-component timeline-content"> <p>Time line 2</p> </div> <div class="timeline-middle"> <div class="timeline-circle"></div> </div> <div class="timeline-empty"> </div> <div class="timeline-empty"> </div> <div class="timeline-middle"> <div class="timeline-circle"></div> </div> <div class=" timeline-component timeline-content"> <p>Time line 3</p> </div> </div>
问题原因
中线的核心样式(背景、宽度、高度)仅定义在大屏媒体查询内,小屏时.timeline-middle没有任何可见样式,导致中线消失;同时小屏布局用flex居中,无法实现“左侧固定中线+右侧内容”的结构。
修复方案
修改后的CSS
@import url('https://fonts.googleapis.com/css2?family=Jost:wght@200;300;400&display=swap'); .timeline { width: 80%; max-width: 800px; /* 小屏用grid布局,固定中线宽度,右侧内容占满剩余空间 */ display: grid; grid-template-columns: 3px 1fr; gap: 20px; margin: 0 auto; } .timeline-content { overflow-wrap: break-word !important; margin-bottom: 10%; } .timeline-component { margin-top: 10%; } /* 基础中线样式,确保小屏也能显示 */ .timeline-middle { position: relative; background-image: linear-gradient(45deg, #F27121, #E94057, #8A2387); width: 3px; height: 100%; } .timeline-circle { position: absolute; top: 0; left: 50%; width: 15px; height: 15px; border-radius: 50%; background-image: linear-gradient(45deg, #F27121, #E94057, #8A2387); transform: translateX(-50%); } /* 大屏布局覆盖 */ @media screen and (min-width: 689px) { .timeline { grid-template-columns: 1fr 3px 1fr; } }
优化后的HTML
<div class="timeline"> <!-- 内容1:右侧 --> <div class="timeline-middle"> <div class="timeline-circle"></div> </div> <div class="timeline-component timeline-content"> <p>Time line 1</p> </div> <!-- 内容2:左侧 --> <div class="timeline-component timeline-content"> <p>Time line 2</p> </div> <div class="timeline-middle"> <div class="timeline-circle"></div> </div> <!-- 内容3:右侧 --> <div class="timeline-middle"> <div class="timeline-circle"></div> </div> <div class="timeline-component timeline-content"> <p>Time line 3</p> </div> </div>
关键调整点
- 将中线样式从媒体查询中移出,作为基础样式,保证小屏时中线可见
- 小屏用
grid-template-columns: 3px 1fr实现左侧固定中线、右侧内容自适应的布局 - 大屏通过媒体查询替换为
1fr 3px 1fr的三栏布局,保持内容分两侧显示 - 调整时间点圆圈为绝对定位,确保在中线居中,适配两种布局
- 移除多余的空div,简化HTML结构
内容的提问来源于stack exchange,提问作者zxcisnoias
相关产品推荐
相关产品推荐

