使用SVG过滤器,我遇到了一个从CSS引用SVG过滤器的问题。在某些情况下,应用过滤器将从页面中删除应用过滤器的元素。我认为可能有两个原因:
答案 0 :(得分:1)
我认为问题是display:none
类中的hidden
,您可以使用其他隐藏方式,例如:
svg.hidden {
height:0;
margin:0;
border:none;
}
var svg = d3.select('#container').append('svg'),
defs = svg.append('defs'),
dsFilter;
svg.attr('width', 400).attr('height', 200);
dsFilter = defs.append('filter').attr('id', 'grayscale-d3')
dsFilter.append('feColorMatrix')
.attr('type', 'matrix')
.attr('values',
'0.3333 0.3333 0.3333 0 0 ' +
'0.3333 0.3333 0.3333 0 0 ' +
'0.3333 0.3333 0.3333 0 0 ' +
'0 0 0 1 0')
svg.append('text').attr('x', 2).attr('y', 2).text('appended by D3');
svg.append('circle').attr('class', 'd3').attr('cx', 200).attr('cy', 120).attr('r', 60);
body {
margin: 0;
font-size: 0;
}
circle {
fill: #bada55;
stroke: #000;
stroke-width: 1px;
}
circle.of {
filter: url('#grayscale-of');
}
circle.d3 {
filter: url('#grayscale-d3');
}
svg {
display: inline-block;
margin: 1rem 0 0 1rem;
border: 1px solid #000;
}
svg.hidden {
height:0;
margin:0;
border:none;
}
text {
dominant-baseline: text-before-edge;
font-size: 1rem;
}
<script src="https://d3js.org/d3.v3.min.js"></script>
<svg class="hidden">
<defs>
<filter id="grayscale-of">
<feColorMatrix values="0.3333 0.3333 0.3333 0 0
0.3333 0.3333 0.3333 0 0
0.3333 0.3333 0.3333 0 0
0 0 0 1 0"
type="matrix">
</feColorMatrix>
</filter>
</defs>
</svg>
<div id="container">
<svg width="400" height="200">
<text x="2" y="2">already in page</text>
<circle class="of" cx="200" cy="120" r="60" />
</svg>
</div>