不使用 JS 纯 CSS 获取屏幕宽高

在现代前端开发中,获取屏幕的宽度和高度通常依赖于 JavaScript。然而现代 CSS 也可以获取到屏幕的宽高,通过自定义属性(CSS Variables)和一些数学函数来实现这一目标。本文将详细解析如何使用 CSS 的 @property 规则和一些数学运算来获取屏幕的宽高,严格的说是获取视口的宽度和高度

使用CSS获取屏幕宽高仅是一种实现方式,部分属性和数学函数有一定的兼容性问题,所以线上环境使用需谨慎。首先来了解一些前置知识点:

1. CSS 自定义属性

CSS 自定义属性(也称为 CSS 变量)允许开发者在 CSS 中定义可重用的值。通过使用 var() 函数,可以在样式表的任何地方引用这些变量。自定义属性的定义通常在 :root 选择器中进行,以便在整个文档中使用。

:root {
    --shadow-hue: 180deg;
    --spring-duration: 1.33s;
    --canvas: 220;
    --bg: hsl(var(--canvas), 15%, 22%);
    --wgt: 200;
}

2. @property 规则

@property 规则是 CSS 的一项新特性,允许开发者定义自定义属性的语法、继承性和初始值。通过 @property,我们可以指定一个属性的类型和默认值。

在我们的示例中,我们定义了两个自定义属性 --_w--_h,分别表示屏幕的宽度和高度:

@property --_w {
  syntax: '<length>';
  inherits: true;
  initial-value: 100vw; 
}

@property --_h {
  syntax: '<length>';
  inherits: true;
  initial-value: 100vh; 
}
  • syntax: '<length>' 指定了属性的类型为长度。
  • inherits: true 表示该属性可以继承。
  • initial-value 设置了属性的初始值,分别为 100vw 和 100vh,即视口的宽度和高度。

3. 数学运算函数

  • atan2(y, x) 函数返回从 x 轴到点 (x, y) 的角度(以弧度为单位)。
  • tan() 函数则计算给定角度的正切值。

4. 计算屏幕宽高

:root 选择器中,我们使用 tan()atan2() 函数来计算屏幕的宽度和高度,在这里我们将 var(--_w) 和 1px 作为参数传递,计算出宽度的角度。通过这种方式,我们可以将宽度和高度转换为无单位的整数值。

:root {
  --w: tan(atan2(var(--_w), 1px));
  --h: tan(atan2(var(--_h), 1px));
}

5. 使用 counter 显示宽高

body:before 伪元素中,我们使用 counter 来显示计算出的宽度和高度:

body:before {
  content: counter(w) "x" counter(h);
  counter-reset: h var(--h) w var(--w);
  font-size: 50px;
  font-family: system-ui, sans-serif;
  font-weight: 900;
  position: fixed;
  inset: 0;
  width: fit-content;
  height: fit-content;
  margin: auto;
}
  • counter-reset 用于初始化计数器 h 和 w,并将其值设置为 var(--h) var(--w)
  • content: counter(w) "x" counter(h); 用于显示宽度和高度,格式为 宽度 x 高度。
  • 通过设置 position: fixedinset: 0,我们将内容居中显示在屏幕上。

6. 效果展示

当页面加载时,浏览器会根据视口的实际宽度和高度计算出 --w--h 的值,并在页面上显示出来。整个过程完全不依赖于 JavaScript。

7. 总结

通过使用 CSS 的 @property 规则和数学函数,我们可以在不使用 JavaScript 的情况下获取屏幕的宽度和高度。随着 CSS 规范的不断发展,未来可能会有更多类似的功能,使得前端开发更加灵活和高效。

虽然CSS提供了强大的功能,但在不使用JavaScript的情况下获取屏幕尺寸仍然存在限制,如浏览器兼容问题。CSS自定义属性和计数器可以用于创造性的解决方案,但在某些情况下,JavaScript仍然是必要的。开发者应该根据项目的具体需求和环境来选择最合适的方法。


看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~

专注前端开发,分享前端相关技术干货,公众号:南城大前端(ID: nanchengfe)

CSS中,我们无法直接通过CSS代码来获取屏幕分辨率。CSS是用于对网页元素进行样式设置的一种标记语言,主要用于控制网页的布局和外观。获取屏幕分辨率通常需要使用JavaScript来实现。 JavaScript是一种脚本语言,可以嵌入到HTML文档中,在网页加载时执行。通过使用JavaScript,我们可以获取并操作网页的各种属性和信息,包括屏幕分辨率。 要获取屏幕分辨率,我们可以使用JavaScript中的`window.screen`对象。`window.screen`对象包含了一些用于获取和操作屏幕相关信息的属性,其中`window.screen.width`表示屏幕宽度,`window.screen.height`表示屏幕的高度。 下面是一个简单的JavaScript代码示例,用于获取屏幕分辨率并在网页中显示出来: ```javascript <script> var screenWidth = window.screen.width; var screenHeight = window.screen.height; document.write("屏幕分辨率为:" + screenWidth + "x" + screenHeight); </script> ``` 在上面的代码中,我们首先通过`window.screen.width`和`window.screen.height`获取屏幕宽度和高度,然后使用`document.write()`将获取到的屏幕分辨率显示在网页中。 需要注意的是,要在HTML文档中使用JavaScript代码,需要将代码放置在`<script>`标签中,以便在网页加载时被执行。 通过这样的方式,我们可以在网页中获取屏幕分辨率并进行相应的布局和样式设置,以适应不同屏幕尺寸的设备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南城FE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值