You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何给作为CSS背景图的SVG内部path、polygon、rect添加media query规则

解决方案

首先明确你的第一个疑问:可以直接在SVG文件内部嵌入媒体查询规则实现需求,你之前的写法错误在于将media query写在了行内style属性里,行内样式不支持@media规则,要把规则写在SVG内部的独立<style>标签中才会生效。

方案1:修改SVG文件,内置媒体查询

直接修改你作为背景图的SVG源码,加入内部样式和媒体查询,示例如下:

<svg height="210" width="500" xmlns="http://www.w3.org/2000/svg">
  <style>
    /* 小屏下隐藏指定多边形 */
    @media (max-width: 992px) {
      .hide-on-mobile {
        display: none;
      }
    }
  </style>
  <polygon points="100,10 40,198 190,78 10,78 160,198" style="fill:lime;stroke:purple;stroke-width:5;fill-rule:nonzero;"/>
  <!-- 给需要隐藏的元素加对应类名 -->
  <polygon class="hide-on-mobile" points="150,10 40,108 190,78 10,78 160,198" style="fill:blue;stroke:purple;stroke-width:5;fill-rule:nonzero;"/>
</svg>

注意:SVG作为图片加载时,内部的媒体查询判断的是SVG本身的渲染尺寸,而非页面视口尺寸,如果需要匹配页面视口宽度,用方案2更稳妥。

方案2:CSS媒体查询切换不同背景图

如果不想修改SVG源码,可以准备两个版本的SVG(完整版和隐藏指定元素的精简版),通过CSS媒体查询给伪元素切换不同的背景图地址即可,示例如下:

/* 默认大屏用完整版SVG */
.element::before {
  content: '';
  display: block;
  background: url('full.svg') no-repeat center;
  width: 500px;
  height: 210px;
}

/* 小屏切换为精简版SVG */
@media (max-width: 992px) {
  .element::before {
    background: url('cut.svg') no-repeat center;
  }
}

内容的提问来源于stack exchange,提问作者Smithy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 05:15:03