CSSを使用して背景画像を右からオフセットする


443

要素の右側から特定のピクセル数だけ背景画像を配置する方法はありますか?

たとえば、何かをから特定の数のピクセル(たとえば、10)に配置するに、次のようにします。

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

きっと意味はないbackground-position: -10px 0;?ちょうどチェックしています:)
thirtydot '28

1
これには多くの重複があることは知っていますが、それらを見つけることができません。
ペッカ

1
左端から10ピクセル左に移動する@thirtydot。
nickf

それが利用できないというその愚かな...
フアン

@ nickf、2013年末までにほとんどのデバイスで利用できなかったことに気付きましたか?
フアン

回答:


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で確認)。それでもSafari 5.1.7は、このように指定された背景の位置をサポートしていません。
ソルストキ2014

8
私はこれを使用していますが、古いブラウザーのフォールバックのパーセンテージを使用しています。背景の位置:95%中央。background-position:中央13ピクセル右;
gregdev 2015年

1
これをサポートできないほど古いブラウザをまだ何人が使用しているのかわかりません。Safariユーザーは今より新しいバージョンを使用しているはずですが、古いAndroidデバイスの多くはまだ出回っています。caniuse.com/#feat=css-background-offsetsこれらにパーセンテージのフォールバックを使用するのは簡単です(ただし、まったく同じではありません)。
マーク

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「のbackground-position」のより包括的なサポートは、角を曲がったところです: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 2012年

2
このソリューションは、ブラウザ間で最も一貫して機能するようです。
エヴァンハース

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、2012

1
これは、現在のバージョンのChromeではまだ機能しません。Version 21.0.1180.89
andlrc 2012

3
Chrome Canary(v26)でこれがサポートされるようになりました。それがリリースチャネルに流れ込み、Safariがエンジンを更新すると、IE6-8のみがサポートされなくなります(IE9 / 10は既に新しい形式をサポートしています)。
Vlad Magdalin 2013年

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

ここで提案されているように、これは完全に機能するかなりクロスブラウザーのソリューションです。

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

質問の解決としてマークされた回答で提案されたオフセットを指定するCSS3機能は、ブラウザーではまだ十分にサポートされていないため、これを使用しました。例えば


1
その境界線を特定の色にする必要がある場合はどうなりますか?
machineaddict、2015

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 (ブラウザーサポート)を除いて、ほとんどの最新のブラウザーで動作します。そのページではIE9以上がサポート対象としてリストされていますが、私のテストはそれに同意していません。

次のように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と、それを使用できるブラウザーで上書きできるbackground-positionを使用する必要があります。例: background-position: 92% 8px; background-position: calc(100% - 12px) 8px;
Laki Politis 2015

一部のブラウザでは動作しません。right 10px center構文は、ブラウザでより多くの拡張サポートしています。
Farzad YZ 2016

これが「最新のブラウザ」で機能することを述べた最初の行を読んでください。私はそれがそれらのすべてで動作するとは言いませんでした。
Novocaine、2016

caniuseによると、calcを使用するとIE9がクラッシュします... _をaに置き換えたら-
Ruskin

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

background-positionに異なるオリジンを許可する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クーパー

3

比例要素がある場合は、次を使用できます。

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

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

この例で.validは、写真と.halfあり、標準のサイズの半分のサイズの行になります。

汚れているが、魅力として機能し、合理的に管理可能です。


1
私の場合(固定幅レイアウトを使用)、これはまさに私が必要とすることを行います。ありがとう。
Gavin

3

たとえば、これを使用してボタンに矢印やその他のアイコンを追加したい場合は、css疑似要素を使用できますか?

ボタン全体の背景画像である場合は、画像に間隔を組み込んで、

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;が、これは私にとって有用な解決策でした
Nat


2

位置として中央右を使用し、それをオフセットするために透明な境界線を追加しますか?


1
それは悪くはありませんが、コンテンツも右からシフトインされます。これはディールブレーカーである場合とそうでない場合があります。表示例は次のとおりです
nickf

それは少しの試行錯誤でバランスをとるだけのケースだと思います:)それがうまくいくことを願っています!
アンドレ・フィゲイラ

2

固定幅の要素があり、背景画像の幅がわかっている場合は、単にbackground-positionを次のように設定できます:要素の幅-画像の幅-右側に必要なギャップ。

たとえば、100px幅の要素と300px幅の画像の場合、右側に10pxのギャップを設けるには、100-300-10 = -210pxに設定します。

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

そして、要素の左側に画像の右端の80ピクセル、右側に20pxのギャップが表示されます。

私はそれが愚かに聞こえるかもしれませんが、時にはそれが時間を節約します...私は画像の下のテキストを持つナビゲーションリンクのためにそれを垂直方向に(下部にギャップ)使用します。

それがあなたのケースに当てはまるかどうかはわかりません。


2

私の問題は、ウィンドウのサイズが変更されたとき、つまりタブレット/モバイルなどの場合、背景画像が右の境界から同じ距離を保つ必要があることでした。私の修正は、次のようなパーセンテージを使用することです。

background-position: 98% 6px;

そしてそれは所定の位置にくっつきます。


これは、ウィンドウのサイズを正確に知っている状況で機能する可能性がありますが、ほとんどの場合、Web上では確信が持てません。(サポートされているブラウザで)すべての状況で機能する、受け入れられた回答を見てください。
nickf 2013年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.