美文网首页
CSS Grid Game

CSS Grid Game

作者: JunChow520 | 来源:发表于2020-05-21 22:59 被阅读0次

    网格布局可使用智能回流元素(Intelligently Reflow Elements),比如典型游戏界面五大区块:标题、统计、主面板、得分、控制区。

    区域 描述
    title 标题区,标题区和主面板对齐。
    stats 统计区,统计区显示在标题区之下。
    score 得分区,得分区和统计区在列方向对齐。
    board 主面板区,主面板在统计区和标题区右侧。
    ctrls 控制区,控制区集中放置在主面板下方。

    当游戏页面达到最低高度时,主面板底部和统计区底部对齐,否则主面板将扩展到屏幕可用空间。

    横屏布局

    横屏时界面被划分为2列3行的网格

    横屏时列宽设置

    grid-template-columns:auto minmax(min-content, 1fr);
    
    列号 列宽 描述
    第1列 auto 根据内容自动控制列宽
    第2列 minmax(min-content, 1fr) 使用剩余空间,列宽不小于主面板区和控制区的最小宽度。

    横屏时行高设置

     grid-template-rows:auto minmax(min-content, 1fr) auto;
    
    行号 行宽 描述
    第1行 auto 根据内容自动控制列宽
    第2行 minmax(min-content, 1fr) 使用剩余空间,列宽不小于主面板区和控制区的最小行高。
    第3行 auto 根据内容自动控制列宽

    横屏时的区块分布

    使用grid-template-areas定义区域,取值中每个字符串表示一行,字符串中每个单词用于定义区域名称,字符串中单词的数量则用于确定列的数量,每个字符串中单词数量必须相同。

    grid-template-areas:
      "title board" 
      "stats board" 
      "score ctls";
    
    横屏

    竖屏布局

    竖屏时的区块分布

    grid-template-areas:
      "title stats" 
      "score stats" 
      "board board" 
      "ctrls ctrls";
    
    竖屏

    完整代码

    <div class="flex">
      <div class="layout">
        <div class="title flex box">title</div>
        <div class="score flex box">score</div>
        <div class="stats flex box">stats</div>
        <div class="board flex box">board</div>
        <div class="control flex box">control</div>
      </div>
    </div>
    
    • 通过网格布局和媒体查询结合,无需修改文档结构即可实现重新排列布局的顺序。
    • 游戏界面中每个区块采用网格线来定义,若占用多行或多列则采取跨行或跨列的方式来实现。
    *, *:before, *:after{box-sizing:border-box; margin:0; padding:0;}
    .flex{display:flex; justify-content:center; align-items:center;}
    .box{border:1px dashed #ddd; padding:.5em;}
    .area{background-color:rgba(255, 0, 0, .5); padding:1em; border-radius:.5em; color:#fff; text-align:center; height:100%;}
    
    .layout{background-color:#f9f9f9; margin:1em;}
    .title{grid-area:title;}
    .stats{grid-area:stats;}
    .score{grid-area:score;}
    .board{grid-area:board; height:50vh;}
    .ctrls{grid-area:ctrls;}
    
    @media (orientation:landscape){
      .layout{
        display:grid;
        grid-template-columns:auto minmax(min-content, 1fr);
        grid-template-rows:auto minmax(min-content, 1fr) auto;
        grid-template-areas:"title board" "stats board" "score ctls";
      }
    .title{gird-column:1; grid-row:1;}
    .stats{grid-column:1; grid-row:2;}
    .score{grid-column:1; grid-row:3;}
    .board{grid-column:2; grid-row:1 / span 2;}
    .ctrls{grid-column:2; grid-row:3 / span 2;}
    }
    
    @media (orientation:portrait){
      .layout{
        display:grid;
        grid-template-columns: auto minmax(min-content, 1fr);
        grid-template-rows: auto auto minmax(min-content, 1fr) auto;
        grid-template-areas:"title stats" "score stats" "board board" "ctrls ctrls";
      }
    }
    

    相关文章

      网友评论

          本文标题:CSS Grid Game

          本文链接:https://www.haomeiwen.com/subject/nhdaohtx.html