CSS背景画像を右からxピクセルに配置しますか?


321

答えはノーだと思いますが、背景画像をCSSで配置して、右から一定のピクセル数離れたところに配置できますか?

background-positionxとyの値を設定すると、それらはそれぞれ左と上からの固定ピクセル調整のみを与えるようです。



役に立つかもしれません:stackoverflow.com/questions/1736922/...
jedierikb

CSS3でそれを行うことができます-以下を参照してください
Druvision '28


@JoostSこの編集は本当に必須でしたか?
Thomas Ayoub

回答:


473
background-position: right 30px center;

ほとんどのブラウザで動作します。完全なリストについては、http//caniuse.com/#feat=css-background-offsetsを参照してください。

詳細:http : //www.w3.org/TR/css3-background/#the-background-position


「それが有効かどうかはわかりません」...そうではありません。問題のプロパティには、値の標準的な順序があります。
アンドリューバーバー、

14
CSS Backgrounds and Borders 3に従って有効です。これはすでにCandidate Recommendation(標準で実装の準備ができています)です:w3.org/TR/css3-background/#the-background-position
Ilya Streltsyn

19
これが「正解」として選択されているはずです。MDNによれば、IE9 +と他のすべてのブラウザーでサポートされています。developer.mozilla.org/en-US/docs/Web/CSS/...
fregante

5
なぜこれが回答として選択されないのか分かりませんか?これはまさに求められていることを行います。
ChrisC 2014

これを
Chrome

93

border右から属性を長さとして使用可能

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

2
このソリューションはSafariでうまく機能しますが、Chrome、FirefoxまたはIEでは機能しません。
アンディクック

4
FFで動作します。そしてChrome。そしてIE 8と9。ただし7ではありません。便利なハック!
ndtreviv 2013

3
選択ボックスが既にボーダーとして使用されている場合は理想的ではありません。そうでない場合は、ボックスを囲む別のdivが必要になります
Miguel

background:url( '/ img.png')no-repeat right 10px center; これでうまくいく、Firefoxでチェックインした
Asad kamran 2014年

66

1つの方法がありますが、すべてのブラウザーでサポートされているわけではありません(こちらのカバレッジを参照

element {
  background-position : calc(100% - 10px) 0;
}

最新のすべてのブラウザで動作しますが、IE9がクラッシュする可能性があります。= <IE8も対象外です。


5
これは、多くの設計上の問題に対する本当に強力なソリューションです。注意してください!
deweydb 2013

3
したがって、これは実際には最新のChromeでも機能しないようです。私が要素を検査すると、実際に言うbackground-position-x: calc(90%);-つまり、100%から10%を減算しただけ
Simon_Weaver

@ValentinEも私にとって有効です:-)私は間違いなくこれが90%に変換されるのを見ました-そして私はこれをクロムから直接カットアンドペーストしました。クロムの開発ビルドに奇妙なバグがなかった場合を除いて、理由は
わかり

3
@ValentinEああ!私はそれを考え出した。私はCSSにLESSを使用していますが、優先順位が高い独自の「計算」関数があります。この問題が発生している他の人については、stackoverflow.com
questions / 17904088 /…を

ここでcaniuse.com/#feat=calcを参照すると、実際にIE9がクラッシュする可能性があります。これに依存している場合は、必ずIE9でテストすることを忘れないでください
Simon_Weaver

33

私の知る限り、もちろん、CSS仕様は、CSS式以外では、あなたが求めていることを正確に規定していません。式やJavascriptを使用したくないという想定を元に、3つのハックな解決策を見つけました。

  • 背景画像がコンテナのサイズ(少なくとも幅)と一致していることを確認し、幅のみが均一化されているbackground-repeat: repeatrepeat-xどうかを確認してください。次に、何かをx右からピクセルで表示するのはと同じくらい簡単background-position: -5px 0pxです。
  • パーセンテージを使用するbackground-positionと、ここで説明するよりもよくわかる特別な動作が見られます。試してみます。基本的にbackground-position: 90% 50%は、背景画像の右端がコンテナの右端から10%離れるようにします。
  • 画像を含むdivを作成します。含まれている要素の位置がposition: relativeまだ設定されていない場合は、明示的に設定します。画像コンテナをに設定しposition: absolute; right: 10px; top: 10px;、明らかに最後の2つを適切に調整します。画像のdivコンテナを含む要素に配置します。

1
ヒントをありがとう!はい、%値で設定しましたが、私の場合はうまく機能しません。このbg画像が表示される場所は、サイズが大きく変化する要素上にあるため、当然、右側のオフセット量も大きく変化し、整合性が失われます。とにかく、私は確かにいくつかのハックな回避策を採用しますが、奇妙なことに、これは仕様の一部ではありません。単純そうに見えますが、上または左から実行できます。下または右から始めてみませんか?とにかく、多分css4で、私が死んだ頃にすべての主要なブラウザーで適切にサポートされるでしょう;)
Doug

1
css:afterセレクターを使用して、別の要素の右側に背景画像を含む要素を追加することもできます。そこから、希望する場所に配置するために負のマージンを与えることができます。繰り返さない画像を右側に追加したいだけなら、これはかなりクリーンなソリューションです。
Nico

23

これを試して:

#myelement {
  background-position: 100% 50%;
  margin-right: 5px;
}

上記のコードでは、要素全体(背景画像のみではない)が右から5px移動することに注意してください。これはあなたのケースでは大丈夫かもしれません。



8

右マージンとして機能する右側の透明ピクセルによる画像の回避策。

同じ画像の回避策は、PNGまたはGIF画像(透明度をサポートする画像ファイル形式)を作成することです。この画像の右側の透明部分は、右マージンを指定するピクセル数(例:5px、10pxなど)

これは、固定幅およびパーセンテージの幅全体で一貫して適切に機能します。ヘッダーの右側にプラス/マイナスまたは上/下の矢印の画像が表示されているアコーディオンヘッダーの実用的なソリューションです。

欠点:残念ながら、コンテナの背景部分とCSS背景画像の背景色が同じフラットカラー(グラデーション/ビネットなし)、ほとんどが白/黒などでない限り、JPGを使用できません。


私にとって、これはすべてのブラウザで機能する唯一のソリューションでした。
Matthieu Napoli、2015年

7

最近のブラウザの最近のトピックで偶然このトピックに遭遇した場合、疑似クラス:afterを使用して、バックグラウンドで実質的に何でも行うことができます。

.container:after{
    content:"";
    position:absolute;
    right:20px;
    background:url(http://lorempixel.com/400/200) no-repeat right bottom;
}

このcssは、「。container」要素の右下隅に背景を配置し、右側に20ピクセルのスペースを置きます。

このフィドルの例を参照してくださいhttp://jsfiddle.net/h6K9z/226/


私はあなたがどこに行くのが好きですが、それは実際にはクラスというよりも擬似要素です。ただ、明確化の目的のために
vmex151

正解ですが、<IE 8
Miguel

1
@Miguelもうそこで作業する必要はありません;-) IE 8より古いバージョンをまだ使用している人のために、デザインをできるだけ醜く見せてください!(..ウェブサイトがまだアクセス可能である限り..)
James Cazzetta '17年

5

最も適切な答えは、バックグラウンドポジションのための新たな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+ */

-webkit-calcは、反省なしでSafariをクラッシュさせます。OSX 10.8.5 / Safari 6.0.5
SquareCat

4

画像にピクセルのパディングを挿入するだけです-photohopで画像のキャンバスサイズに10pxまたはそれ以上のものを追加し、CSSで右に揃えます。


4

私は同様のタスクを実行して、常にテーブルヘッダーの右側にドロップダウン矢印を表示しようとしましたが、これはChromeおよびFirefoxで機能しているように見えましたが、Safariから無効なプロパティであることが通知されました。

background: url(http://goo.gl/P93P5Q) center right 10px no-repeat;

インスペクターで少しいじった後、IE8 +、Chrome、Firefox、Safariで動作するこのクロスブラウザーソリューションとレスポンシブデザインを思いつきました。

background: url(http://goo.gl/P93P5Q) no-repeat 95% center;

これは、それがどのように見え、機能するかを示すコードペンです。CodepenはSCSSで書かれている- http://cdpn.io/xqGbk


%を設定すると、コンテナーの長さに応じて整列することにも注意してください。コンテナーが大きい場合は、面倒になる可能性があります
Miguel

4

x軸のみを指定する場合は、次の操作を実行できます。

background-position-x: right 100px;

これはChrome 81.0.4044.138では機能しません。無効なプロパティ値と言っています。
Xandor

私はそれを動作させることができました:background-position: right -100px center;あなたがy-positionそれを省略すると、それはピクセルが何のためにあると考えるので正しく動作しないことに注意してください。
Xandor

2

私が言及していない別の解決策は、疑似要素を使用することです。この解決策は、CSS 2.1準拠のブラウザー(≥IE8、≥Safari 2、...)で動作し、応答性も高いと思います。

element::after
{
content:' ';
position:relative;
display:block;
width:100%;
height:100%;
bottom:0;
right:-5px; /* 10 px from the right of element inner-margin (padding) see example */
background:url() right center no-repeat;
}

:要素。サイズが100pxの正方形(境界線を考慮しない)には10pxのパディングがあり、背景画像は右側のパディングの内側に表示されます。これは、疑似要素が80pxサイズの正方形であることを意味します。要素の右の境界線にright:-10px;を付けたいと思います。。background-imageを右ボーダーから5px離したい場合は、要素の右ボーダーから5px離れた擬似要素をright:-5pxで固定する必要があります。...ここでテストしてください:http : //jsfiddle.net/yHucT/


1

コンテナの高さが固定されている場合: Tweekが正しく収まるまでのパーセンテージ(背景位置)。

コンテナーに動的な高さがある 場合背景とコンテナーの間にパディングが必要な場合(カスタムスタイル入力、選択時など)、パディングを画像に追加し、背景の位置を右または下に設定します。

選択ボックスの背景を、選択範囲の右から5ピクセルに収まるようにしようとしているときに、この質問に遭遇しました。私の場合、私の背景は、基本的なドロップダウンアイコンに代わる下矢印です。私の場合、背景のパディングは常に同じ(右側から5〜10ピクセル)であるため、実際の背景画像に簡単に変更できます(サイズが右側で5〜10ピクセル広くなります)。

お役に立てれば!


1

エディタで背景画像を右側からxピクセルに配置できます。

background: url(images_url) no-repeat right top;

背景画像は右上に配置されますが、右からxピクセルのように見えます。


それを後方に..水平、垂直
Ray

1

左からパーセンテージを微調整することは、私の好みでは少しもろいです。このようなものが必要な場合は、ラッパー要素にコンテナーのスタイルを追加し、内部要素に背景を適用する傾向がありますbackground-position: right bottom

<style>
    .wrapper {
        background-color: #333;
        border: solid 3px #222;
        padding: 20px;
    }
    .bg-img {
        background-image: url(path/to/img.png);
        background-position: right bottom;
        background-repeat: no-repeat;
    }
    .content-breakout {
        margin: -20px
    }
</style>

<div class="wrapper">
    <div class="bg-img">
        <div class="content-breakout"></div>
    </div>
</div>

この.content-breakoutクラスはオプションであり、必要に応じてコンテンツをパディングに組み込むことができます(負のマージン値は、ラッパーパディングの対応する値と一致する必要があります)。これは少し冗長ですが、幅と高さに比べて画像の相対的な位置を気にする必要がなく、確実に機能します。


1

この質問が出されて以来、それは長引いていましたが、私はこの問題に遭遇しただけで、次のようにしてそれを取得しました:

background-position:95% 50%;

これは、右側からの正確なピクセルが必要ではないが、より流動的なレイアウトである限り、私にとって非常にうまく機能しました。
ジェフS.

0

負の値の解決策。右のパディングを調整して画像を移動します。

<div style='overflow:hidden;'>

    <div style='width:100% background:url(images.jpg) top right; padding-right:50px;'>

    </div>

</div>

0

これはChrome 27で機能しますが、それが有効かどうか、または他のブラウザが何をするかはわかりません。びっくりしました。

background: url(../img/icon_file_upload.png) top+3px right+10px no-repeat;

1
これは有効ではありません。Chromeはあなたに親切でした。
RozzA 2013年

0

すべての実際のブラウザ(およびIE9 +)で動作します。

background-position: right 10px top 10px;

私はそれをRTL WordPressテーマに使用します。例を参照してください:一時的なWebサイトまたは実際のWebサイトは間もなく稼働します。大きなDIVの右隅にあるアイコンを見てください。


0

すべての背景に適しています:url( '../ images / bg-menu-dropdown-top.png')left 20px top no-repeat!important;

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