CSS 이전 또는 이후의 SVG 채우기 색상 변경
SVG 그래픽을 이렇게 넣었습니다.
a::before { content: url(filename.svg); }
태그 위를 마우스로 가리키면 지금처럼 SVG 파일을 새로 로드하지 않고 SVG가 채우기 색상을 변경하기를 원합니다.
a:hover::before { content: url(filename_white.svg); }
자바스크립트, jQuery 또는 내가 모르는 순수한 CSS를 사용하여 이것을 달성할 수 있습니까?
감사해요.
허용된 답변이 틀렸습니다. SVG 마스크와 배경색을 사용한 해결 방법을 적용하면 실제로 가능합니다.
p:after {
width: 48px;
height: 48px;
display: inline-block;
content: '';
-webkit-mask: url(https://gh.max.ax/heart.svg) no-repeat 50% 50%;
mask: url(https://gh.max.ax/heart.svg) no-repeat 50% 50%;
-webkit-mask-size: cover;
mask-size: cover;
}
.red:after {
background-color: red;
}
.green:after {
background-color: green;
}
.blue:after {
background-color: blue;
}
<p class="red">red heart</p>
<p class="green">green heart</p>
<p class="blue">blue heart</p>
실제로 SVG DOM 자체를 수정하는 것이 아니라 배경색을 변경하는 것입니다.이렇게 하면 이미지 또는 그라디언트를 배경으로 사용할 수도 있습니다.
갱신하다
J씨가 말씀하신 것처럼.안타깝게도 이 기능은 널리 지원되지 않습니다.
6년 만에 프리픽스 사용에 대한 지지도가 97%로 상승했습니다.
사용.contentproperty는 <img> 요소에서 svg와 기능적으로 동등한 (비 exposed) 마크업을 생성합니다.
다음과 같은 이유로 svg 문서 내부의 요소에 스타일을 적용할 수 없습니다.
- 스타일은 문서 간에 캐스케이드할 수 없습니다.
- <img>를 사용할 때(또는
content, 또는 svg를 참조하는 CSS 이미지 속성) svg 문서가 보안 문제로 인해 브라우저에 노출되지 않습니다.
비슷한 질문이지만,background-image 여기저기에
따라서, 당신이 원하는 것을 하기 위해서는 어떻게든 위의 두 가지 점을 극복해야 합니다.인라인 svg 사용, 필터(<img>에 적용) 사용, 또는 질문에서와 같이 다양한 svg 파일(또는 데이터 URI) 생성과 같은 다양한 옵션이 있습니다.
설정 없이 @lmaoooooo의 답변과 유사한 기법display: inline-block. 보존하고자 할 때 내용을 구술할 때 유용합니다.display: inline확실하게 하기 위해:after내용은 이전 텍스트 내용과 독립적으로 새 줄로 묶지 않습니다.
또한 클립 경로를 사용하여 Safari에서 배경색이 새는 것을 방지합니다(이 기능의 유용성은 이미지/라인 높이/등에 따라 다름).
a[target="_blank"]:after {
background-color: currentColor;
content: "";
padding: 0 0.5em;
margin: 0 0.125rem;
-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 2048 2048'%3E%3Cpath d='M1792 256v640h-128V475l-851 850-90-90 850-851h-421V256h640zm-512 1007h128v529H256V640h529v128H384v896h896v-401z'/%3E%3C/svg%3E");
mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 2048 2048'%3E%3Cpath d='M1792 256v640h-128V475l-851 850-90-90 850-851h-421V256h640zm-512 1007h128v529H256V640h529v128H384v896h896v-401z'/%3E%3C/svg%3E");
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-position: center;
mask-position: center;
clip-path: padding-box inset(0.28125em 0);
}
Lorem ipsum sumit dolar <a href="#" target="_blank">hello world</a>
그것을 하는 다른 방법이 방법이 있습니다.필터를 가지고 놀면 가능합니다.
콘텐츠에 svg url을 추가하고 색상을 변경하기만 하면 됩니다.
캔에 의하면아이유 모든 인기 형제들의 지지를 받고 있습니다.
p:after {
width: 48px;
height: 48px;
content: url(https://gh.max.ax/heart.svg);
}
.red:after {
filter: hue-rotate(14deg);
}
.green:after {
filter: hue-rotate(120deg);
}
.blue:after {
filter: hue-rotate(210deg);
}
.black:after {
filter: grayscale(100%);
}
<p class="red">red heart</p>
<p class="green">green heart</p>
<p class="blue">blue heart</p>
<p class="black">black heart</p>
언급URL : https://stackoverflow.com/questions/21509982/change-svg-fill-color-in-before-or-after-css
'programing' 카테고리의 다른 글
| WordPress 3.5 이후에도 Media_upload_tabs 필터를 사용하여 미디어 관리자에 탭을 추가해야 합니까? (0) | 2023.10.31 |
|---|---|
| jQuery를 사용하여 문자열에서 마지막 문자를 삭제하는 방법? (0) | 2023.10.31 |
| ggplot2를 사용할 때 지속적으로 잘못된 그래픽 상태 오류가 발생함 (0) | 2023.10.26 |
| 포인터 + 1이 4를 추가하는 이유 (0) | 2023.10.26 |
| jQuery.jax()에서 반환된 데이터를 필터링하려면 어떻게 해야 합니까? (0) | 2023.10.26 |