Dalam artikel ini, http://css-tricks.com/css-sprites/ , ia berbicara tentang bagaimana saya bisa memotong gambar yang lebih kecil dari 1 gambar yang lebih besar. Bisakah Anda memberi tahu saya jika mungkin / bagaimana saya bisa memotong gambar yang lebih kecil dan kemudian skala wilayah yang dipotong sebelum saya meletakkannya?
Ini adalah contoh dari artikel itu:
A
{
background-image: url(http://www.jaredhirsch.com/coolrunnings/public_images/3deb155981/spriteme1.png);
background-position: -10px -56px;
}
Saya ingin tahu bagaimana saya bisa skala gambar itu setelah saya memotongnya dari spriteme1.png
Berikut ini URL contohnya: http://css-tricks.com/examples/CSS-Sprites/Example1After/
Jadi saya ingin tahu apakah saya dapat membuat ikon di sebelah Item1,2,3,4 lebih kecil?
css
css-sprites
michael
sumber
sumber
Jawaban:
Anda dapat menggunakan ukuran latar belakang , karena didukung oleh sebagian besar browser (tetapi tidak semua http://caniuse.com/#search=background-size )
Atau
Anda dapat menggunakan kombinasi zoom untuk webkit / ie dan mentransformasikan: skala untuk Firefox (-moz-) dan Opera (-o-) untuk desktop & seluler lintas-peramban
sumber
Saat Anda menggunakan sprite, Anda terbatas pada dimensi gambar di sprite. The
background-size
properti CSS, disebutkan oleh Stephen, tidak didukung secara luas belum dan mungkin menyebabkan masalah dengan browser seperti IE8 dan di bawah - dan diberikan pangsa pasar mereka, ini bukan pilihan yang layak.Cara lain untuk memecahkan masalah adalah dengan menggunakan dua elemen dan skala sprite dengan menggunakannya dengan
img
tag, seperti ini:Dengan cara ini, elemen luar (
div.sprite-image
) memotong gambar 20x20px dariimg
tag, yang bertindak seperti skalabackground-image
.sumber
src
menggunakan css.<img>
seharusnya hanya digunakan jika itu adalah bagian dari konten. untuk tujuan desain, gambar latar belakang adalah suatu keharusan.Coba ini: Stretchy Sprite - Lintas-browser, pengubahan ukuran / peregangan gambar sprite CSS responsif
Metode ini skala sprite 'responsif' sehingga lebar / tinggi menyesuaikan sesuai dengan ukuran jendela browser Anda. Tidak digunakan
background-size
karena dukungan untuk ini di browser lama tidak ada.CSS
HTML
sumber
transform: scale();
akan membuat elemen asli mempertahankan ukurannya.Saya menemukan opsi terbaik adalah menggunakan
vw
. Ini bekerja seperti pesona:https://jsfiddle.net/tomekmularczyk/6ebv9Lxw/1/
sumber
Inilah yang saya lakukan untuk melakukan ini. Perlu diingat itu tidak akan berfungsi pada IE8 dan di bawah ini.
Lebar gambar latar belakang akan turun sebagai induk
#element
skala turun. Anda dapat melakukan hal yang sama dengan tingginya, juga, jika Anda mengonversiheight
ke persentase. Satu-satunya hal yang sulit adalah mencari tahu persentasebackground-position
.Persentase pertama adalah lebar area yang ditargetkan dari sprite ketika pada lebar normal dibagi dengan total lebar sprite, dan dikalikan dengan 100.
Persentase kedua adalah ketinggian area yang ditargetkan dari sprite sebelum diskalakan dibagi dengan tinggi total sprite, dan dikalikan dengan 100.
Kata-kata pada kedua persamaan itu sedikit ceroboh, jadi beri tahu saya jika Anda membutuhkan saya untuk menjelaskannya dengan lebih baik.
sumber
Ini sepertinya bekerja untuk saya.
Jika sprite berada dalam kisi, atur
background-size
jumlah sprite 100% dan 100% jumlah sprite. Kemudian gunakan dibackground-position -<x*100>% -<y*100>%
mana x dan y adalah sprite berbasis nolDengan kata lain, jika Anda menginginkan sprite ke-3 dari kiri dan ke-2, maka 2 over dan 1 down
Sebagai contoh di sini adalah sprite sheet 4x2 sprite
Dan ini sebuah contoh
Jika ukuran sprite berbeda, Anda perlu mengatur
background-size
untuk setiap sprite ke persen sehingga lebar sprite menjadi 100%Dengan kata lain jika gambar memiliki lebar 640px dan sprite di dalam gambar itu adalah lebar 45px maka untuk mendapatkan 45px menjadi 640px
Maka Anda perlu mengatur offset. Komplikasi dari offset adalah bahwa 0% lurus kiri dan 100% lurus kanan.
Sebagai seorang programmer grafis, saya berharap offset 100% untuk memindahkan latar belakang 100% melintasi elemen, dengan kata lain sepenuhnya dari sisi kanan tetapi bukan itu yang berarti 100% ketika digunakan dengan
backgrouhnd-position
.background-position: 100%;
berarti selaras kanan. Jadi, forumla untuk memperhitungkannya setelah penskalaan adalahAsumsikan offsetnya adalah 31px
Berikut adalah gambar 640x480 dengan 2 sprite.
Mengikuti matematika di atas untuk sprite 1
sumber
Posting lama, tapi inilah yang saya lakukan menggunakan
background-size:cover;
(hat tip ke @Ceylan Pamir) ...CONTOH PENGGUNAAN
sirip lingkaran horizontal (arahkan kursor pada gambar sisi depan, membalik ke belakang dengan gambar berbeda).
CONTOH SPRITE
480px x 240px
CONTOH FINAL SIZE
Gambar tunggal @ 120px x 120px
KODE GENERIK
.front {width:120px; height:120px; background:url(http://www.example.com/images/image_240x240.png); background-size:cover; background-repeat:no-repeat; background-position:0px 0px;}
.back {width:120px; height:120px; background:url(http://www.example.com/images/image_240x240.png); background-size:cover; background-repeat:no-repeat; background-position:-120px 0px;}
ABBREVIATED CASE FIDDLE
http://jsfiddle.net/zuhloobie/133esq63/2/
sumber
coba gunakan ukuran latar belakang: http://webdesign.about.com/od/styleproperties/p/blspbgsize.htm
Adakah sesuatu yang menghentikan Anda dari rendering gambar pada ukuran yang Anda inginkan di tempat pertama?
sumber
background-size
adalah CSS 3 dan belum didukung secara luas.Butuh beberapa saat untuk membuat solusi untuk masalah ini yang saya senangi:
Masalah:
Sprite ikon SVG - katakan 80px x 3200px
Kami ingin mengatur skala setiap penggunaannya dalam pemilih konten (: sebelum /: setelah) di berbagai tempat di berbagai ukuran tanpa mendefinisikan ulang co-ords dari setiap sprite berdasarkan pada ukuran yang digunakan.
Jadi solusi ini memungkinkan Anda untuk menggunakan co-ords sprite yang sama dalam
<button>
waktu<menuitem>
sementara masih meningkatkannya.Dengan menggunakan persentase (ke 2 tempat desimal) di posisi latar belakang daripada ukuran latar belakang seperti yang disarankan oleh orang lain di sini, Anda dapat mengatur deklarasi ikon yang sama untuk ukuran apa pun, tanpa harus mendeklarasikan ulang.
Persentase posisi-y adalah tinggi sprite asli / tinggi ikon sebagai% - dalam kasus kami di sini 80px * 100 / 3200px == setiap sprite diwakili oleh posisi-y 2.5%.
Jika Anda memiliki status hover / mouseover, Anda dapat menggandakan lebar sprite dan menentukan dalam koordinat posisi-x.
Kerugian dari pendekatan ini adalah bahwa menambahkan lebih banyak ikon di kemudian hari akan mengubah tinggi sprite dan% y-posisi, tetapi jika Anda tidak melakukan itu maka koordinat sprite Anda akan memerlukan perubahan untuk setiap resolusi skala yang Anda butuhkan.
sumber
Yah saya pikir menemukan solusi yang lebih sederhana untuk penskalaan gambar: contoh - katakanlah ada gambar dengan 3 sprite berukuran sama yang ingin Anda gunakan, gunakan CSS untuk skala gambar
dan kemudian tentukan tinggi dan lebar khusus yang perlu diterapkan ke elemen html Anda misalnya:
Kode sampel akan terlihat seperti ini:
im cukup baru untuk css, dan styling bukan area terbaik saya ini bisa menjadi cara yang salah untuk melakukannya .. tapi itu bekerja untuk saya di Firefox / Chrome / Explorer 10, harap itu bekerja di versi yang lebih lama juga ..
sumber
Gunakan
transform: scale(...);
dan tambahkan pencocokanmargin: -...px
untuk mengkompensasi ruang kosong dari penskalaan. (Anda dapat menggunakan* {outline: 1px solid}
untuk melihat batas elemen).sumber
2018 di sini. Gunakan ukuran latar belakang dengan persentase.
LEMBAR:
Ini mengasumsikan satu baris sprite. Lebar lembar Anda harus berupa angka yang dapat habis dibagi 100+ lebar satu sprite . Jika Anda memiliki 30 sprite yang berukuran 108x108 px, maka tambahkan ruang kosong tambahan di ujungnya untuk membuat lebar akhir 5508px (50 * 108 + 108).
CSS:
HTML:
sumber
Gunakan
transform: scale(0.8);
dengan nilai yang Anda butuhkan, bukan 0,8sumber
Atur lebar dan tinggi ke elemen pembungkus gambar sprite. Gunakan css ini.
sumber
Mudah ... Menggunakan dua salinan gambar yang sama dengan skala berbeda pada lembar sprite. Atur Coords dan ukuran pada logika aplikasi.
sumber