html - 根据容器的宽度和高度缩放字体大小
问题描述
所以我正在尝试为我的 HTML 文档设计一个更具响应性的设计,我想要排序的第一件事是根据容器的高度和宽度缩放字体大小。现在我有以下内容:
我进行了一些研究,并在 css 中找到了单位“vw”,它允许字体根据容器进行缩放,但我只是注意到它仅在我调整浏览器宽度时才有效,如下所示:
如图所示,如果我明智地调整浏览器宽度,文本确实会缩放,但是,我意识到当我调整浏览器的高度时,它根本不会缩放。
如何确保文本根据容器的宽度和高度进行缩放?
html,body {
height: 100%;
}
.outer {
height: 50%;
border: 1px solid black;
width: 50%;
}
#cat1 {
height: 50%;
border: 1px solid black;
font-size: 3vw;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
}
#cat2 {
height: 50%;
border: 1px solid black;
font-size: 3vw;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href = "style.css">
<title>Document</title>
</head>
<body>
<div class = "outer">
<div id = "cat1">
This is text1
</div>
<div id = "cat2">
This is text2
</div>
</div>
</body>
</html>
解决方案
虽然font-size
CSS 属性可以采用无单位的数字、百分比或相对单位的长度,但所有这些都是相对于父元素的font-size
. 即使您使用 CSScalc
函数,任何度量都将被理解为父元素的比率,而font-size
不是元素的宽度或高度。
唯一的例外是rem
和ren
单位,它们是相对于<html>
元素的font-size
,vw
和vh
单位,它们分别是视口宽度和高度的百分比。也就是说,100vh
是窗口的高度,是窗口100vw
的宽度。Red Blob Games 有一篇关于使用单位进行响应式字体大小调整的有趣文章,我建议您阅读一下。vw
您可以使用CSS 转换来缩放元素的渲染大小,但这会使文本显得模糊或拉伸,这绝对不是您在尝试使网站具有响应性和可访问性时想要的。
长话短说,没有 CSS-only 方法来设置相对于元素大小的字体大小。如果你真的想这样做,你将不得不使用 JavaScript 来计算元素的像素大小,然后将一个px
值传递给font-size
CSS 属性。
但到那时,您将积极反对 Web 的工作方式:元素拉伸以适应其内容,而不是相反。
推荐阅读
- java - 有没有办法从已删除的记录中获取密钥?
- c++ - 使用 Boost::Asio 存储来自套接字的整个 UDP 帧
- reactjs - 我如何用类组件实现这样的逻辑
- android - BillingClient.launchBillingFlow() 可以返回哪些结果代码?
- powershell - Import-CSV 返回变量的空白值?
- postgresql - 隧道堡垒客户端服务无法启动
- angular - 如何使用自定义颜色导出到 Excel / 如何在 DataTable 上使用 ngStyle
- javascript - Discord 斜杠命令“交互失败”V13
- javascript - 每次点击都会重新加载模态文本区域
- bash - 将多个表达式作为变量传递给 sed 命令,然后输出到新文件