CSS 배경 확장 및 확장


653

컨테이너를 채우기 위해 확장하거나 확장하기 위해 CSS에서 배경을 얻는 방법이 있습니까?

답변:


267

최신 브라우저의 경우 다음을 사용하여이를 수행 할 수 있습니다 background-size.

body {
    background-image: url(bg.jpg);
    background-size: cover;
}

cover 이미지를 세로 또는 가로로 늘려 타일링 / 반복하지 않도록합니다.

Safari 3 이상, Chrome, Opera에서 작동합니다. 이상, 10 이상, Firefox 3.6 이상 및 Internet Explorer 9 이상에서 작동합니다.

더 낮은 버전의 Internet Explorer에서 작동하려면 다음 CSS를 시도하십시오.

filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='.myBackground.jpg', sizingMethod='scale');
-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='myBackground.jpg', sizingMethod='scale')";

2
클레멘트 : 이전 IE :의 필터에 대해 제안하는 것은 부분적으로 만 작동합니다. 그것은 그림 너비를 괜찮게 조정하지만 높이 제한은 아무것도 제한하지 않아 잘못되었습니다. 페이지가 높을수록 배경 그림도 마찬가지입니다. = (IE8에서 이것을 시도했습니다. 문제 그러나 배경이 응답을 ?? 여기에 감사를 축소되는 방식으로 전체 화면으로 뷰포트를 확장 할 수 possibke 될 수있다!

3
IE 고유의 필터는 이상적인 솔루션이 아니므로 CSS 대안으로 IE를 자유롭게 조정할 수 있습니다. 나는 개인적으로 내 사이트에서 CSS3 "커버"를 사용하고 iOS 장치에서 잘 작동합니다. 장치 너비를 정의하십시오.
Clement

9
커버는 bg를 늘리지 않습니다. 100 % 100 % 그렇습니다.
neoswf

이 솔루션은 실제 해상도보다 이미지를 가로 또는 세로로 늘리고 싶지 않은 경우에 가장 효과적이었습니다. 감사..!!
Mr. Noddy

1
주의 : Chromium 78.0.3904.97부터는 각 축을 따라 svg 이미지의 크기를 독립적으로 조정할 수 없습니다. 크기를 확대하여 래스터 이미지로 변환해야 할 수도 있습니다.
Mike

567

CSS 3 속성을 사용하십시오 background-size.

#my_container {
    background-size: 100% auto; /* width and height, can be %, px or whatever. */
}

2012 년부터 최신 브라우저에서 사용할 수 있습니다.


93
이미지의 종횡비를 유지하려면 "background-size : cover;"를 사용해야합니다. 또는 "배경 크기 : 포함;". 나는 polyfill을 구축 한 그 구현 IE8에서 해당 값 : github.com/louisremi/background-size-polyfill
루이 레미

6
나는 이것이 1 살이라는 것을 알고 있지만 '괜찮은 브라우저'부분에 (웃음) 동의해야합니다. 모든 브라우저를 확인하지만 IE보다 IE에 더 많은 문제가 있습니다.
ErocM

36
background-size: 100% 100%;다른 사람에게 도움이된다면 원하는 효과를 얻 도록 설정해야했습니다 .
guanome

1
MDN에 대한 설명 covercontain
mohas

2
이것은 실제로 작동하지 않습니다. 문제는 컨테이너 를 채우는 것인데, 이는 컨테이너가 늘어나지 않도록 반복한다는 의미입니다. 반면 에이 답변은 높이가 영역을 덮지 않으면 높이 방향으로 반복됩니다. "채우기 스트레치"는 스트레치를 의미하지만 반복하지 않아야합니다. 정답은 아래에서 "표지"입니다. 실제로 그렇지 않은 경우를 처리합니다.
gman

171

CSS로 이미지를 스케일링하는 것은 가능하지 않지만 다음과 같은 방식으로 비슷한 효과를 얻을 수 있습니다.

이 마크 업을 사용하십시오.

<div id="background">
    <img src="img.jpg" class="stretch" alt="" />
</div>

다음 CSS로 :

#background {
    width: 100%; 
    height: 100%; 
    position: absolute; 
    left: 0px; 
    top: 0px; 
    z-index: 0;
}

.stretch {
    width:100%;
    height:100%;
}

그리고 당신은해야합니다!

이미지를 "풀 블리드"로 조정하고 종횡비를 유지하려면 다음과 같이하십시오.

.stretch { min-width:100%; min-height:100%; width:auto; height:auto; }

꽤 잘 작동합니다! 그러나 한 치수가 잘 리면 양쪽에 고르게 잘리지 않고 이미지의 한쪽에만 잘립니다. Firefox, Webkit 및 Internet Explorer 8 에서 테스트했습니다 .


2
이것은 잘 작동하지만 ... 사진을 가로 또는 세로로 조정했는지에 따라 조금 더 견고한 (아마도 자바 스크립트로) 무언가를 찾고있었습니다. 누군가가 그 정맥에 해결책을 가지고 있다면 링크를 좋아할 것입니다 ... 감사합니다!
브라이언 암스트롱

4
다른 사람이 관심이 있다면
Brian Armstrong

1
margin: 0 autoon으로 수평 센터링을 수행 할 수 있습니다 .stretch. width또는 만 설정하면 height화면 비율이 동일하게 유지됩니다. 사용해보십시오 max-widthmax-height... 줌 팩터를 제한
로널드

1
이것은 ie8 / ie9에서 작동하지 않지만 ie6 / ie7 (및 다른 모든 브라우저)에서는 작동합니다. ie8 / ie9에서 이미지는 div의 약 3/4에 대해서만 나타납니다. 아무도 같은 문제가 있습니까?

3
SO의 결함 : 더 이상 정확하지 않은 답변을 표시 할 방법이 없으므로 @Ullas와 같은 사람들이 길을 잃었습니다. 모든 최신 브라우저에서 배경을 쉽게 확장 할 수 있습니다. developer.mozilla.org/en/CSS/background-size
Glenn Maynard

161

CSS3에서 background-size 속성 을 사용하십시오 :

.class {
     background-image: url(bg.gif);
     background-size: 100%;
}

편집 : Modernizr배경 크기 지원 감지를 지원 합니다. 작동하도록 작성된 JavaScript 해결 방법을 사용할 수 있지만 필요한 경우 지원하지 않으면 동적으로로드 할 수 있습니다. 이렇게하면 특정 브라우저의 침입 CSS 해킹에 의존하지 않고 코드를 유지 관리 할 수 ​​있습니다.

개인적으로 스크립트를 사용하여 imgsizer 의 적응 인 jQuery를 사용하여 처리합니다 . 대부분의 디자인에서 장치 전체의 유체 레이아웃에 너비 %를 사용함에 따라 루프 중 하나에 약간의 적응이 있습니다 (항상 100 %가 아닌 크기를 고려함).

for (var i = 0; i < images.length; i++) {
    var image = images[i],
        width = String(image.currentStyle.width);

    if (width.indexOf('%') == -1) {
        continue;
    }

    image.origWidth = image.offsetWidth;
    image.origHeight = image.offsetHeight;

    imgCache.push(image);
    c.ieAlpha(image);
    image.style.width = width;
}

편집 : 당신은 또한 jQuery CSS3 Finaliz [s] e에 관심이있을 수 있습니다 .


3
강조하기 위해 Modernizr은 기본적으로 지원하지 않는 브라우저에서 배경 크기를 지원하지 않습니다. 편리한 브라우저 간 테스트가 있습니다. 테스트가 거짓을 반환 할 때 가짜로 만드는 것은 당신에게 달려 있습니다.
Chris Moschini 2016 년

34

background-size 기사를 사용해보십시오 . 다음을 모두 사용하면 Internet Explorer를 제외한 대부분의 브라우저에서 작동합니다.

.foo {
    background-image: url(bg-image.png);
    -moz-background-size: 100% 100%;
    -o-background-size: 100% 100%;
    -webkit-background-size: 100% 100%; 
    background-size: 100% 100%;
} 

1
감사합니다! 이것은 "배경 크기 : 덮개"와 다릅니다
Pavel Vlasov

1
이것은 ipad에서 나를 위해 확장되었지만 확장되지 않았습니다. 게시 thx.
Don Cote

1
배경 축소도 가능합니다. 감사!
beingalex

1
배경 이미지가 SVG 인 경우 preserveAspectRatio="none"SVG 내에서 지정해야 합니다. 이에 대한 자세한 정보는 여기를 참조하십시오 . 여기 데모 .
Mentalist

당신은 배경 크기를 사용할 수 있습니다 : 표지; 배경 부착 : 고정; 확장 가능
Siraj Ahmed

15

현재는 아닙니다. CSS 3 에서 사용할 수 있지만 대부분의 브라우저에서 구현 될 때까지 시간이 걸립니다.



3
-1이 답변이 관련성이 없다고 생각합니다 . 어떤 해결책도 제공하지 않습니다 .
Potherca

1
@Potherca이 답변은 당시 (거의 3 년 전에) 정확했습니다.
Eran Galperin 2016 년

4
날짜가 표시되는 이유가 있습니다. 역사적 참고를 위해 보관해야합니다. 사이트의 모든 이전 답변을 검토하고 답보하고 있습니까? 그 이후로 더 많은 정보가 추가 되더라도 대답은 여전히 ​​옳습니다. 또한 여기의 다른 답변은 기본적으로 똑같습니다 (그리고 일부는 실제로 잘못되었습니다-불가능하다고 말합니다). 투표가 있기 때문에 당신이 선택한 것을 느낍니다.
Eran Galperin

3
아니, 2008 년에도이 문제에 대한 몇 가지 해결책이 있지만 "컴퓨터는 아니오"라고
말했기 때문에이

15
.style1 {
        background: url(images/bg.jpg) no-repeat center center fixed;
        -webkit-background-size: cover;
        -moz-background-size: cover;
        -o-background-size: cover;
        background-size: cover;
}

다음에서 작동합니다.

  • 사파리 3+
  • Chrome Whatever +
  • IE 9 이상
  • Opera 10+ (Opera 9.5는 배경 크기는 지원하지만 키워드는 지원하지 않음)
  • Firefox 3.6 이상 (Firefox 4는 비 공급 업체 접두사 버전을 지원합니다)

또한 당신은 즉 솔루션을 시도 할 수 있습니다

    filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='.myBackground.jpg', sizingMethod='scale');
    -ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='myBackground.jpg', sizingMethod='scale')";
    zoom:1;

Chris Coyier http://css-tricks.com/perfect-full-page-background-image/ 의이 기사에 대한 크레딧


이것이 "배경 크기 : 표지"와 다른 점은 무엇입니까?
PKHunter

@ PKHunter, 당신이 무엇을 원하는지 정확히 알지 못합니다. 이것은 background-size: cover브라우저 접두사와 IE 솔루션 을 제외하고 사용 하고 있습니다
Blowsie

8

한마디로 : 아니오. 이미지를 늘리는 유일한 방법은 <img>태그를 사용하는 것입니다. 창의력을 발휘해야합니다.

이것은 답변이 작성된 2008 년에 사실이었습니다. 오늘날 background-size이 문제를 해결하는 최신 브라우저가 지원 됩니다. IE8은이를 지원하지 않습니다.


6
@Blowsie-귀여운. 답변 날짜를 확인하십시오. 브라우저 환경은 지난 5 년 동안 약간 변경되었습니다.
Vilx-

5

"스트레치 및 스케일"정의 ...

비트 맵 형식이있는 경우 일반적으로 비트 맵 형식을 늘리고 끌어내는 것이 좋지 않습니다 (그래픽으로 말하면). 반복 가능한 패턴을 사용하여 동일한 효과의 느낌을 줄 수 있습니다. 예를 들어 페이지 하단으로 갈수록 그라디언트가있는 경우 너비가 단일 픽셀이고 컨테이너와 높이가 같은 그래픽 (또는 스케일링을 고려하여 더 큰 그래픽)을 사용한 다음 페이지. 마찬가지로 그라디언트가 페이지에서 실행되면 컨테이너보다 1 픽셀 높고 넓으며 페이지가 반복됩니다.

일반적으로 컨테이너가 커지거나 줄어들 때 컨테이너를 채우기 위해 늘이는 느낌을주기 위해 이미지를 컨테이너보다 크게 만듭니다. 컨테이너의 경계 외부에는 겹치는 부분이 표시되지 않습니다.

구부러진 가장자리가있는 상자와 같은 효과를 원한다면 상자의 왼쪽을 컨테이너의 왼쪽에 붙이고 컨테이너의 크기에 관계없이 (이유 내에서) 겹치지 않도록하십시오. 배경이 부족한 경우 가장자리가 구부러진 상자 오른쪽의 이미지를 레이어로 만들어 컨테이너 오른쪽에 배치합니다. 따라서 컨테이너가 축소되거나 커짐에 따라 곡선 상자 효과가 축소되거나 커지는 것처럼 보입니다. 실제로는 아니지만 실제로 일어나고있는 환상을 제공합니다.

컨테이너로 이미지를 축소하고 자르려면 이미지를 배경으로 사용하고 컨테이너로 크기를 조정하는 자바 스크립트로 보이도록 레이어링 트릭을 사용해야합니다. CSS로 이것을하는 현재 방법은 없습니다 ...

당신이 벡터 그래픽을 사용한다면, 당신은 내가 두려워하는 내 전문 영역을 벗어난 것입니다.


Stretch = 이미지의 가로 세로 비율을 독립적으로 변경하는 x 및 y 치수 변경, Scale = 이미지의 가로 세로 비율을 비례 적으로 유지하면서 x 및 y 치수 변경
Lawrence Dol

@SoftwareMonkey : 그런 다음 배경으로 직선 CSS에서 용어의 의미로 스트레치 및 스케일을 변경할 수 없습니다. 앞에서 설명한 것처럼 이것이 일어나고 있다는 착각을주기 위해 다양한 CSS 트릭을 사용해야합니다.
BenAlabaster

4

이것이 내가 만든 것입니다. 스트레치 클래스에서는 높이를 단순히로 변경했습니다 auto. 이렇게하면 배경 그림의 크기가 항상 화면 너비와 같고 높이가 항상 올바른 크기가됩니다.

#background {
    width: 100%;
    height: 100%;
    position: absolute;
    margin-left: 0px;
    margin-top: 0px;
    z-index: 0;
}

.stretch {
    width:100%;
    height:auto;
}

2

background-attachment라인을 추가하십시오 :

#background {
    background-attachment:fixed;
    width: 100%; 
    height: 100%; 
    position: absolute; 
    margin-left: 0px; 
    margin-top: 0px; 
    z-index: 0;
}

.stretch {
    width:100%;
    height:auto;
}

2

나는 이것이 수행하는 것과 동등하다는 것을 지적하고 싶다 :

html { width: 100%; height: 100%; }
body { width: 100%; height: 100%; /* Add background image or gradient to stretch here. */}

2

- 이것에 대한 또 다른 좋은 해결책은 페이지의 몸이나 모든 요소에 적용 할 수 Srobbin의 Backstretch입니다 http://srobbin.com/jquery-plugins/backstretch/


Nick, 우리는 일반적으로 귀하가 귀하의 답변에 두드러진 부분을 제공하고 추가 세부 사항을 위해서만 외부 링크를 제공하도록 요청합니다. 이는 링크 로트시에도 유용한 답변을 유지하는 데 도움이됩니다.
Lawrence Dol

1
내 잘못이야. 일반적으로 문서의 <head>에 백스트레치를 추가 한 후 다음과 같이 초기화합니다. $ ( ". your-element"). backstretch ( "path / to / image.jpg");
nickff

2

이 시도

http://jsfiddle.net/5LZ55/4/

body
{ 
    background: url(http://p1.pichost.me/i/40/1639647.jpg) no-repeat fixed; 
    background-size: cover;
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
}

1

SolidSmile의 부정 행위에 대한 추가 팁은 너비를 설정하고 높이에 자동을 사용하여 크기를 조정하는 것입니다.

전의:

#background {
    width: 500px;
    height: auto;
    position: absolute; 
    left: 0px; 
    top: 0px; 
    z-index: 0;
}

0

border-image : yourimage속성을 사용하여 이미지를 설정하고 이미지를 화면이나 창의 전체 테두리까지 확대하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.