SlickGrid 5.8.1切换SVG展开/折叠图标不显示问题求助
解决SlickGrid 5.8.1折叠/展开SVG图标不显示问题
你的SVG图标不显示的核心原因是CSS mask需要配合背景色才能生效,同时原GIF图的background属性未被覆盖,导致mask遮罩无法正常展示。以下是修复后的完整方案:
修复后的CSS代码
/* 覆盖原GIF背景,确保mask生效 */ .toggle.expand, .toggle.collapse { background-color: #333; /* 图标颜色,可根据主题调整,也可用currentColor继承父元素颜色 */ background-image: none; /* 移除原GIF背景,避免冲突 */ width: 16px; /* 固定图标尺寸,匹配原GIF大小 */ height: 16px; } .toggle.expand { -webkit-mask: url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M19,19V5H5V19H19M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5C3,3.89 3.9,3 5,3H19M17,11V13H7V11H17Z"/%3E%3C/svg%3E') no-repeat center center; mask: url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M19,19V5H5V19H19M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5C3,3.89 3.9,3 5,3H19M17,11V13H7V11H17Z"/%3E%3C/svg%3E') no-repeat center center; -webkit-mask-size: contain; mask-size: contain; } .toggle.collapse { -webkit-mask: url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M19,19V5H5V19H19M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5C3,3.89 3.9,3 5,3H19M11,7H13V11H17V13H13V17H11V13H7V11H11V7Z"/%3E%3C/svg%3E') no-repeat center center; mask: url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M19,19V5H5V19H19M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5C3,3.89 3.9,3 5,3H19M11,7H13V11H17V13H13V17H11V13H7V11H11V7Z"/%3E%3C/svg%3E') no-repeat center center; -webkit-mask-size: contain; mask-size: contain; }
关键修复点说明
- 添加背景色:mask是遮罩效果,必须给元素设置
background-color才能透出SVG的形状,颜色可根据主题灵活调整。 - 移除原背景图:显式设置
background-image: none,彻底覆盖原GIF的background属性,避免样式冲突。 - 固定元素尺寸:原GIF图标有固定宽高,给
.toggle类设置width和height,确保SVG图标有足够空间显示。 - 调整mask尺寸:用
mask-size: contain替代100% 100%,保证SVG图标按比例完整显示,不会出现拉伸变形。
更简单的替代方案:直接用background显示SVG
如果不想使用mask,也可以直接将SVG作为背景图使用,逻辑更直观:
.toggle.expand { background: url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="16px" width="16px" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="#333" d="M19,19V5H5V19H19M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5C3,3.89 3.9,3 5,3H19M17,11V13H7V11H17Z"/%3E%3C/svg%3E') no-repeat center center; width: 16px; height: 16px; } .toggle.collapse { background: url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="16px" width="16px" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="#333" d="M19,19V5H5V19H19M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5C3,3.89 3.9,3 5,3H19M11,7H13V11H17V13H13V17H11V13H7V11H11V7Z"/%3E%3C/svg%3E') no-repeat center center; width: 16px; height: 16px; }
内容的提问来源于stack exchange,提问作者DaveA
相关产品推荐
相关产品推荐

