CSS를 사용하여 오른쪽에서 배경 이미지 오프셋


443

배경 이미지를 요소의 오른쪽에서 특정 픽셀 수만큼 배치하는 방법이 있습니까?

예를 들어, 왼쪽 에서 특정 수의 픽셀 (예 : 10)을 배치하려면 다음과 같이하십시오.

#myElement {
    background-position: 10px 0;
}

당신은 확실히 의미하지 background-position: -10px 0;않습니까? 그냥 확인 :)
thirtydot

1
중복 된 항목이 많이 있지만 찾을 수 없습니다.
Pekka

1
왼쪽 가장자리에서 10 픽셀 왼쪽으로 이동하는 @thirtydot
nickf

가 사용할 수 밤은 것을 ... 그 바보
후안

@nickf 2013 년 말까지 대부분의 장치에서 사용할 수 없다는 것을 알고 있습니까?
Juan

답변:


786

이 CSS3 기능이 도움이되었다는 것을 알았습니다.

/* to position the element 10px from the right */
background-position: right 10px top;

내가 아는 한 IE8에서는 지원되지 않습니다. 최신 Chrome / Firefox에서는 제대로 작동합니다.

지원되는 브라우저에 대한 자세한 내용은 사용할 수 있습니까를 참조하십시오 .

사용 된 출처 : http://tanalin.com/en/blog/2011/09/css3-background-position/

업데이트 :

이 기능은 이제 모바일 브라우저를 포함한 모든 주요 브라우저에서 지원됩니다.


23
이것은 훌륭하지만 불행히도 Safari 5.1.7에서는 작동하지 않습니다 (휴대폰으로 볼 경우 매우 중요합니다)
MosheElisha

5
이제 휴대 기기 (Android, iOS 및 WindowsPhone에서 확인)에서 작동합니다. Still Safari 5.1.7은 여기에 주어진 배경 위치를 지원하지 않습니다.
Szorstki

8
나는 이것을 사용하고 있지만 예를 들어 오래된 브라우저의 경우 백분율로 대체됩니다. 배경 위치 : 95 % 중심; 배경 위치 : 오른쪽 13px 가운데;
gregdev

1
이 기능을 지원하지 않는 브라우저를 몇 명이나 사용하고 있는지 확실하지 않습니다. 많은 구형 안드로이드 기기가 아직 남아 있지만 사파리 사용자는 지금 최신 버전을 사용해야합니다. caniuse.com/#feat=css-background-offsets (정확히 동일하지는 않지만) 이들에 대한 백분율 대체를 충분히 쉽게 사용할 수 있습니다.
Mark

29
예를 들어와 같은 수직 및 수평 위치에 기본 위치를 지정하는 경우에만 작동합니다 right left top bottom. 예를 들어, 다음은 렌더링되지 않지만 다음과 같이 background-position: right 10px 10px작성되어야합니다.background-position: right 10px top 10px
chadiusvt

110

!! CSS3 가이 기능을 제공 했기 때문에 오래된 답변

배경 이미지를 요소의 오른쪽에서 특정 픽셀 수만큼 배치하는 방법이 있습니까?

아니.

인기있는 해결 방법은 다음과 같습니다.

  • 설정 margin-right대신 요소에 를
  • 이미지 자체에 투명한 픽셀을 추가하고 위치 지정 top right
  • 또는 요소의 너비가 알려진 후 jQuery를 사용하여 위치를 계산합니다.

6
확장 CSS3 '배경 위치'에 대한보다 포괄적 인 지원이 임박 : stackoverflow.com/questions/501375/...
블라드 Magdalin

92

가장 쉬운 해결책은 백분율을 사용하는 것입니다. 이것은 픽셀 정밀도를 요구 한 이후 정확히 원하는 답이 아니지만 오른쪽 가장자리와 이미지 사이에 약간의 패딩이 필요한 경우 일반적으로 99 %의 위치를 ​​지정하면 충분합니다.

암호:

/* aligns image to the vertical center and horizontal right of its container with a small amount of padding between the right edge */
div.middleleft {
  background: url("/images/source.jpg") 99% center no-repeat;
}

30
+1 "다음 주에 픽셀 정렬을하겠습니다"-항상 작동합니다.
moonwave99

2
이 솔루션은 브라우저에서 가장 일관되게 작동하는 것 같습니다.
Evan Haas

49

오래된 답변 : 이제 주요 브라우저에서 구현됩니다.이 질문에 대한 다른 답변을 참조하십시오.

CSS3는 background-position다른 원점에서 작동하도록 사양을 수정했습니다 . 불행히도 아직 주요 브라우저에서 구현되었다는 증거를 찾을 수 없습니다.

http://www.w3.org/TR/css3-background/#the-background-position 예 12를 참조하십시오.

background-position: right 3em bottom 10px;

고마워 타미! 불행히도 이것은 Firefox 4 또는 Chrome 11에서 작동하지 않았습니다.
nickf

이것은 Opera에서 구현됩니다. 그것이 사실 이기에는 너무 좋았다고 생각한 다음 다른 브라우저에서 테스트했으며 옳았습니다.
Vian Esterhuizen

1
현재 버전의 Chrome에서는 여전히 작동하지 않습니다. Version 21.0.1180.89
andlrc

3
Chrome Canary (v26)는 이제이를 지원합니다. 일단 릴리스 채널로 이동하고 Safari가 엔진을 업데이트하면 IE6-8 만 지원되지 않습니다 (IE9 / 10은 이미 새로운 형식을 지원함).
블라드 Magdalin

1
방금 이것을 테스트했는데 Firefox (v.18.0.2), IE (v.9.0.8) 및 Chrome (v.25.0.1364.97)에서 작동하지만 Safari (v.5.1.2)에서는 아직 작동하지 않습니다 . 언제 출시 될지 아는 사람이 있는지 알고 싶습니다. ;-)
Chaya Cooper

40

here 제안 된 것처럼 이것은 완벽하게 작동하는 예쁜 크로스 브라우저 솔루션입니다.

background: url('/img.png') no-repeat right center;
border-right: 10px solid transparent;

질문을 해결하는 것으로 표시된 답변에 제안 된 오프셋을 지정하는 CSS3 기능이 브라우저에서 아직 잘 지원되지 않기 때문에이를 사용했습니다. 예 :


1
테두리가 특정 색상이 필요할 때는 어떻습니까?
machineaddict

1
이것은 브라우저 간 호환성을 유지하면서 픽셀 정밀도를 가질 수 있기 때문에 좋은 대답입니다. 감사! (그리고 당신이 특정 색상의 테두리를 원한다면, 어떤 타입의 래퍼를 사용하여 입력을 감싸고 그 요소에 테두리를 추가하십시오.
Gavin

23

가장 적절한 대답은 배경-위치에 대한 새로운 4-값 구문이지만, 모든 때까지 브라우저를 지원 당신의 가장 좋은 방법은 다음과 같은 순서로 이전 응답의 조합입니다 :

background: url(image.png) no-repeat 97% center; /* default, Android, Sf < 6 */
background-position: -webkit-calc(100% - 10px) center; /* Sf 6 */
background-position: right 10px center; /* Cr 25+, FF 13+, IE 9+, Op 10.5+ */

15

간단하지만 더러운 트릭은 배경으로 사용중인 이미지에 원하는 오프셋을 추가하는 것입니다. 유지 관리 할 수 ​​없지만 작업이 완료됩니다.


8

이것은 대부분의 최신 브라우저 에서 작동 합니다 ... IE를 제외하고 (브라우저 지원) . 해당 페이지에 지원되는 것으로 IE => 9가 나열되어 있지만 테스트에 동의하지 않았습니다.

다음과 같이 calc () css3 속성을 사용할 수 있습니다.

.class_name {
    background-position: calc(100% - 10px) 50%;
}

나에게 이것은 오른쪽 마진을 얻는 가장 깨끗하고 가장 논리적 인 방법입니다. 또한 border-right: 10px solid transparent;IE 사용의 대체를 사용 합니다.


1
이것은 훌륭하지만 불행히도 Safari 5.1.7에서는 작동하지 않습니다 (휴대폰으로 볼 경우 매우 중요합니다)
MosheElisha

그런 다음 Safari에서 작동하는 배경 위치와이를 사용할 수있는 브라우저로 재정의 할 수있는 배경 위치를 사용해야합니다. 예 : background-position: 92% 8px; background-position: calc(100% - 12px) 8px;
Laki Politis

모든 브라우저에서 작동하는 것은 아닙니다. 이 right 10px center구문은 브라우저에서 더욱 확장 된 지원을 제공합니다.
Farzad YZ

이것이 "가장 최신 브라우저"에서 작동한다고 언급 한 첫 번째 줄을 읽으십시오. 나는 그것이 그들 모두에게 효과가 있다고 말한 적이 없다.
Novocaine

당신이 교체 된 후 caniuse에 따르면, 석회질의 사용은 ... IE9을 충돌 할 _A를를-
러스킨

4

Ok 당신의 요구가 무엇인지 이해한다면;

DIV 컨테이너를 호출 #main-container했으며 .my-element그 안에 있습니다. 이것을 사용하여 시작하십시오.

#main-container { 
  position:relative;
}
/*To make the element absolute - floats above all else within the parent container do this.*/
.my-element {
  position:absolute;
  top:0;
  right:10px;
}

/*To make the element apart of elements, something tangible that affects the position of other elements on the same level within the parent then do this;*/
.my-element {
  float:right;
  margin-right:10px;
}

그건 그렇고, 페이지 내에서 하위 레벨 요소를 참조하는 경우 클래스를 사용하는 것이 좋습니다 (따라서 위의 이름이 변경되었다고 가정합니다.


3

백그라운드 위치에 다른 출처를 허용하는 CSS3 사양은 이제 Firefox 14에서 지원되지만 여전히 Chrome 21에서는 지원되지 않습니다 (IE9는 부분적으로 지원하지만 직접 테스트하지는 않았습니다)

@MattyF가 언급 한 Chrome 문제 외에도 여기에 더 간결한 요약이 있습니다. http://code.google.com/p/chromium/issues/detail?id=95085


방금 이것을 테스트했는데 Firefox (v.18.0.2), IE (v.9.0.8) 및 Chrome (v.25.0.1364.97)에서는 작동하지만 Safari (v.5.1.2)에서는 작동하지 않습니다
Chaya Cooper

3

비례 요소가있는 경우 다음을 사용할 수 있습니다.

.valid {
    background-position: 98% center;
}

.half .valid {
    background-position: 96% center;
}

이 예 .valid에서 그림이있는 클래스가.half 되고 표준 크기의 절반이있는 행이됩니다.

더럽지 만 매력으로 작용하며 합리적인 관리가 가능합니다.


1
제 경우 (고정 너비 레이아웃 사용) 이것이 정확히 필요한 것입니다. 감사.
Gavin

3

예를 들어 버튼에 화살표 / 기타 아이콘을 추가하는 데 이것을 사용하려면 css pseudo-elements를 사용할 수 있습니까?

실제로 전체 버튼의 배경 이미지 인 경우 간격을 이미지에 통합하는 경향이 있습니다.

background-position: right 0;

그러나 버튼에 디자인 된 화살표를 추가 해야하는 경우이 HTML을 사용하는 경향이 있습니다.

<a href="[url]" class="read-more">Read more</a>

CSS로 다음을 수행하는 경향이 있습니다.

.read-more{
    position: relative;
    padding: 6px 15px 6px 35px;//to create space on the right
    font-size: 13px;
    font-family: Arial;
}

.read-more:after{
    content: '';
    display: block;
    width: 10px;
    height: 15px;
    background-image: url('../images/btn-white-arrow-right.png');
    position: absolute;
    right: 12px;
    top: 10px;
}

: after 선택기를 사용하여 CSS를 사용하여이 작은 아이콘을 포함하는 요소를 추가합니다. a- <i>요소 안에 범위 또는 요소를 추가하여 동일한 작업을 수행 할 수 있습니다. 그러나 이것이 버튼에 아이콘을 추가하는 더 깔끔한 방법이라고 생각하며 브라우저 간 지원됩니다.

여기에서 바이올린을 확인할 수 있습니다 : http://codepen.io/anon/pen/PNzYzZ


해야한다는 content: ''; 보다는 content:0;그러나 이것은 나를 위해 유용한 해결책이었다


2

중심을 위치로 사용하고 투명한 테두리를 추가하여 오프셋합니까?


1
나쁘지는 않지만 내용도 오른쪽에서 이동합니다. 이것은 거래 차단기 일 수도 있고 아닐 수도 있습니다. 여기 보이는 방법의 예는 다음과 같습니다 jsbin.com/ijewoq/1
nickf

약간의 시행 착오로 균형 잡힌 경우라고 생각하십시오 :) 그것이 잘되기를 바랍니다!
André Figueira

2

너비 요소가 고정되어 있고 배경 이미지의 너비를 알고 있다면 배경 위치를 요소 너비-이미지 너비-오른쪽에 원하는 간격으로 설정하면됩니다.

예를 들어 : 100px 너비의 요소와 300px 너비의 이미지로 오른쪽에 10px의 간격을 얻으려면 100-300-10 = -210px로 설정하십시오.

#myElement {
  background:url(my_image.jpg) no-repeat -210px top;
  width:100px;
}

그리고 요소의 왼쪽에 이미지의 가장 오른쪽 80 픽셀, 오른쪽에 20 픽셀의 간격이 있습니다.

나는 어리석은 소리를 낼 수 있지만 때로는 시간을 절약한다는 것을 알고 있습니다 ... 나는 이미지 아래의 텍스트가있는 탐색 링크를 위해 수직 방식 (맨 아래 간격)으로 많이 사용합니다.

그래도 귀하의 경우에 적용되는지 확실하지 않습니다.


2

내 문제는 창 크기를 조정할 때 오른쪽 테두리와 같은 거리를 유지하기 위해 배경 이미지가 필요했습니다. 예 : 태블릿 / 모바일 등 내 수정은 percenatge를 사용하는 것입니다.

background-position: 98% 6px;

제자리에 붙어 있습니다.


창의 크기를 정확히 알고있는 상황에서는 효과가있을 수 있지만 대부분의 경우 웹에서는이를 확신 할 수 없습니다. 지원되는 브라우저에서 모든 상황에서 작동하는 허용되는 답변을 살펴보십시오.
nickf

2

예! 배경 이미지를 왼쪽 대신에 브라우저의 오른쪽에서 0px처럼 배치하는 것이 좋습니다.

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