全部分类
大芳姑娘_9325
2026-06-11
866人浏览
原创
本文介绍一种结合 CSS 与 JavaScript 的方案,使嵌入 中的多个 元素既能按原始比例自动撑开表格宽度,又能在容器空间不足时等比缩放以适配屏幕,同时兼容表格内其他内容。
本文介绍一种结合 css 与 javascript 的方案,使嵌入 `
在 HTML 表格中嵌入 SVG 并实现智能尺寸适配,单纯依赖 CSS 是有限的——因为 的 viewBox 定义了坐标系统,但其渲染尺寸仍受外部布局上下文影响;而 的默认行为(如 table-layout: auto)会使单元格宽度由内容决定,难以精确控制 SVG 的缩放比例。因此,需采用 CSS 基础约束 + JavaScript 动态计算 的协同策略。✅ 核心思路 CSS 层:确保 SVG 可响应式缩放,避免硬编码宽高破坏比例; JS 层:动态获取 SVG 原始逻辑宽度(基于 viewBox),结合当前表格可用宽度,按比例分配每个 SVG 的 width 属性,从而实现「总宽不足则自然撑开、超出则等比压缩」的效果。 ? 推荐实现方案 <meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>SVG 表格自适应布局</title><style> table { width: 100%; max-width: 100%; table-layout: fixed; /* 关键:启用固定列宽计算 */ border-collapse: collapse; margin: 0 auto; } td { padding: 0; vertical-align: top; } svg { display: block; width: 100%; /* 让 SVG 填满单元格宽度(为 JS 调整预留基础) */ height: auto; /* 保持宽高比 */ max-width: none; /* 防止 CSS max-width 干扰 JS 精确控制 */ } </style> <script> function resizeSVGsInTable() { const table = document.querySelector('table'); if (!table) return; const tableRect = table.getBoundingClientRect(); const availableWidth = tableRect.width; const svgs = document.querySelectorAll('table svg'); // 提取各 SVG 的 viewBox 宽度(即原始逻辑宽度) const svgData = Array.from(svgs).map(svg => { const vb = svg.getAttribute('viewBox'); const width = vb ? parseFloat(vb.split(' ')[2]) : 0; return { element: svg, originalWidth: width }; }).filter(item => item.originalWidth > 0); if (svgData.length === 0) return; const totalOriginalWidth = svgData.reduce((sum, item) => sum + item.originalWidth, 0); // 若总原始宽度 ≤ 可用宽度:保持原始比例,让表格自然收缩(依赖 table-layout: fixed + width: 100%) // 若超出:按比例缩放每个 SVG 的 width 属性 if (totalOriginalWidth > availableWidth) { svgData.forEach(({ element, originalWidth }) => { const scaledWidth = (originalWidth / totalOriginalWidth) * availableWidth; element.setAttribute('width', `${scaledWidth}px`); }); } else { // 恢复为 auto 或移除 width 属性,交由 CSS width: 100% 自动分配(此时表格会收缩至内容总宽) svgData.forEach(({ element }) => { element.removeAttribute('width'); }); } } // 初始化 + 响应式监听 window.addEventListener('load', resizeSVGsInTable); window.addEventListener('resize', () => { // 使用 requestAnimationFrame 避免重复触发 requestAnimationFrame(resizeSVGsInTable); }); </script>⚠ 注意事项与最佳实践 viewBox 必须准确:它是计算缩放比例的唯一可靠依据,务必与 实际尺寸一致; 避免设置 width/height 属性(除非 JS 控制):直接写在 HTML 中会覆盖 CSS 响应式行为,干扰 JS 计算; table-layout: fixed 是关键:它使表格列宽由第一行单元格决定,配合 width: 100% 和 svg { width: 100% },可让 SVG 占满分配后的列宽; 兼容混合内容:本方案不限制 内仅含 SVG;若存在文字或其他元素,建议用 flex 或 grid 布局替代表格,或对非 SVG 内容设置 min-width: 0 防止挤压; 性能优化:使用 requestAnimationFrame 包裹 resize 回调,避免频繁重排重绘。 该方案已在现代浏览器(Chrome/Firefox/Safari/Edge)中验证有效,兼顾语义清晰性、可维护性与跨设备适配能力,是处理多 SVG 表格布局的稳健选择。 CSS3 SVG带控件的顶部导航栏代码 CSS3 SVG带控件的顶部导航栏代码是一款功能强大的带控件的超实用网页顶部导航栏。 下载
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>SVG 表格自适应布局</title><style> table { width: 100%; max-width: 100%; table-layout: fixed; /* 关键:启用固定列宽计算 */ border-collapse: collapse; margin: 0 auto; } td { padding: 0; vertical-align: top; } svg { display: block; width: 100%; /* 让 SVG 填满单元格宽度(为 JS 调整预留基础) */ height: auto; /* 保持宽高比 */ max-width: none; /* 防止 CSS max-width 干扰 JS 精确控制 */ } </style>
该方案已在现代浏览器(Chrome/Firefox/Safari/Edge)中验证有效,兼顾语义清晰性、可维护性与跨设备适配能力,是处理多 SVG 表格布局的稳健选择。
CSS3 SVG带控件的顶部导航栏代码是一款功能强大的带控件的超实用网页顶部导航栏。
相关文章
智谱清言PPT制作怎么搭配文字和图片
Mac Keynote怎么把复杂的矢量形状拆分为独立路径
如何在Tailwind CSS中精确控制SVG图标的颜色与尺寸?
HTML怎么管理导航栏图标资源
如何在CSS中正确定义和使用全局自定义属性
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
相关标签:
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
上一篇:如何在 HTML 编辑器中封装基于 Promise 的异步文件上传通用接口
下一篇:如何调整单元格间距_CELLSPACING控制表格格子之间的缝隙
作者最新文章
HTML5 视频自动播放在桌面浏览器中的兼容性解决方案(Angular 17)
如何正确切换 Power BI 嵌入报表的桌面与移动布局
如何防止 JavaScript 倒计时器自动重启
如何为全站 HTML 页面统一动态切换背景与配色方案
Canvas 宽高设置与 drawImage 缩放绘制的正确实践
如何实现热力图(Heatmap)中仅内容区域可滚动,行列标签随动的布局
如何实现热力图(Heatmap)独立滚动,同时保持行列标签同步滚动
如何修复移动端下拉菜单无法展开的问题
如何为多个图片卡片统一添加点击放大功能
如何为多个图片卡片统一添加点击放大预览功能
热门AI工具
二狗PPT
立刻MV
LibLibAI
蛙蛙写作
讯飞绘文
Lovart
豆包大模型
DeepSeek
相关专题
html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。
2023.06.14
5515
7
html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。
2023.06.21
3172
4
html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。
2023.07.31
2830
5
html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。
2023.08.01
2839
HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。
2023.08.11
4719
6
在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。
2801
3
html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。
2023.08.31
2589
html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。
2023.09.01
2328
HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。
2023.09.20
2348
热门下载
相关下载
精品课程
共0课时 | 0.3万人学习
共20课时 | 20.4万人学习
共6课时 | 54.6万人学习
共89课时 | 133.4万人学习
共49课时 | 82.2万人学习
共22课时 | 2.4万人学习
共31课时 | 3.4万人学习
共28课时 | 4.4万人学习
最新文章