设备占比图应优先用CSS柱状图渲染,结合window.innerWidth与screen.orientation判断设备类型,数据从JSON文件加载并显示整数百分比,移动端需动态调整高度与标签布局。
怎么用 HTML + 简单 JS 渲染设备占比图
直接上手:不需要任何图表库,用
或纯 CSS 柱状图就能画出手机/电脑访问占比。关键不是“怎么画图”,而是“怎么拿到设备类型”——浏览器没提供现成的
,得靠
字符串或响应式断点间接判断。
实操建议:
立即学习
“
前端免费学习笔记(深入)
”;
别信
里带 “Mobile” 就一定是手机:iPad、Windows 平板、某些安卓桌面浏览器(如 Kiwi)会混在其中,
检测容易误判
更靠谱的方式是结合
和常见断点(比如 ≤768px 算移动设备),但要注意横屏手机可能宽过 768px,需加
辅助判断
如果数据来自服务端(如 Nginx 日志或 Google Analytics),优先用服务端识别结果,前端只负责渲染,避免双重判断失真
HTML 里怎么安全显示统计数字不被篡改
作品集是静态页面,所有统计数如果硬编码在 HTML 里,用户 F12 就能改。真要防篡改,就得把数据和逻辑分离。
实操建议:
立即学习
“
前端免费学习笔记(深入)
”;
把设备比例存在 JSON 文件里(如
),用
加载,至少让修改需要额外发起请求
如果用 GitHub Pages 这类静态托管,可配合 GitHub Actions 自动更新 JSON:每次部署时跑脚本解析访问日志,生成新比例写入
不要把原始访问数(如 “手机 1247 次”)直接暴露,显示 “手机占 68%” 即可;百分比四舍五入到整数,既降低敏感度,也避免小数点后数字引发“怎么算的”质疑
为什么用 CSS 柱状图比 Canvas 更适合作品集
Canvas 能画得更精细,但对作品集这种轻量展示场景,反而增加维护成本和兼容风险。
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
实操建议:
立即学习
“
前端免费学习笔记(深入)
”;
CSS 柱状图只需几个
navigator.deviceTypeUser-AgentUser-AgentUser-Agentwindow.innerWidthscreen.orientation/stats/device-ratio.jsonfetch()device-ratio.json
+
width
+
background
,加载快、无障碍友好(可加
aria-label
)、打印也正常
Canvas 需手动处理 DPR(高分屏模糊)、字体渲染、响应式重绘,一个
window.resize
事件漏了,图表就错位
示例结构:
移动端适配柱状图时最常漏掉的一件事
很多人写了
@media (max-width: 768px)
把柱状图改成竖排,却忘了 bar 的
height
在竖排下要动态计算——固定写死
height: 20px
在 iPhone 上会挤成一条线,看不见文字。
实操建议:
立即学习
“
前端免费学习笔记(深入)
”;
竖排时用
flex-direction: column
+
min-height: 40px
,再配合
justify-content: center
居中文字
百分比数字别放 bar 内部(易被截断),统一放在 bar 下方用
,并设
white-space: nowrap
测试时真机横屏+竖屏切换一次,看 bar 是否重绘、文字是否换行、有没有滚动条意外出现
设备类型判断本身没有银弹,服务端识别 + 前端渲染分离才是稳定做法;而图再好看,数据源头不准,整个统计就只是装饰。
相关文章
- 实现局部遮罩与关闭原理及代码_javascript技巧
- 如何通过 navigator.language 自动识别用户首选语言并静默挂载对应的国际化 I18n 翻译包
- 使用ul和li实现的带有边框的方格效果代码_html/css_WEB-ITnose
- index.html页面如何添加友情链接模块?
- 如何使用 Selenium 稳健提取动态聊天框中的 AI 响应内容
- 如何通过 URL 锚点控制页面内容的条件显示
- Javascript前端UI框架Kit使用指南之kitjs的对话框组件_javascript技巧
- JavaScript中如何实现拖放上传?
- MongoDB怎么设计数据模型_MongoDB数据建模与JS全栈开发最佳实践
- Vue授权登录实现方法
