CSS arka plan resmini x piksel sağdan mı konumlandırıyorsunuz?


321

Cevabın hayır olduğunu düşünüyorum, ancak CSS ile bir arka plan resmini konumlandırabilir, böylece sağdan sabit bir miktarda piksel olacak şekilde?

background-positionX ve y değerlerini ayarlarsam , sırasıyla soldan ve üstten yalnızca sabit piksel ayarlamaları yapar gibi görünüyor.




CSS3 ile yapabilirsiniz - aşağıya bakın
Druvision


@JoostS bu düzenleme gerçekten zorunlu muydu?
Thomas Ayoub

Yanıtlar:


473
background-position: right 30px center;

Çoğu tarayıcıda çalışır. Tam liste için bkz . Http://caniuse.com/#feat=css-background-offsets .

Daha fazla bilgi: http://www.w3.org/TR/css3-background/#the-background-position


"Geçerli olup olmadığını bilmiyorum" ... değil. Söz konusu mülkün değerler için standart bir sırası vardır.
Andrew Barber

14
Halihazırda Aday Öneri (uygulamaya hazır standart) olan CSS Arka Planları ve Sınırları 3'e göre geçerlidir: w3.org/TR/css3-background/#the-background-position
Ilya

19
Bu "Doğru cevap" olarak seçilmelidir. MDN'ye göre IE9 + ve diğer tüm tarayıcılarda destekleniyor, bu harika! developer.mozilla.org/tr-TR/docs/Web/CSS/…
fregante

5
Bunun neden cevap olarak seçilmediğinden emin değil misiniz? Bu tam olarak istenen şeyi yapar.
ChrisC

Bunu chrome dev araçlarında deniyor ve çalışıyor gibi görünmüyor (gerçekten iyice araştırılmamış ...)
1nfiniti

93

Özniteliği bordersağdan uzunluk olarak kullanmak mümkündür

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

2
Bu çözümler Safari'de harika çalışıyor, ancak Chrome, Firefox veya IE'de çalışmıyor.
Andy Cook

4
Benim için FF'de çalışıyor. Ve Chrome. Ve IE 8 ve 9 değil. Yararlı kesmek!
ndtreviv

3
seçim kutunuz zaten bir kenarlık olarak ideal değilse, aksi takdirde kutuyu çevreleyen başka bir div gerekir
Miguel

arka plan: url ('/ img.png') tekrarlanmayan sağ 10 piksel merkezi; Bu işe
yaradı

66

Tek yolu var, ancak her tarayıcıda desteklenmiyor ( buradaki kapsama bakın )

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

Her modern tarayıcıda çalışır , ancak IE9 çöküyor olabilir . Ayrıca = <IE8 için kapsam yok.


5
Bu, birçok tasarım problemine gerçekten güçlü bir çözümdür. dikkat etmek!
deweydb

3
yani bu en son Chrome'da bile işe yaramıyor gibi görünüyor. Elemanı incelediğimde aslında diyor background-position-x: calc(90%);- yani sadece% 100'den% 10 çıkarıldı
Simon_Weaver

Benim için de çalışan @ValentinE :-) Bunu kesinlikle% 90'a dönüştürdüğümü gördüm - ve bunu doğrudan kromdan kesip yapıştırdım. geliştirici bir krom yapısında garip bir hata olmadıkça neden emin değilim
Simon_Weaver

3
@ValentinE duh! Bunu anladım. Ben css için LESS kullanıyorum ve öncelikli kendi 'calc' işlevi vardır. Bu sorunu
yaşayan

i caniuse.com/#feat=calc Bu aslında IE9 çökmesine bakın - bu yüzden güveniyorsan kesinlikle IE9 test hatırlamak isteyeceksiniz
Simon_Weaver

33

Bildiğim kadarıyla, CSS spesifikasyonu elbette CSS ifadeleri dışında tam olarak sorduğunuz şeyi sağlamaz. İfadeler veya Javascript kullanmak istemediğiniz varsayımıyla çalışarak, üç hackish çözümü görüyorum:

  • Emin olun arka plan görüntüsü (en azından genişliği) kabın boyutu ve grupla eşleşen background-repeat: repeatveya repeat-xsadece genişliği eşitledi ise. Sonra, xsağdan pikseller gibi görünen bir şey olması kadar basittir background-position: -5px 0px.
  • Yüzdeler için background-positionburada açıklanandan daha iyi görülen özel davranışlar sergilenmektedir. Bi dene. Esasen, background-position: 90% 50%arka plan resminin sağ kenarını kabın sağ kenarından% 10 uzağa hizalar.
  • Görüntüyü içeren bir div oluşturun. position: relativeÖnceden ayarlanmamışsa , içeren öğenin konumunu açıkça ayarlayın. Uygun position: absolute; right: 10px; top: 10px;olarak gördüğünüz gibi son ikisini ayarlayarak görüntü kabını olarak ayarlayın. Görüntü div kabını içeren öğeye yerleştirin.

1
ipuçları için teşekkürler! Evet, şimdi w /% değerlerini ayarladım, ama benim durumumda çok iyi çalışmıyor. bu bg görüntüsünün görünmesi gereken yerler boyut olarak çok farklı olan öğeler üzerindedir, bu yüzden elbette sağdaki ofset miktarı tutarlılığı öldüren çok değişir. Neyse, eminim bazı hileli geçici çözüm ile gideceğim, ama bu garip spec parçası değil bana garip. yeterince basit görünüyor, üst veya soldan yapabilirsiniz, neden alttan veya sağdan başlamıyorsunuz? Neyse, belki de öldüğüm zaman boyunca tüm büyük tarayıcılarda düzgün bir şekilde desteklenecek css4'te;)
Doug

1
Arka plan resmi olan bir öğeyi başka bir öğenin sağına eklemek için css: after selector öğesini de kullanabileceğinizi unutmayın. Oradan, olmasını istediğiniz yere yerleştirmek için negatif marjlar verebilirsiniz. Sağa tekrar etmeyen bir resim eklemek istiyorsanız oldukça temiz bir çözümdür.
Nico

23

Bunu dene:

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

Yukarıdaki kodun tüm öğeyi (yalnızca arka plan resmini değil) sağdan 5 piksel taşıyacağını unutmayın. Bu sizin durumunuz için uygun olabilir.


21

CSS3'te yapabilirsiniz:

background-position: right 20px bottom 20px;

Firefox, Chrome, IE9 + 'da çalışır

Kaynak: MDN


8

Sağ kenar boşluğu görevi görecek şekilde sağda saydam piksellerle görüntü geçici çözümü.

Aynısı için görüntü geçici çözümü, görüntünün sağında tam olarak sağ kenar boşluğu ( örneğin: 5 piksel, 10 piksel vb.)

Bu, sabit genişliklerde ve yüzde olarak genişliklerde tutarlı bir şekilde çalışır. Başlığın sağında artı / eksi veya yukarı / aşağı ok görüntüsü olan akordeon başlıkları için pratik olarak iyi bir çözüm!

Dezavantajı: Maalesef, kabın arka plan kısmı ve CSS arka plan görüntüsünün arka plan rengi aynı düz renkte değilse (degrade / skeç olmadan), çoğunlukla beyaz / siyah vb.


Benim için tüm tarayıcılarda çalışan tek çözüm buydu.
Matthieu Napoli

7

Modern tarayıcıların bu günlerinde bu konuya rastlarsanız, sözde sınıf kullanabilirsiniz: arka planla pratik bir şey yaptıktan sonra.

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

bu css, arka tarafta ".container" öğesinin sağ alt köşesine 20 piksellik alan bırakacak.

Bu kemanı görün örneğin http://jsfiddle.net/h6K9z/226/


Nereye gittiğinizi seviyorum ama bundan sonra bir sınıftan çok psuedo unsuru var. Sadece açıklama amacıyla
vmex151

Doğru ama <IE 8
Miguel

1
@Miguel Artık orada çalışmaya gerek yok ;-) IE 8'den daha eski sürümleri kullananlar için tasarımın mümkün olduğunca çirkin görünmesine izin verin! (
..web

5

En uygun cevabı background-pozisyon için yeni dört değerli sözdizimi, ancak tüm kadar tarayıcılar bunu destekleyecek en iyi yaklaşım şu sırayla daha önceki yanıtların bir kombinasyonudur:

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'mi sıfır pişmanlık ile çöker. OSX 10.8.5 / Safari 6.0.5
SquareCat

4

Piksel dolgusunu görüntüye koymanız yeterlidir - fotoğrafın tuval boyutuna 10px veya daha fazlasını ekleyin ve CSS'de doğru hizalayın.


4

Tablo başlığının sağ tarafında her zaman bir açılır ok almak için benzer bir görev yapmaya çalışıyordum ve Chrome ve Firefox'ta işe yaramış gibi görünüyordu, ancak safari bunun geçersiz bir özellik olduğunu söylüyordu.

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

Müfettişte biraz karışıklık yaptıktan sonra, IE8 +, Chrome, Firefox ve Safari'de çalışan bu çapraz tarayıcı çözümünün yanı sıra duyarlı tasarımlar da buldum.

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

İşte nasıl göründüğüne ve çalıştığına dair bir kod kalemi. Codepen SCSS ile yazılmıştır - http://cdpn.io/xqGbk


% Ayarının aynı zamanda kabın uzunluğuna bağlı olarak hizalanacağını hatırlatırım, daha büyük kaplarınız varsa dağınık olabilir
Miguel

4

Yalnızca x eksenini belirtmek istiyorsanız, aşağıdakileri yapabilirsiniz:

background-position-x: right 100px;

Chrome 81.0.4044.138'de çalışmıyor. Geçersiz özellik değeri söylüyor.
Xandor

Ben ile çalışmak için başardı: background-position: right -100px center;Unutmayın ki y-positiondoğru işe yaramaz çünkü pikseller için ne olduğunu düşünüyor.
Xandor

2

Bahsetmediğim başka bir çözüm, sözde öğeleri kullanmaktır ve bu çözümün CSS 2.1 uyumlu herhangi bir tarayıcı (≥ IE8, ≥ Safari 2, ...) ile çalışacağına ve aynı zamanda duyarlı olması gerektiğine inanıyorum:

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;
}

Örnek : Öğe örn. kare büyüklüğünde 100 piksel (kenarlıklar dikkate alınmadan) 10 piksel dolguya sahiptir ve sağ dolgu içinde bir arka plan görüntüsü gösterilmelidir. Bu, sözde öğenin 80 piksel büyüklüğünde bir kare olduğu anlamına gelir. Bunu sağdaki öğenin sağ kenarına yapıştırmak istiyoruz : -10px; . Arka plan resmi 5px'i sağ kenarlıktan uzak tutmak istiyorsak, sözde elemanı 5px'i öğenin sağ kenarından sağa yapıştırmamız gerekir : -5px; ... Burada kendiniz için test edin: http://jsfiddle.net/yHucT/


1

Kap sabit bir yüksekliğe sahipse: Yüzdeleri (arka plan konumu) doğru şekilde oturana kadar tizleyin.

Kapsayıcı dinamik bir yüksekliğe sahipse : Arka planınız ile kabınız arasında bir dolgu istiyorsanız (özel stil girişleri seçildiğinde olduğu gibi), dolgularınızı görüntünüze ekleyin ve arka plan konumunu sağa veya alta ayarlayın.

Seçimin sağından 5 piksel sığacak bir seçim kutusunun arka planını almaya çalışırken bu soruya tökezledim. Benim durumumda, arka planım aşağı açılır temel ok simgesinin yerini alacak bir ok. Benim durumumda, dolgu arka plan için her zaman aynı kalır (sağdan 5-10 piksel), bu yüzden gerçek arka plan görüntüsüne getirmek kolay bir değişikliktir (boyutlarını sağ tarafta 5-10 piksel daha geniş hale getirir).

Bu yardımcı olur umarım!


1

Arka plan resminizi bir düzenleyicide sağ taraftan x piksel olacak şekilde konumlandırabilirsiniz.

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

Arka plan resmi sağ üstte konumlandırılacak, ancak sağdan x piksel olarak görünecektir.


geriye aldım .. yatay sonra dikey
Ray

1

Soldan ayarlanan yüzdeler benim beğenme için biraz kırılgan. Böyle bir şeye ihtiyacım olduğunda, konteyner stilimi bir sargı elemanına ekleme eğilimindeyim ve ardından arka planı iç eleman üzerinebackground-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-breakoutSınıf isteğe bağlıdır ve gerekli (negatif marj değerleri sarıcı dolgu karşılık gelen değerleri aynı olmalıdır) eğer içerik dolgu içine yemeye izin verecektir. Biraz ayrıntılı, ancak görüntünün genişliğine ve yüksekliğine göre göreli konumlandırmasından endişe etmeden güvenilir bir şekilde çalışır.


1

Bu soru sorulduğundan beri çok uzun, ama sadece bu problemle karşılaştım ve bunu yaparak anladım:

background-position:95% 50%;

Bu, sağdan tam piksellere değil, daha akıcı bir düzene ihtiyacınız olmadığı sürece benim için oldukça iyi çalıştı.
Jeff S.

0

Negatif değerler için çözüm. Görüntüyü hareket ettirmek için sağ dolguyu ayarlayın.

<div style='overflow:hidden;'>

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

    </div>

</div>

0

Bu Chrome 27'de çalışıyor, geçerli olup olmadığını veya diğer tarayıcıların onunla ne yaptığını bilmiyorum. Buna şaşırdım.

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

1
bu geçerli değil, krom size iyi davranıyordu.
RozzA

0

Tüm gerçek tarayıcılar için (ve IE9 + için) çalışır:

background-position: right 10px top 10px;

RTL WordPress temalarını kullanıyorum. Örneğe bakın: geçici web sitesi veya gerçek web sitesi yakında hazır olacaktır. Büyük DIV'lerin sağ köşelerindeki simgelere bakın.


0

Tüm arka plan için daha iyi: url ('../ images / bg-menu-dropdown-top.png') 20 piksel üst tekrarsız kaldı! Önemli;

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.