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

如何无需媒体查询让<pre>标签中的ASCII艺术实现响应式?

无需媒体查询实现ASCII艺术页眉的响应式缩放

核心方案

要在CSS Grid容器中让ASCII艺术自适应缩放且不破坏布局,关键在于固定等宽字体+动态字体大小控制,无需依赖媒体查询。具体思路:

  • 强制使用等宽字体(ASCII艺术的布局完全依赖字符宽度一致)
  • 用min()或clamp()函数动态设置字体大小,结合视口单位(vw)和固定单位(rem),实现自动适配

修改后的代码

CSS

body {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: auto auto 5rem; /* 把固定行高改成auto,让header随内容自适应 */
  grid-template-areas: "header header" "main sidebar" "footer footer";
  min-height: 100vh;
}

header {
  grid-area: header;
  display: grid;
  place-items: center; /* 让ASCII内容居中 */
  padding: 0.5rem 0; /* 可选:添加内边距避免贴边 */
}

header pre {
  font-family: monospace; /* 必须:等宽字体保证ASCII布局不混乱 */
  font-size: clamp(0.5rem, 0.7vw, 1rem); /* 动态字号:最小0.5rem,最大1rem,中间随视口宽度缩放 */
  white-space: pre; /* 保留原始空格/换行,禁止自动换行 */
  margin: 0; /* 清除pre默认外边距 */
}

HTML(无需修改)

<header>
  <pre>
 ___       __    ________   ___    _________   ________   _____ ______    ________   _______    ________      
|\  \     |\  \ |\   __  \ |\  \  |\___   ___\|\   __  \ |\   _ \  _   \ |\   ____\ |\  ___ \  |\   ___  \    
\ \  \    \ \  \\ \  \|\  \\ \  \ \|___ \  \_|\ \  \|\  \\ \  \\\__\ \  \\ \  \___|_\ \   __/| \ \  \\ \  \   
 \ \  \  __\ \  \\ \   __  \\ \  \     \ \  \  \ \  \\ \  \\ \  \\|__| \  \\ \_____  \\ \  \_|/__\ \  \\ \  \  
  \ \  \|\__\_\  \\ \  \ \  \\ \  \____ \ \  \  \ \  \\ \  \\ \  \    \ \  \\|____|\  \\ \  \_|\ \\ \  \\ \  \ 
   \ \____________\\ \__\ \__\\ \_______\\ \__\  \ \_______\\ \__\    \ \__\ \_\  \\ \_______\\ \__\\ \__\
    \|____________| \|__|\|__| \|_______| \|__|   \|_______| \|__|     \|__||\_________\\|_______| \|__| \|__|
                                                                            \|_________|                              
  </pre>
</header>

关键说明

  1. 等宽字体:font-family: monospace是核心,避免非等宽字体导致字符错位,彻底解决布局破坏问题。
  2. 动态字号:clamp(0.5rem, 0.7vw, 1rem)实现三重控制:
    • 最小字号0.5rem:保证小屏幕下内容仍可读
    • 动态值0.7vw:随视口宽度自动缩放
    • 最大字号1rem:避免大屏幕下内容过大
  3. Grid容器适配:把header的固定行高7.25rem改成auto,让Grid行高随ASCII内容自动调整,无需手动修改行高。

为什么之前的尝试无效?

  • 未强制等宽字体:非等宽字体的字符宽度不一致,即使缩放也会破坏ASCII布局
  • white-space: pre-wrap/pre-line会强制换行,直接打乱ASCII的固定排版,必须保留white-space: pre(<pre>标签默认值,可显式声明)
  • 仅用百分比/固定值设置字号:无法随视口宽度动态调整,必须结合视口单位(vw)实现自适应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:53:17