Posisikan gambar latar belakang CSS x piksel dari kanan?

321

Saya pikir jawabannya tidak, tetapi bisakah Anda memposisikan gambar latar belakang dengan CSS, sehingga itu adalah jumlah piksel yang tetap jauh dari kanan?

Jika saya mengatur background-positionnilai x dan y, tampaknya mereka hanya memberikan penyesuaian piksel tetap dari kiri dan atas masing-masing.

Doug
sumber
mungkin bisa membantu: stackoverflow.com/questions/1736922/…
jedierikb
Anda dapat melakukannya dengan CSS3 - lihat di bawah
Druvision
Kemungkinan duplikat stackoverflow.com/questions/5142405/…
Volker E.
@ JoostS, apakah pengeditan ini benar-benar wajib?
Thomas Ayoub

Jawaban:

473
background-position: right 30px center;

Ini berfungsi di sebagian besar browser. Lihat: http://caniuse.com/#feat=css-background-offsets untuk daftar lengkap.

Informasi lebih lanjut: http://www.w3.org/TR/css3-background/#the-background-position

Steven Mouret
sumber
"Aku tidak tahu apakah itu sah" ... tidak. Properti yang dimaksud memiliki urutan standar untuk nilai-nilai tersebut.
Andrew Barber
14
Ini valid menurut CSS Backgrounds dan Borders 3, yang sudah menjadi Calon Rekomendasi (standar siap untuk implementasi): w3.org/TR/css3-background/#the-background-position
Ilya Streltsyn
19
Ini harus dipilih sebagai "Jawaban yang benar". Menurut MDN itu didukung di IE9 + dan semua browser lain, yang hebat! developer.mozilla.org/en-US/docs/Web/CSS/…
fregante
5
Tidak yakin mengapa ini tidak dipilih sebagai jawabannya? Ini melakukan persis apa yang diminta.
ChrisC
mencoba ini di alat dev chrome, dan sepertinya tidak berfungsi (belum benar-benar diselidiki secara menyeluruh ...)
1nfiniti
93

Dimungkinkan untuk menggunakan atribut bordersepanjang dari kanan

background: url('/img.png') no-repeat right center;
border-right: 10px solid transparent;
turda
sumber
2
Solusi ini berfungsi baik di Safari, tetapi tidak berfungsi Chrome, Firefox atau IE.
Andy Cook
4
Bekerja di FF untuk saya. Dan Chrome. Dan IE 8 dan 9. Bukan 7 sekalipun. Retas yang berguna!
ndtreviv
3
tidak ideal bila kotak pilih Anda sudah sebagai perbatasan, jika tidak akan memerlukan div lain di sekitar kotak
Miguel
background: url ('/ img.png') no-repeat center kanan 10px; ini akan berhasil, saya check in firefox
Asad kamran
66

Ada satu cara tetapi tidak didukung di setiap browser (lihat cakupan di sini )

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

Ini bekerja di setiap browser modern , tetapi ada kemungkinan bahwa IE9 mogok . Juga tidak ada cakupan untuk = <IE8.

Valentin E
sumber
5
Ini adalah solusi yang sangat kuat untuk banyak masalah desain. menyimak!
deweydb
3
jadi ini sepertinya tidak berfungsi bahkan di Chrome terbaru. Ketika saya memeriksa elemen itu benar-benar mengatakan background-position-x: calc(90%);- yaitu hanya mengurangi 10% dari 100%
Simon_Weaver
@ValentinE yang bekerja untuk saya juga :-) Saya pasti melihat ini dikonversi menjadi 90% - dan saya telah memotong dan menempelkan ini langsung dari chrome. kecuali ada bug aneh dalam pengembangan dev chrome. Saya tidak yakin mengapa
Simon_Weaver
3
@ValentinE ya! Saya menemukan jawabannya. Saya menggunakan KURANG untuk css dan memiliki fungsi 'calc' sendiri yang diutamakan. Untuk orang lain yang mengalami masalah ini, lihat: stackoverflow.com/questions/17904088/...
Simon_Weaver
saya lihat di sini caniuse.com/#feat=calc bahwa ini benar-benar dapat menyebabkan crash IE9 - jadi jika Anda bergantung padanya Anda pasti ingin mengingat untuk menguji di IE9
Simon_Weaver
33

Sejauh yang saya tahu, spesifikasi CSS tidak memberikan apa yang Anda minta, di luar ekspresi CSS, tentu saja. Menolak asumsi bahwa Anda tidak ingin menggunakan ekspresi atau Javascript, saya melihat tiga solusi peretasan:

  • Pastikan gambar latar belakang Anda cocok dengan ukuran wadah (setidaknya lebarnya) dan atur background-repeat: repeatatau repeat-xjika hanya lebarnya yang disamakan. Kemudian, memiliki sesuatu yang muncul xpiksel dari kanan semudah background-position: -5px 0px.
  • Menggunakan persentase untuk background-positionmenunjukkan perilaku khusus yang lebih baik dilihat daripada yang dijelaskan di sini. Cobalah. Pada dasarnya,background-position: 90% 50% akan membuat tepi kanan garis gambar latar naik 10% dari tepi kanan wadah.
  • Buat div yang berisi gambar. Secara eksplisit mengatur posisi elemen yang mengandung position: relativejika belum diatur. Atur wadah gambar ke position: absolute; right: 10px; top: 10px;, jelas menyesuaikan dua final sesuai keinginan Anda. Tempatkan wadah gambar div ke dalam elemen yang mengandung.
Steven
sumber
1
terima kasih untuk tipsnya! ya, saya memilikinya sekarang menetapkan nilai w /%, tetapi tidak bekerja dengan baik dalam kasus saya. tempat gambar bg ini akan muncul adalah pada elemen yang bervariasi ukurannya, jadi tentu saja jumlah offset ke kanan juga bervariasi banyak sehingga membunuh konsistensi. Lagi pula, saya akan pergi dengan beberapa solusi hacky saya yakin, tapi aneh bagi saya ini bukan bagian dari spesifikasi. tampaknya cukup sederhana, Anda dapat melakukannya dari atas atau kiri, mengapa tidak mulai dari bawah atau kanan? Lagi pula, mungkin dalam CSS4 yang akan didukung dengan benar di semua browser utama sekitar waktu aku mati;)
Doug
1
Ingatlah bahwa Anda juga dapat menggunakan css: after selector untuk menambahkan elemen dengan gambar latar belakang di sebelah kanan elemen lain. Dari sana, Anda bisa memberikan margin negatif untuk menempatkannya di tempat yang Anda inginkan. Ini solusi yang cukup bersih jika Anda hanya ingin menambahkan gambar yang tidak berulang ke kanan.
Nico
23

Coba ini:

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

Perhatikan bahwa kode di atas akan memindahkan seluruh elemen (bukan hanya gambar latar belakang) 5px dari kanan. Ini mungkin ok untuk kasus Anda.

ahwebd
sumber
21

Anda dapat melakukannya di CSS3:

background-position: right 20px bottom 20px;

Ini bekerja di Firefox, Chrome, IE9 +

Sumber: MDN

Adrian Macneil
sumber
8

Penanganan masalah gambar dengan piksel transparan di sebelah kanan berfungsi sebagai margin kanan.

Solusi gambar untuk hal yang sama adalah membuat gambar PNG atau GIF (format file gambar yang mendukung transparansi) yang memiliki bagian transparan di sebelah kanan gambar persis sama dengan jumlah piksel yang ingin Anda berikan margin kanan ( mis: 5px, 10px, dll.)

Ini berfungsi dengan baik secara konsisten di seluruh lebar tetap serta lebar dalam persentase. Praktis solusi yang baik untuk header akordeon yang memiliki gambar panah plus / minus atau atas / bawah di kanan header!

Kelemahan: Sayangnya, Anda tidak dapat menggunakan JPG kecuali bagian latar belakang wadah dan warna latar belakang gambar latar belakang CSS memiliki warna datar yang sama (tanpa gradien / sketsa), kebanyakan putih / hitam dll.

Vivek Mhatre
sumber
Bagi saya ini adalah satu-satunya solusi yang berfungsi pada semua browser.
Matthieu Napoli
7

Jika Anda menemukan topik ini di browser modern sekarang ini, Anda dapat menggunakan pseudo-class: setelah itu melakukan apa saja yang praktis dengan latar belakang.

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

css ini akan menempatkan latar belakang ke sudut kanan bawah elemen ".container" dengan ruang 20px di sisi kanan.

Lihat biola ini misalnya http://jsfiddle.net/h6K9z/226/

Mroz
sumber
Saya suka ke mana Anda pergi tetapi: setelah benar-benar lebih merupakan elemen psuedo daripada kelas. Hanya untuk tujuan klarifikasi
vmex151
Benar tetapi tidak bekerja dengan browser lama seperti <IE 8
Miguel
1
@Miguel Tidak perlu lagi bekerja di sana ;-) Biarkan desainnya terlihat seburuk mungkin bagi mereka yang masih menggunakan versi yang lebih lama dari IE 8! (..selama situs web masih dapat diakses ..)
James Cazzetta
5

Jawaban yang paling tepat adalah sintaks empat nilai baru untuk posisi latar belakang, tetapi sampai semua browser mendukungnya, pendekatan terbaik Anda adalah kombinasi dari respons sebelumnya dalam urutan berikut:

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+ */
stedman
sumber
-webkit-calc menabrak Safari saya dengan nol penyesalan. OSX 10.8.5 / Safari 6.0.5
SquareCat
4

Masukkan saja bantalan piksel ke dalam gambar - tambahkan 10px atau apa pun ke ukuran kanvas gambar di photoshop dan selaraskan langsung di CSS.

RMM
sumber
4

Saya sedang mencoba melakukan tugas yang sama untuk mendapatkan panah dropdown selalu di sisi kanan header tabel dan muncul dengan ini yang tampaknya bekerja di Chrome dan Firefox, tetapi safari mengatakan kepada saya itu adalah properti yang tidak valid.

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

Setelah melakukan sedikit main-main di inspektur, saya datang dengan solusi lintas-browser yang bekerja di IE8 +, Chrome, Firefox, dan Safari, serta desain responsif.

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

Berikut ini adalah codepen tentang tampilannya dan cara kerjanya. Codepen ditulis dengan SCSS - http://cdpn.io/xqGbk

Davidvidman
sumber
Saya mengingatkan Anda bahwa pengaturan% juga akan membuatnya sejajar tergantung pada panjang wadah, yang bisa berantakan jika Anda memiliki wadah yang lebih besar
Miguel
4

Jika Anda hanya ingin menentukan sumbu x, Anda dapat melakukan hal berikut:

background-position-x: right 100px;
joshudev
sumber
Ini tidak berfungsi di Chrome 81.0.4044.138. Dikatakan nilai properti tidak valid.
Xandor
Saya dapat membuatnya berfungsi: background-position: right -100px center;Perhatikan bahwa jika Anda menghilangkannya y-positiontidak berfungsi dengan benar karena berpikir untuk apa pikselnya.
Xandor
2

Solusi lain yang belum pernah saya sebutkan adalah menggunakan elemen pseudo dan saya yakin solusi ini akan bekerja dengan browser yang mendukung CSS 2.1 (≥ IE8, ≥ Safari 2, ...) dan juga harus responsif:

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

Contoh : Elemen mis. 100px berukuran persegi (tanpa mempertimbangkan batas) memiliki padding 10px dan gambar latar belakang harus ditampilkan di dalam padding kanan. Ini berarti elemen pseudo adalah persegi berukuran 80px. Kami ingin menempelkannya di perbatasan kanan elemen dengan kanan: -10px; . Jika kita ingin memiliki latar belakang-gambar 5px jauh dari perbatasan kanan kita perlu menempelkan elemen pseudo-5px dari perbatasan kanan elemen dengan kanan: -5px; ... Uji sendiri untuk Anda di sini: http://jsfiddle.net/yHucT/

llange
sumber
1

Jika wadah memiliki ketinggian tetap: Tweek persentasenya (posisi latar belakang) sampai pas dengan benar.

Jika wadah memiliki ketinggian dinamis: Jika Anda ingin bantalan antara latar belakang dan wadah Anda (seperti saat input styling khusus, pilih), tambahkan padding Anda ke gambar Anda dan atur posisi latar belakang ke kanan atau bawah.

Saya tersandung pada pertanyaan ini ketika saya mencoba untuk mendapatkan latar belakang untuk kotak pilih agar sesuai katakan 5 px dari kanan pilih saya. Dalam kasus saya, latar belakang saya adalah panah bawah yang akan menggantikan ikon drop-down dasar. Dalam kasus saya, padding akan selalu tetap sama (5-10 piksel dari kanan) untuk latar belakang, jadi ini adalah modifikasi yang mudah untuk membawa ke gambar latar belakang yang sebenarnya (membuat dimensinya 5-10 piksel lebih lebar di sisi kanan.

Semoga ini membantu!

Prusprus
sumber
1

Anda dapat memposisikan gambar latar belakang dalam editor menjadi x piksel dari sisi kanan.

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

Gambar latar belakang akan diposisikan di kanan atas, tetapi akan tampak x piksel dari kanan.

Andy Cook
sumber
mendapatkannya mundur .. horisontal lalu vertikal
Ray
1

Persentase Tweet dari kiri agak rapuh untuk selera saya. Ketika saya membutuhkan sesuatu seperti ini, saya cenderung menambahkan penataan wadah saya ke elemen pembungkus dan kemudian menerapkan latar belakang pada elemen dalam denganbackground-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>

The .content-breakoutkelas opsional dan akan memungkinkan konten Anda untuk makan dalam padding jika diperlukan (nilai margin yang negatif harus sesuai dengan nilai-nilai yang sesuai di padding wrapper). Ini sedikit bertele-tele, tetapi bekerja dengan andal tanpa harus khawatir tentang posisi relatif gambar dibandingkan dengan lebar dan tinggi.

Kris Young
sumber
1

Sudah lama sejak pertanyaan ini diajukan, tetapi saya hanya mengalami masalah ini dan saya mendapatkannya dengan melakukan:

background-position:95% 50%;
Broncha
sumber
Yang ini bekerja dengan baik bagi saya selama Anda tidak perlu piksel yang tepat dari kanan tetapi tata letak yang lebih lancar.
Jeff S.
0

Solusi untuk nilai negatif. Sesuaikan bantalan-kanan untuk memindahkan gambar.

<div style='overflow:hidden;'>

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

    </div>

</div>
Greg Tatum
sumber
0

Ini berfungsi di Chrome 27, saya tidak tahu apakah itu valid atau tidak atau apa yang browser lain lakukan dengannya. Saya terkejut tentang hal ini.

background: url(../img/icon_file_upload.png) top+3px right+10px no-repeat;
Akta
sumber
1
ini tidak valid, chrome hanya bersikap baik padamu.
RozzA
0

Berfungsi untuk semua browser nyata (dan untuk IE9 +):

background-position: right 10px top 10px;

Saya menggunakannya untuk tema RTL WordPress. Lihat contoh: situs web sementara atau situs web sebenarnya akan segera aktif. Lihatlah ikon di sudut kanan DIV besar.

Ronny Sherer
sumber
0

Lebih baik untuk semua latar belakang: url ('../ images / bg-menu-dropdown-top.png') meninggalkan 20px atas tanpa-ulangi! Penting;

azhar_SE_nextbridge
sumber