SVG 루트 요소의 기본 배경색


134

전체 SVG 문서의 기본 배경색을 예를 들어 빨간색으로 설정하고 싶습니다.

<svg viewBox="0 0 500 600" style="background: red">/* content */</svg>

위의 솔루션은 작동하지만 스타일 속성의 배경 속성은 불행히도 표준이 아닙니다 : http://www.w3.org/TR/SVG/styling.html#SVGStylingProperties 이므로 SVG로 청소하는 동안 제거됩니다. 청소기.

이 배경색을 선언하는 다른 방법이 있습니까?


1
SVG Cleaner에도 버그가 있습니까? 표준이지만 인라인 스타일 블록도 제거합니다. w3.org/TR/SVG/styling.html#StylingWithCSS
Volker E.

답변:


120

SVG 1.2 Tiny의 뷰포트 채우기 현재 대부분의 브라우저가 SVG 1.1을 대상으로하지만이 속성이 얼마나 광범위하게 구현되어 있는지 잘 모르겠습니다. 오페라는 그것을 FWIW로 구현합니다.

더 많은 브라우저 간 솔루션은 현재 <rect>너비와 높이가 100 %이고 <svg>요소 의 첫 번째 자식으로 fill = "red"인 요소를 고정하는 것입니다.

<rect width="100%" height="100%" fill="red"/>

24
rect hack 종류의 작업이지만 svg의 종횡비가 항상 얻는 뷰포트와 일치한다고 가정하므로 모든 상황에서 전체 뷰포트를 채우지는 않습니다.
Erik Dahlström

1
종횡비가 뷰포트와 일치하지 않으면이를 사용하여 width="10000%" height="10000%"고정시킬 수 있습니다. 그렇지 않은 경우 0을 추가하십시오
mulllhausen

1
@mulllhausen 불행히도 10000000 %의 높은 값을 추가해도 효과가 없었습니다. 다른 제안?
Crashalot

버려진 viewport-fill캐니 우스 풀 요청 : github.com/Fyrd/caniuse/issues/2186 왜 SVG가 죽게했던 이유는 무엇입니까?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

47

이것은 Safari에서 작동합니다. SVG는 요소의 경계 상자가 포함되는 배경색으로 만 색상을 지정합니다. 따라서 픽셀 경계가 0 인 경계선 (획)을 지정하십시오. 배경색으로 당신을 위해 모든 것을 채 웁니다.

<svg style='stroke-width: 0px; background-color: blue;'> </svg>


5
이로 인해 모든 하위 요소 획의 너비가 0이되기 때문에 "배경"옵션이 좋지 않습니다.
duanev

35

이제 코드가있는 @Robert Longson의 대답입니다 (원래 코드가 없었으며 나중에 추가되었습니다).

<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
 <rect width="100%" height="100%" fill="red"/>
</svg>

이 답변은 다음을 사용합니다.


20

내가 찾은 매우 간단한 해결책을 알려 드리겠습니다.이 답변은 이전 답변으로 작성되지 않았습니다. 또한 SVG에서 배경을 설정하고 싶었지만 독립 실행 형 SVG 파일에서 작동하기를 원합니다.

이 솔루션은 정말 간단합니다. 사실 SVG는 스타일 태그를 지원하므로 다음과 같은 작업을 수행 할 수 있습니다

<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50">
  <style>svg { background-color: red; }</style>
  <text>hello</text>
</svg>

좋고 간단한 해결책!
conceptdeluxe

1
이것은 모든 브라우저에서 일반적으로 작동하지만 요소 background-color의 설정 <svg>은 IE11이 viewBox속성으로 정의 된 영역 외부에서도 배경색을 렌더링하게 합니다. 사용할 때 문제가되지 않습니다 widthheight하지만 속성.
conceptdeluxe

@conceptdeluxe 흥미로운 관찰, 이론적으로 svg 안에 코딩 된 스타일은 svg에만 적용되어야합니다. 그러나 너비와 높이 설정은 거의 항상 필요합니다.
지안루카 카사 티

태그가 최상위 수준 이라고 가정하면 <svg style"...."></svg>및 사이에 차이가 있습니까? 그렇지 않다면이 답변은 OP의 원래 솔루션처럼 보이며 다른 구문으로 다시 패키지되었습니다. (그러나이 솔루션은 SVG Cleaner를 유지하면서도 그렇지는 않습니까?)<svg><style>...</style></svg><style><svg style="..."></svg>
Labrador

@Labrador 나는 해결책을 찾고 있었고,이 질문을 보았고, 그것을 해결하고 공유 할 수있는 방법을 찾았습니다. 이 w3.org/TR/SVG/styling.html#SVGStylingProperties에보 고 된 속성 만 지원되는 것 같습니다. 반면에 내가 제안한 솔루션은 경로, rect 등과 같은 다른 SVG 태그의 스타일을 지정할 수도 있습니다. 주요 기능은 독립형 SVG에서도 작동한다는 것입니다.
지안루카 카사 티

10

현재 다음과 같은 파일을 작업 중입니다.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/css" href="style.css" ?>
<svg
  xmlns="http://www.w3.org/2000/svg"
  version="1.1"
  width="100%"
  height="100%"
  viewBox="0 0 600 600">
...

그리고 이것을 넣으려고했습니다 style.css.

svg {
  background: #bf1f1f;
}

Chromium 및 Firefox 에서 작동 하지만 좋은 방법이라고 생각하지 않습니다 . EyeOfGnome 이미지 뷰어는 렌더링하지 않으며 Inkscape는 특수 네임 스페이스를 사용하여 이러한 배경을 저장합니다.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
    xmlns="http://www.w3.org/2000/svg"
    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    version="1.1"
    ...
  <sodipodi:namedview
     pagecolor="#480000" ... >

SVG 루트 요소는 SVG 명령에서 페인트 가능한 요소의 일부가 아닌 것 같습니다 .

따라서 Robert Longson이 제공 한 "올바른"솔루션 을 사용하는 것이 좋습니다 . 단순한 "핵"이 아니라고 생각하기 때문입니다. SVG로 배경을 설정하는 표준 방법 인 것 같습니다 .


4
<RECT 폭 = "100 %"채우기 = "화이트"/ "100 %"높이> 처음 EOG로 해결할 문제에 대한
nvrandow

2

다른 해결 방법은 <div>동일한 크기를 사용 하여를 래핑하는 것 <svg>입니다. 그 후, 당신은 적용 할 수있을 것입니다 "background-color", 그리고 "background-image"그것은 영향을 미칠 것입니다 svg.

<div class="background">
  <svg></svg>
</div>

<style type="text/css">
.background{
  background-color: black; 
  /*background-image: */
}
</style>

12
이 솔루션은 HTML 핵입니다. SVG를 웹 페이지에 사용하는 경우에만 작동 할 수 있습니다. 이것은 진정한 SVG 솔루션이 아닙니다.
Charles-Édouard Coste

SVG의 배경색은 원래있는 구성 요소에서 차용합니다. svg와 같은 Kinda는 페이지 색상을 차용하고 기본 페이지 색상은 흰색입니다. 어쨌든 나는 그것이 핵이라고 생각하지 않습니다.
clinux

@ clinux : Charles가 말하려고 한 것은 웹 페이지 렌더링에 완벽하게 작동하지만 다른 곳에서 렌더링하기 위해 .svg 확장명을 가진 이미지와 동일한 svg를 사용하려는 경우 작동하지 않을 수 있습니다.
Arunkumar Srisailapathi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.