我正在try 显示带有一些透明部分的SVG图标.

这些图标中的白色意味着位于先前渲染的黑色像素之上的透明像素. 我找不到正确的混合模式或剪辑/蒙版模式来正确显示它.

有没有一种方法可以在不改变SVG路径本身的情况下,通过css或一些属性来解决这个问题?

example

This is how it should look. Here the white color is simply replaced with the background color. But it's the wrong solution because instead of color there can be a picture. example 3

This is what the icons look like without white color example 1

示例SVG:

<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
    <g clip-path="url(#clip0_2124_24547)">
        <path d="M5.64062 6.36719H7.45703V4.5625C7.45703 3.57812 7.96094 3.09766 8.93359 3.09766H19.5391C20.5234 3.09766 21.0156 3.57812 21.0156 4.5625V6.34375H22.832V4.69141C22.832 2.40625 21.6953 1.38672 19.5156 1.38672H8.95703C6.89453 1.38672 5.64062 2.40625 5.64062 4.69141V6.36719Z" fill="black" fill-opacity="0.85"/>
        <path d="M4.49219 23.1484H23.9922C26.2656 23.1484 27.4727 22 27.4727 19.7148V8.74609C27.4727 6.47266 26.2656 5.3125 23.9922 5.3125H4.49219C2.32422 5.3125 1 6.47266 1 8.74609V19.7148C1 22 2.20703 23.1484 4.49219 23.1484ZM2.89844 19.8086V8.65234C2.89844 7.62109 3.42578 7.08203 4.46875 7.08203H24.0156C25.0469 7.08203 25.5859 7.62109 25.5859 8.65234V19.8086C25.5859 20.8398 25.0469 21.3789 24.0156 21.3789H4.46875C3.42578 21.3789 2.89844 20.8398 2.89844 19.8086ZM21.3906 11.3242C22.1758 11.3242 22.8438 10.668 22.8438 9.85938C22.8438 9.07422 22.1758 8.40625 21.3906 8.40625C20.582 8.40625 19.9258 9.07422 19.9258 9.85938C19.9258 10.668 20.582 11.3242 21.3906 11.3242Z" fill="black" fill-opacity="0.85"/>
        <path d="M7.96094 26.6289H20.5117C22 26.6289 22.75 25.9492 22.75 24.3906V14.8281C22.75 13.2695 22 12.5898 20.5117 12.5898H7.96094C6.54297 12.5898 5.72266 13.2695 5.72266 14.8281V24.3906C5.72266 25.9492 6.47266 26.6289 7.96094 26.6289Z" fill="white"/>
        <path d="M7.96094 26.6289H20.5117C22 26.6289 22.75 25.9492 22.75 24.3906V14.8281C22.75 13.2695 22 12.5898 20.5117 12.5898H7.96094C6.54297 12.5898 5.72266 13.2695 5.72266 14.8281V24.3906C5.72266 25.9492 6.47266 26.6289 7.96094 26.6289ZM8.54688 24.8594C7.92578 24.8594 7.60938 24.5547 7.60938 23.9219V15.2852C7.60938 14.6523 7.92578 14.3594 8.54688 14.3594H19.9375C20.5703 14.3594 20.8633 14.6523 20.8633 15.2852V23.9219C20.8633 24.5547 20.5703 24.8594 19.9375 24.8594H8.54688ZM10.1758 18.2852H18.3203C18.7422 18.2852 19.0469 17.9688 19.0469 17.5469C19.0469 17.1484 18.7422 16.8438 18.3203 16.8438H10.1758C9.75391 16.8438 9.4375 17.1484 9.4375 17.5469C9.4375 17.9688 9.75391 18.2852 10.1758 18.2852ZM10.1758 22.375H18.3203C18.7422 22.375 19.0469 22.0586 19.0469 21.6602C19.0469 21.25 18.7422 20.9336 18.3203 20.9336H10.1758C9.75391 20.9336 9.4375 21.25 9.4375 21.6602C9.4375 22.0586 9.75391 22.375 10.1758 22.375Z" fill="black" fill-opacity="0.85"/>
    </g>
    <defs>
        <clipPath id="clip0_2124_24547">
            <rect width="26.4727" height="25.6289" fill="white" transform="translate(1 1)"/>
        </clipPath>
    </defs>
</svg>

推荐答案

你现在所拥有的是被填满的小路.我会回go 重新画所有的东西.

但是,如果您正在寻找解决方案,您可以将所有路径放在一个后面带有黑色矩形的掩码中.请注意,所有路径现在都填充为白色,除了您填充为白色的路径现在填充为黑色.

在下一个示例中,我将使用由这些路径掩蔽的红色填充矩形.

为了改变图标的 colored颜色 ,改变红色矩形的填充.

<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
    <mask id="m">
        <rect width="28" height="28" fill="black"/>
        <path d="M5.64062 6.36719H7.45703V4.5625C7.45703 3.57812 7.96094 3.09766 8.93359 3.09766H19.5391C20.5234 3.09766 21.0156 3.57812 21.0156 4.5625V6.34375H22.832V4.69141C22.832 2.40625 21.6953 1.38672 19.5156 1.38672H8.95703C6.89453 1.38672 5.64062 2.40625 5.64062 4.69141V6.36719Z" fill="white" />
        <path d="M4.49219 23.1484H23.9922C26.2656 23.1484 27.4727 22 27.4727 19.7148V8.74609C27.4727 6.47266 26.2656 5.3125 23.9922 5.3125H4.49219C2.32422 5.3125 1 6.47266 1 8.74609V19.7148C1 22 2.20703 23.1484 4.49219 23.1484ZM2.89844 19.8086V8.65234C2.89844 7.62109 3.42578 7.08203 4.46875 7.08203H24.0156C25.0469 7.08203 25.5859 7.62109 25.5859 8.65234V19.8086C25.5859 20.8398 25.0469 21.3789 24.0156 21.3789H4.46875C3.42578 21.3789 2.89844 20.8398 2.89844 19.8086ZM21.3906 11.3242C22.1758 11.3242 22.8438 10.668 22.8438 9.85938C22.8438 9.07422 22.1758 8.40625 21.3906 8.40625C20.582 8.40625 19.9258 9.07422 19.9258 9.85938C19.9258 10.668 20.582 11.3242 21.3906 11.3242Z" fill="white" />
        <path d="M7.96094 26.6289H20.5117C22 26.6289 22.75 25.9492 22.75 24.3906V14.8281C22.75 13.2695 22 12.5898 20.5117 12.5898H7.96094C6.54297 12.5898 5.72266 13.2695 5.72266 14.8281V24.3906C5.72266 25.9492 6.47266 26.6289 7.96094 26.6289Z" fill="black"/>
        <path d="M7.96094 26.6289H20.5117C22 26.6289 22.75 25.9492 22.75 24.3906V14.8281C22.75 13.2695 22 12.5898 20.5117 12.5898H7.96094C6.54297 12.5898 5.72266 13.2695 5.72266 14.8281V24.3906C5.72266 25.9492 6.47266 26.6289 7.96094 26.6289ZM8.54688 24.8594C7.92578 24.8594 7.60938 24.5547 7.60938 23.9219V15.2852C7.60938 14.6523 7.92578 14.3594 8.54688 14.3594H19.9375C20.5703 14.3594 20.8633 14.6523 20.8633 15.2852V23.9219C20.8633 24.5547 20.5703 24.8594 19.9375 24.8594H8.54688ZM10.1758 18.2852H18.3203C18.7422 18.2852 19.0469 17.9688 19.0469 17.5469C19.0469 17.1484 18.7422 16.8438 18.3203 16.8438H10.1758C9.75391 16.8438 9.4375 17.1484 9.4375 17.5469C9.4375 17.9688 9.75391 18.2852 10.1758 18.2852ZM10.1758 22.375H18.3203C18.7422 22.375 19.0469 22.0586 19.0469 21.6602C19.0469 21.25 18.7422 20.9336 18.3203 20.9336H10.1758C9.75391 20.9336 9.4375 21.25 9.4375 21.6602C9.4375 22.0586 9.75391 22.375 10.1758 22.375Z" fill="white" />
    </mask>


    <rect width="28" height="28" fill="red" mask="url(#m)"/>
</svg>

Css相关问答推荐

视频覆盖不适用于reactjs样式的组件

如何以Angular 将下拉面板的宽度与其文本框对齐

react native 容器样式

臭虫?嵌套的css供应商前缀中断Chrome css解析

使用普通 CSS 的视口对角线长度

当值小于 1 时理解 flex-shrink

Angular 以Angular 获取当前聚焦的元素

问题定位位置:Tailwindcss 中的绝对元素

网格在行方向上的大小不正确

在 css 中使用 first-of-type 效果太好了吗?

基于类的 CSS Select 器

你如何调试可打印的 CSS?

BEM 块、命名和嵌套

CSS:背景图像和填充

使用 Bootstrap 设置身体的最大宽度

调用转发到 JSP 的 Servlet 时,浏览器无法访问/查找相关资源,如 CSS、图像和链接

完成后如何防止css3动画重置?

在 CSS 中表示 100% 的 1/3 的最佳方式是什么?

HTML5 和边框

如何复制 iOS 上固定的后台附件