IE9-10에서 SVG를 사용한 배경 크기


78

배경 이미지로 설정된 div가 있습니다.

<div>Play Video</div>

다음 CSS로 :

div {
background-image: url('icon.png');
background-image: url('icon.svg'), none;
background-size: 40px 40px;
background-repeat: no-repeat;
background-position: 90% 50%;
padding: 20px;
width: 150px;
}

배경 크기는 Firefox, Safari 및 Chrome에서 적용됩니다. IE8에서 SVG는 PNG 파일로 대체됩니다. 그러나 IE9 및 IE10에서는 SVG 파일의 크기가 크게 줄어 듭니다. 문제는 div의 너비와 높이와 관련된 것 같습니다. 150px의 높이를 추가하면 SVG가 제대로 렌더링됩니다. 더 작게 만들면 (즉, 100px) 그래픽이 축소되기 시작합니다.

누구든지 Explorer에서이 문제를 해결하는 방법을 찾았습니까? IE에게 div의 너비와 높이에 관계없이 background-size 값을 사용하도록 지시하는 방법이 있습니까?


좋은 질문입니다. 이것은 여러 번 일어났습니다.
eirenaios

답변:


169

SVG에 widthheight지정 되어 있는지 확인하십시오 . Illustrator에서 생성하는 경우이 옵션은 너비와 높이를 제거하므로 "반응 형"상자가 선택 해제되어 있는지 확인하십시오.


나는 같은 문제가 있었다. 그래서 우리는 편집기로 svg를 열었습니다. 또한 mbxtr과 마찬가지로 illustrator는 <svg> 태그의 너비, 높이 속성없이 svg를 생성합니다. 당신의 당신의 SVG를 다시 만들 수 있습니다 여기에
stephanfriedrich

35
이것은 나에게도 해주었다. 편집기에서 SVG를 열고 viewBox 속성의 마지막 두 값을 width 및 height 속성에 복사 / 붙여 넣기했습니다. 따라서 이전 : <svg viewBox = "0 0 800 150"> 이후 : <svg viewBox = "0 800150"width = "800"height = "150">
Tomas Lieberkind

2
내 문제는 SVG 코드 높이 및 너비 값 FWIW를 제거해야했습니다.
Eric Steinborn 2015 년

2
YMMV 내 생각 엔 너비와 높이 속성을 추가하는 것이 효과가 없었습니다. IE10은 여전히 ​​"덮개"가 무엇을 의미하는지 알지 못하는 것 같습니다. "포함"처럼 작동합니다.
James

1
@gunnx는 반응 형 컨테이너의 배경 이미지로 SVG를 사용하고 배경 크기를 '표지'로 설정하여 IE에서 해결했습니다.
Matty J

18

mbxtr이 거의 효과가 있다고 말했듯이 SVG에 너비와 높이를 추가했습니다. preserveAspectRatio="none slice"IE에서 반응 형으로 작동 하도록 추가 해야했습니다.


2
preserveAspectRatio="none slice"실제 svg 문서에 <svg> 태그를 추가하면 이 문제가 해결되었습니다! 제안 해 주셔서 감사합니다.
Micah Murray

4

나를 위해 다음 세 가지 수정 사항이 도움이되었습니다.

  • 가능하면 배경 위치를 "중앙"으로 설정하십시오.
  • background-size의 경우 두 값을 모두 설정하면 "100 % auto"가 트릭을 수행하지 않으므로 "100 % 100 %"를 사용합니다.
  • 그래도 SVG 자체의 "viewBox"속성 값을 마지막으로 변경하는 데 도움이되지 않고 SVG의 너비와 높이보다 한 픽셀 더 넓고 높게 만듭니다. 이렇게하면 SVG가 약간 줄어들지 만 IE가 잘라내는 것을 막고 더 작은 크기는 전혀 눈에 띄지 않습니다.

4

이 문제가 있었는데 svg의 코드 내에서 높이너비를 제거 하지만 viewBox를 유지하면 문제를 해결할 수 있음을 발견했습니다.

https://jakearchibald.github.io/svgomg/ 와 같은 컴파일러 사이트를 사용 하고 옵션을 "높이와 너비보다 viewBox 선호"로 설정하는 것이 좋습니다.

또한 이것이 작동하지 않는 경우 Illustrator에서 svg 이미지 주위에 정사각형 배경을 적용하고 가장자리 주위에 충분한 패딩을 남겨 둡니다.

그리고-> data uri : ... 예를 사용하여 스타일 시트에서 svg를 가져옵니다.

background-image : data-uri ( 'image / svg + xml; charset = UTF-8', 'where / your / svg / is / located');


멋진 웹 사이트입니다. 공유해 주셔서 감사합니다.
MortenMoulder

정말 좋은 도구!
rémy

3

음, 해결책이없는 것 같습니다. 놀라운 놀라움. 결국 IE입니다. 결국 다음 코드를 사용했습니다.

div {
padding: 20px;
width: 150px;
position: relative;
}

div:after {
position: absolute;
content: "";
width: 40px;
height: 40px;
top: 50%;
right: 30px;
margin-top: -20px;
background-image: url('icon.png');
background-image: url('icon.svg'), none;
}

나는 더 깨끗한 버전을 더 좋아했지만,이 해킹은 IE8, 9, 10을 포함한 모든 최신 브라우저에서 작동합니다 (아마도 11이지만 테스트하지는 않았습니다).


2
해킹은 무엇입니까? 설명해 주시겠습니까?
Mr_Green

나는 ... 그가 다른 브라우저에 대한 다른 아이콘을 사용하는 모든 사람들에게 적합하지 않습니다 생각
안녕하세요 우주

0

포함 된 요소의 전체 사이트가 아닌 SVG 배경 이미지 (예 : 검색 입력의 왼쪽에있는 돋보기)에서 유사한 문제가 발생했습니다.

Illustrator CC에서 SVG를 만들었지 만 Peter Collingridge의 SVG 옵티 마이저를 통해 실행하여 불필요한 모든 부분을 제거했습니다. http://petercollingridge.appspot.com/svg-optimiser


0

@mbxtr의 솔루션을 시도했습니다.

SVG에 너비와 높이가 지정되어 있는지 확인하십시오. Illustrator에서 생성하는 경우이 옵션은 너비와 높이를 제거하므로 "반응 형"상자가 선택 해제되어 있는지 확인하십시오.

Windows Chrome 및 IE에서는 여전히 작동하지 않았습니다. 글꼴 아이콘을 내보내고 있었으므로 글꼴이있는 경우 다음과 같이 내 보내야합니다.

  • "글꼴 : 윤곽선으로 변환"
  • "반응은"거짓

나는 또한 만약을 대비해서 "minify"를 체크하지 않았다.


0

1. 자바 스크립트

    drips.style.top = -dripsTop + "px";
 var browser = window.navigator.userAgent;
  if (browser.indexOf("Trident") > 0) {
     $(".flow_space").css({"background":"url(../img/space2-ie.svg) no-repeat", "background-size":"100%"});
  }

  1. svg (원래 높이 = 1050) 자신에게 직접 추가 svg 파일 preserveAspectRatio = "none"height = "2100"

0

Svg 배경 이미지 크기는 이러한 속성을 사용하여 IE 및 Chrome에서 동일하게 렌더링됩니다.

background: #ffffff url("images/calendar.svg") no-repeat;
border: 1px solid #dddddd;
float: left;
margin: 0;
overflow: hidden;
background-size:15px 15px;

0

Illustrator에서 모든 SVG가 반응하지 않도록 변경했습니다.

그리고 코드 예제를 찾고 있기 때문에 정답을 놓쳤습니다. "SVG에 너비와 높이가 지정되어 있는지 확인하십시오"라는 말은 다음과 같은 의미입니다.

    .my-class {
        background-size: 200px 100px;
    }

예를 들어 IE와 Chrome에서 크기가 약간 벗어난 경우 미디어 쿼리를 사용하여 IE를 타겟팅했습니다.

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
    .my-class {
        background-size: 200px 110px;
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.