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

Safari中CSS变量与Grid布局适配问题求助

Safari浏览器中CSS Grid布局尺寸计算异常,网格行重叠问题

问题现象

我开发了一款基于HTML和CSS的应用,某页面使用CSS媒体查询与display:grid布局,该布局在除Safari外的所有浏览器中尺寸显示正常,但在Safari中尺寸计算异常,网格行出现重叠。

我定义了名为--vh的CSS变量,值为window.innerHeight的1%,用于抵消浏览器工具栏影响,常规场景下正常工作,但在Safari的媒体查询中失效。尝试过使用SVH和DVH,问题仍然存在。

实际测试场景:在电脑或其他设备创建游戏,用Safari设备加入,第一个问题页面会停止加载并卡住,Edge或Chrome中渲染正常。

渲染效果对比

渲染效果对比

相关代码

HTML

<html lang="en">
    <head>
        <meta charset="utf-8">
        <link rel="icon" href="https://trivia.house/favicon.ico">
        <meta name="viewport" content="width=device-width,initial-scale=1">
        <meta name="theme-color" content="#000000">
        <meta name="description" content="Free Multiplayer Online Trivia Quiz Games">
        <link rel="manifest" href="/manifest.json">
        <title>Carousel Quiz | Free Multiplayer Online Games | Trivia House</title>
        <script defer="defer" src="/static/js/main.d9851aae.js"></script>
        <link href="/static/css/main.69f4b861.css" rel="stylesheet">
    </head>

    <body>
    
        <noscript>You need to enable JavaScript to run this app.</noscript>

        <div id="root">
            <div class="App">
                <div class="AppResolution">
                    <p id="ResolutionIssueMessage">THIS APPLICATION CAN ONLY BE RUN ON A PORTRAIT-ORIENTATED DEVICE, PLEASE EXPAND THE BROWSER WINDOW TO A SUPPORTED SIZE.</p>
                </div>
                
                <div class="AppContent">
                    
                    <div id="questionWrapper">
                        <div id="questionContainer">
                            <div className="questionBox title">
                                <div className="vText">
                                    <img id="titleQuestion" src='' />
                                </div>
                            </div>

                            <div id="roundInfo" className="questionBox roundInfo"><div className='vText'>Question 1</div></div>
                            <div id="gameCode" className="questionBox gameCode"></div>       
                            <div id="question" className="questionBox question"><div className='vText'>question</div></div>
                            <div id="scores" className="questionBox scores">Scores</div>
                            <div id="answer1" className="questionBox answer1"><div className='vText'>answer1</div></div>
                            <div id="answer2" className="questionBox answer2"><div className='vText'>answer2</div></div>
                            <div id="answer3" className="questionBox answer3"><div className='vText'>answer3</div></div>
                            <div id="answer4" className="questionBox answer4"><div className='vText'>answer4</div></div>
                            <div id="timer" className="questionBox timer"></div>
                        </div>
                    </div>       
                </div>

            </div>
        </div>
    </body>
</html>

CSS(核心代码)

以下是与问题相关的核心CSS代码(因是React应用,CSS已打包,如需完整代码可告知):

#questionWrapper{
  
  width: 100%;
  height: calc((var(--containerheight)) * 100px); 
  margin: 0 auto;
  border: black 1px solid;

}

#questionContainer{
  
  display:grid;
  grid-gap: 5px;
  grid-template-columns: calc(35% - 5px) calc(35% - 5px) calc(30%);
  grid-template-rows: 0.8fr 0.8fr 1.8fr 1fr 1fr 1fr;
  height: calc((var(--containerheight)) * 100px);
}

.questionBox {
  
  background-color: rgba(224, 38, 63, 0.6);
  color: #fff;
  border-radius: 15px;
  padding: 20px;
  font-size: calc(1vh + 1vw);
  font-weight: 800;
  text-align: center;
}

#titleQuestion{
  width: 100%;
  animation: bounce-in-right 2s ease;
  max-width: 600px;
}

.title {
  display: table;
  overflow: clip;
  background-color: rgba(224, 38, 63, 0);
  text-align: center;
  grid-column: 1/3;
  grid-row: 1/3;
  padding-top: 50px;
}
.roundInfo {

  display: table;
  grid-column: 3/4;
  grid-row: 1/2;
  font-size: calc(1.25vh + 1.25vw);
}

.gameCode {
  text-align: center;
  grid-column: 3/4;
  grid-row: 2/3;
  background-color: rgba(224, 38, 63, 0);
  
}
.question {
  display: table;
  background-color: rgba(224, 38, 63, 0);
  font-size: calc(1.4vh + 1.4vw);
  color: rgba(224, 38, 63, 1);
  grid-column: 1/3;
  grid-row: 3/4 ;
}
.scores {
  grid-column: 3/4;
  grid-row: 3/7;
}
.answer1 {
  display: table;
  grid-column: 1/2;
  grid-row: 4/5;
}
.answer2 {
  display: table;
  grid-column: 2/3;
  grid-row: 4/5;
}
.answer3 {
  display: table;
  grid-column: 1/2;
  grid-row: 5/6;
}
.answer4 {
  display: table;
  grid-column: 2/3;
  grid-row: 5/6;
}
.timer {
  grid-column: 1/3;
  grid-row: 6/7;
}



.vText{
  display: table-cell;
  vertical-align:middle;

}


/***************************************************************/
@media (max-width: 1000px){


  #questionContainer{
  
    display:grid;
    grid-gap: calc((var(--containerheight))*0.5px);
    grid-template-columns: 100%;
    grid-template-rows: 0px calc((var(--containerheight))*10px) calc((var(--containerheight))*26px) repeat(5,calc((var(--containerheight))*12px));
    height: 100%;
    width: 100%;
  }
  
  .questionBox {
    background-color: rgba(224, 38, 63, 0.6);
    color: #fff;
    border-radius: 15px;
    font-size: calc(1.2vh + 1.2vw);
    font-weight: 800;
    text-align: center;   
  }

  .roundInfo {
    display: table;
    grid-column: 1/2;
    grid-row: 2/3;
  }

  .question {
    display: table;
    background-color: rgba(224, 38, 63, 0);
    font-size: calc(1.2vh + 1.2vw);
    color: rgba(224, 38, 63, 1);;
    grid-column: 1/2;
    grid-row: 3/4;
  }

  .answer1 {
    display: table;
    grid-column: 1/2;
    grid-row: 4/5;
     
  }
  .answer2 {
    display: table;
    grid-column: 1/2;
    grid-row: 5/6;
  }
  .answer3 {
    display: table;
    grid-column: 1/2;
    grid-row: 6/7;
  }
  .answer4 {
    display: table;
    grid-column: 1/2;
    grid-row: 7/8;
  }
  .timer {
    display: table;
    grid-column: 1/2;
    grid-row: 8/9;
  }

 

#GameCodeWidget{
  display: none;
}

#gameCode{
  display: none;
}
 
.title{
  display: none;
}

.scores{
  display: none;
}

}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 16:37:02