Dengan PNG transparan yang menampilkan bentuk sederhana dalam warna putih, apakah mungkin mengubah warna ini melalui CSS? Semacam overlay atau apa yang tidak?
Dengan PNG transparan yang menampilkan bentuk sederhana dalam warna putih, apakah mungkin mengubah warna ini melalui CSS? Semacam overlay atau apa yang tidak?
Jawaban:
Anda dapat menggunakan filter dengan -webkit-filter
dan filter
: Filter relatif baru untuk browser tetapi didukung di lebih dari 90% browser berdasarkan tabel CanIUse berikut: https://caniuse.com/#feat=css-filters
Anda dapat mengubah gambar menjadi skala abu-abu, sepia, dan banyak lagi (lihat contoh).
Jadi sekarang Anda dapat mengubah warna file PNG dengan filter.
body {
background-color:#03030a;
min-width: 800px;
min-height: 400px
}
img {
width:20%;
float:left;
margin:0;
}
/*Filter styles*/
.saturate { filter: saturate(3); }
.grayscale { filter: grayscale(100%); }
.contrast { filter: contrast(160%); }
.brightness { filter: brightness(0.25); }
.blur { filter: blur(3px); }
.invert { filter: invert(100%); }
.sepia { filter: sepia(100%); }
.huerotate { filter: hue-rotate(180deg); }
.rss.opacity { filter: opacity(50%); }
<!--- img src http://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_from_C2RMF_retouched.jpg/500px-Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_from_C2RMF_retouched.jpg -->
<img alt="Mona Lisa" src="https://www.pexels.com/photo/photo-of-a-green-leaf-2563743/?auto=compress&cs=tinysrgb&dpr=3&h=750&w=1260" title="original">
<img alt="Mona Lisa" src="https://images.pexels.com/photos/40997/mona-lisa-leonardo-da-vinci-la-gioconda-oil-painting-40997.jpeg?auto=compress&cs=tinysrgb&dpr=3&h=750&w=1260" title="saturate" class="saturate">
<img alt="Mona Lisa" src="https://images.pexels.com/photos/40997/mona-lisa-leonardo-da-vinci-la-gioconda-oil-painting-40997.jpeg?auto=compress&cs=tinysrgb&dpr=3&h=750&w=1260" title="grayscale" class="grayscale">
<img alt="Mona Lisa" src="https://images.pexels.com/photos/40997/mona-lisa-leonardo-da-vinci-la-gioconda-oil-painting-40997.jpeg?auto=compress&cs=tinysrgb&dpr=3&h=750&w=1260" title="contrast" class="contrast">
<img alt="Mona Lisa" src="https://images.pexels.com/photos/40997/mona-lisa-leonardo-da-vinci-la-gioconda-oil-painting-40997.jpeg?auto=compress&cs=tinysrgb&dpr=3&h=750&w=1260" title="brightness" class="brightness">
<img alt="Mona Lisa" src="https://images.pexels.com/photos/40997/mona-lisa-leonardo-da-vinci-la-gioconda-oil-painting-40997.jpeg?auto=compress&cs=tinysrgb&dpr=3&h=750&w=1260" title="blur" class="blur">
<img alt="Mona Lisa" src="https://images.pexels.com/photos/40997/mona-lisa-leonardo-da-vinci-la-gioconda-oil-painting-40997.jpeg?auto=compress&cs=tinysrgb&dpr=3&h=750&w=1260" title="invert" class="invert">
<img alt="Mona Lisa" src="https://images.pexels.com/photos/40997/mona-lisa-leonardo-da-vinci-la-gioconda-oil-painting-40997.jpeg?auto=compress&cs=tinysrgb&dpr=3&h=750&w=1260" title="sepia" class="sepia">
<img alt="Mona Lisa" src="https://images.pexels.com/photos/40997/mona-lisa-leonardo-da-vinci-la-gioconda-oil-painting-40997.jpeg?auto=compress&cs=tinysrgb&dpr=3&h=750&w=1260" title="huerotate" class="huerotate">
<img alt="Mona Lisa" src="https://images.pexels.com/photos/40997/mona-lisa-leonardo-da-vinci-la-gioconda-oil-painting-40997.jpeg?auto=compress&cs=tinysrgb&dpr=3&h=750&w=1260" title="opacity" class="rss opacity">
.gifcorrect{ filter: invert(28%) sepia(100%) hue-rotate(-180deg) saturate(3); }
yang berarti Anda DAPAT beralih dari hitam & transparan atau abu-abu ke warna dan bekerja bahkan pada gif animasi
Saya menemukan contoh codepen hebat ini bahwa Anda memasukkan nilai warna hex dan mengembalikan filter yang diperlukan untuk menerapkan warna ini ke png
CSS filter generator untuk mengkonversi dari warna hitam ke warna hex target
misalnya saya perlu png saya untuk memiliki warna # 1a9790 berikut
maka Anda harus menerapkan filter berikut untuk Anda png
filter: invert(48%) sepia(13%) saturate(3207%) hue-rotate(130deg) brightness(95%) contrast(80%);
filter: invert(1%) sepia(1%) saturate(1%) hue-rotate(1deg) brightness(1000%) contrast(80%);
Anda mungkin ingin melihat font Icon. http://css-tricks.com/examples/IconFont/
EDIT: Saya menggunakan Font-Awesome pada proyek terbaru saya. Anda bahkan dapat mem-bootstrapnya. Sederhananya di Anda <head>
:
<link href="//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.min.css" rel="stylesheet">
<!-- And if you want to support IE7, add this aswell -->
<link href="//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome-ie7.min.css" rel="stylesheet">
Dan kemudian lanjutkan dan tambahkan beberapa tautan ikon seperti ini:
<a class="icon-thumbs-up"></a>
Inilah lembar contekan lengkapnya
--edit--
Font-Awesome menggunakan nama kelas yang berbeda di versi baru, mungkin karena ini membuat file CSS secara drastis lebih kecil, dan untuk menghindari kelas css yang ambigu. Jadi sekarang Anda harus menggunakan:
<a class="fa fa-thumbs-up"></a>
EDIT 2:
Baru tahu github juga menggunakan font ikonnya sendiri: Octicons Gratis untuk diunduh. Mereka juga memiliki beberapa tips tentang cara membuat font ikon Anda sendiri .
Saya sudah bisa melakukan ini menggunakan filter SVG. Anda bisa menulis filter yang mengalikan warna gambar sumber dengan warna yang ingin Anda ubah. Dalam cuplikan kode di bawah ini, warna banjir adalah warna yang ingin kami ubah warna gambar menjadi (yang Merah dalam kasus ini.) FeComposite memberi tahu filter cara kami memproses warna. Rumus untuk feComposite dengan aritmatika adalah (k1 * i1 * i2 + k2 * i1 + k3 * i2 + k4) di mana i1 dan i2 adalah warna input untuk in / in2 sesuai. Jadi hanya menentukan k1 = 1 berarti hanya akan melakukan i1 * i2, yang berarti mengalikan kedua warna input secara bersamaan.
Catatan: Ini hanya berfungsi dengan HTML5 karena ini menggunakan inline SVG. Tapi saya pikir Anda mungkin dapat membuat ini berfungsi dengan browser yang lebih lama dengan meletakkan SVG di file yang terpisah. Saya belum mencoba pendekatan itu.
Berikut cuplikannya:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="60" height="90" style="float:left">
<defs>
<filter id="colorMask1">
<feFlood flood-color="#ff0000" result="flood" />
<feComposite in="SourceGraphic" in2="flood" operator="arithmetic" k1="1" k2="0" k3="0" k4="0" />
</filter>
</defs>
<image width="100%" height="100%" xlink:href="http://i.stack.imgur.com/OyP0g.jpg" filter="url(#colorMask1)" />
</svg>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="60" height="90" style="float:left">
<defs>
<filter id="colorMask2">
<feFlood flood-color="#00ff00" result="flood" />
<feComposite in="SourceGraphic" in2="flood" operator="arithmetic" k1="1" k2="0" k3="0" k4="0" />
</filter>
</defs>
<image width="100%" height="100%" xlink:href="http://i.stack.imgur.com/OyP0g.jpg" filter="url(#colorMask2)" />
</svg>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="60" height="90" style="float:left">
<defs>
<filter id="colorMask3">
<feFlood flood-color="#0000ff" result="flood" />
<feComposite in="SourceGraphic" in2="flood" operator="arithmetic" k1="1" k2="0" k3="0" k4="0" />
</filter>
</defs>
<image width="100%" height="100%" xlink:href="http://i.stack.imgur.com/OyP0g.jpg" filter="url(#colorMask3)" />
</svg>
Tag img memiliki properti latar belakang seperti yang lainnya. Jika Anda memiliki PNG putih dengan bentuk transparan, seperti stensil, maka Anda dapat melakukan ini:
<img src= 'stencil.png' style= 'background-color: red'>
Iya :)
Surfin 'Safari - Blog Archive »CSS Masks
WebKit sekarang mendukung masker alpha di CSS. Masker memungkinkan Anda untuk overlay konten kotak dengan pola yang dapat digunakan untuk merobohkan bagian-bagian dari kotak itu di tampilan akhir. Dengan kata lain, Anda dapat klip ke bentuk kompleks berdasarkan alpha dari suatu gambar.
[...]
Kami telah memperkenalkan properti baru untuk memberikan banyak kontrol kepada desainer Web atas topeng ini dan bagaimana mereka diterapkan. Properti baru dianalogikan dengan properti gambar latar dan perbatasan yang sudah ada.-webkit-mask (background) -webkit-mask-attachment (background-attachment) -webkit-mask-clip (background-clip) -webkit-mask-origin (background-origin) -webkit-mask-image (background-image) -webkit-mask-repeat (background-repeat) -webkit-mask-composite (background-composite) -webkit-mask-box-image (border-image)
Di sebagian besar browser , Anda dapat menggunakan filter:
pada <img>
elemen dan gambar latar belakang elemen lainnya
dan atur secara statis di CSS Anda, atau secara dinamis menggunakan JavaScript
Lihat demo di bawah ini.
<img>
elemenAnda bisa menerapkan teknik ini ke <img>
elemen:
#original, #changed {
width: 45%;
padding: 2.5%;
float: left;
}
#changed {
-webkit-filter : hue-rotate(180deg);
filter : hue-rotate(180deg);
}
<img id="original" src="http://i.stack.imgur.com/rfar2.jpg" />
<img id="changed" src="http://i.stack.imgur.com/rfar2.jpg" />
Anda dapat menerapkan teknik ini pada gambar latar:
#original, #changed {
background: url('http://i.stack.imgur.com/kaKzj.jpg');
background-size: cover;
width: 30%;
margin: 0 10% 0 10%;
padding-bottom: 28%;
float: left;
}
#changed {
-webkit-filter : hue-rotate(180deg);
filter : hue-rotate(180deg);
}
<div id="original"></div>
<div id="changed"></div>
Anda dapat menggunakan JavaScript untuk menetapkan filter saat runtime:
var element = document.getElementById("changed");
var filter = 'hue-rotate(120deg) saturate(2.4)';
element.style['-webkit-filter'] = filter;
element.style['filter'] = filter;
#original, #changed {
margin: 0 10%;
width: 30%;
float: left;
background: url('http://i.stack.imgur.com/856IQ.png');
background-size: cover;
padding-bottom: 25%;
}
<div id="original"></div>
<div id="changed"></div>
hue-rotate
tidak berfungsi pada warna putih.
Pikirkan saya punya solusi untuk ini yaitu a) persis apa yang Anda cari 5 tahun yang lalu, dan b) sedikit lebih sederhana daripada opsi kode lainnya di sini.
Dengan png putih apa pun (mis., Ikon putih pada latar belakang transparan), Anda dapat menambahkan pemilih :: after ke warna ulang.
.icon {
background: url(img/icon.png); /* Your icon */
position: relative; /* Allows an absolute positioned psuedo element */
}
.icon::after{
position: absolute; /* Positions psuedo element relative to .icon */
width: 100%; /* Same dimensions as .icon */
height: 100%;
content: ""; /* Allows psuedo element to show */
background: #EC008C; /* The color you want the icon to change to */
mix-blend-mode: multiply; /* Only apply color on top of white, use screen if icon is black */
}
Lihat codepen ini (menerapkan color swap on hover): http://codepen.io/chrscblls/pen/bwAXZO
Satu baris paling sederhana yang bekerja untuk saya:
filter: opacity(0.5) drop-shadow(0 0 0 blue);
Anda dapat mengatur opacity dari 0 ke 1 untuk membuat warna lebih terang atau lebih gelap.
Saya menemukan ini saat googling, saya menemukan yang terbaik bekerja untuk saya ...
HTML
<div class="img"></div>
CSS
.img {
background-color: red;
width: 60px;
height: 60px;
-webkit-mask-image: url('http://i.stack.imgur.com/gZvK4.png');
}
Saya membutuhkan warna tertentu, jadi filter tidak berfungsi untuk saya.
Sebagai gantinya, saya membuat div, mengeksploitasi beberapa gambar latar belakang CSS dan fungsi linear-gradient (yang membuat gambar itu sendiri). Jika Anda menggunakan mode campuran overlay, gambar Anda yang sebenarnya akan dicampur dengan gambar "gradien" yang dihasilkan yang mengandung warna yang Anda inginkan (di sini, # BADA55)
.colored-image {
background-image: linear-gradient(to right, #BADA55, #BADA55), url("https://i.imgur.com/lYXT8R6.png");
background-blend-mode: overlay;
background-size: contain;
width: 200px;
height: 200px;
}
<div class="colored-image"></div>
Menjawab karena saya sedang mencari solusi untuk ini.
jawaban pena di @ chrscblls berfungsi dengan baik jika Anda memiliki latar belakang putih atau hitam, tetapi pena saya tidak. Juga, gambar dihasilkan dengan ng-repeat, jadi saya tidak bisa memiliki url mereka di css saya DAN Anda tidak bisa menggunakan :: after on img tag.
Jadi, saya mencari jalan keluar dan berpikir itu mungkin membantu orang jika mereka tersandung di sini.
Jadi apa yang saya lakukan hampir sama dengan tiga perbedaan utama:
Untuk mengubahnya dari hitam menjadi putih atau putih menjadi hitam, warna latar belakang harus putih. Dari hitam ke warna, Anda dapat memilih warna apa pun. Dari putih ke warna, Anda harus memilih warna yang berlawanan dari yang Anda inginkan.
.divClass{
position: relative;
width: 100%;
height: 100%;
text-align: left;
}
.divClass:hover::after, .divClass:hover::before{
position: absolute;
width: 100%;
height: 100%;
background: #FFF;
mix-blend-mode: difference;
content: "";
}
Tidak perlu mengatur seluruh font jika Anda hanya membutuhkan satu ikon, ditambah lagi saya merasa itu lebih "bersih" sebagai elemen individu. Jadi, untuk tujuan ini, dalam HTML5 Anda dapat menempatkan SVG langsung di dalam aliran dokumen. Kemudian Anda dapat mendefinisikan kelas di stylesheet .CSS Anda dan mengakses warna latar belakangnya dengan fill
properti:
Biola yang bekerja: http://jsfiddle.net/qmsj0ez1/
Perhatikan bahwa, dalam contoh, saya telah digunakan :hover
untuk menggambarkan perilaku; jika Anda hanya ingin mengubah warna untuk keadaan "normal", Anda harus menghapus pseudoclass.
Untuk benar-benar mengubah warna, Anda bisa memasukkan transisi CSS dengan -webkit-filter di mana ketika sesuatu terjadi Anda akan memanggil -webkit-filter pilihan Anda. Sebagai contoh:
img {
-webkit-filter:grayscale(0%);
transition: -webkit-filter .3s linear;
}
img:hover
{
-webkit-filter:grayscale(75%);
}
Ketika mengubah gambar dari hitam menjadi putih, atau putih menjadi hitam, filter hue rotate tidak berfungsi, karena hitam dan putih secara teknis bukan warna. Sebaliknya, perubahan warna hitam dan putih (dari hitam ke putih atau sebaliknya) harus dilakukan dengan properti filter invert.
.img1 {
filter: invert(100%);
}
body{
background: #333 url(/images/classy_fabric.png);
width: 430px;
margin: 0 auto;
padding: 30px;
}
.preview{
background: #ccc;
width: 415px;
height: 430px;
border: solid 10px #fff;
}
input[type='radio'] {
-webkit-appearance: none;
-moz-appearance: none;
width: 25px;
height: 25px;
margin: 5px 0 5px 5px;
background-size: 225px 70px;
position: relative;
float: left;
display: inline;
top: 0;
border-radius: 3px;
z-index: 99999;
cursor: pointer;
box-shadow: 1px 1px 1px #000;
}
input[type='radio']:hover{
-webkit-filter: opacity(.4);
filter: opacity(.4);
}
.red{
background: red;
}
.red:checked{
background: linear-gradient(brown, red)
}
.green{
background: green;
}
.green:checked{
background: linear-gradient(green, lime);
}
.yellow{
background: yellow;
}
.yellow:checked{
background: linear-gradient(orange, yellow);
}
.purple{
background: purple;
}
.pink{
background: pink;
}
.purple:checked{
background: linear-gradient(purple, violet);
}
.red:checked ~ img{
-webkit-filter: opacity(.5) drop-shadow(0 0 0 red);
filter: opacity(.5) drop-shadow(0 0 0 red);
}
.green:checked ~ img{
-webkit-filter: opacity(.5) drop-shadow(0 0 0 green);
filter: opacity(.5) drop-shadow(0 0 0 green);
}
.yellow:checked ~ img{
-webkit-filter: opacity(.5) drop-shadow(0 0 0 yellow);
filter: opacity(.5) drop-shadow(0 0 0 yellow);
}
.purple:checked ~ img{
-webkit-filter: opacity(.5) drop-shadow(0 0 0 purple);
filter: opacity(.5) drop-shadow(0 0 0 purple);
}
.pink:checked ~ img{
-webkit-filter: opacity(.5) drop-shadow(0 0 0 pink);
filter: opacity(.5) drop-shadow(0 0 0 pink);
}
img{
width: 394px;
height: 375px;
position: relative;
}
.label{
width: 150px;
height: 75px;
position: absolute;
top: 170px;
margin-left: 130px;
}
::selection{
background: #000;
}
<div class="preview">
<input class='red' name='color' type='radio' />
<input class='green' name='color' type='radio' />
<input class='pink' name='color' type='radio' />
<input checked class='yellow' name='color' type='radio' />
<input class='purple' name='color' type='radio' />
<img src="https://i.stack.imgur.com/bd7VJ.png"/>
</div>
background-color
properti CSS. Anda dapat membuat bagian non-transparan yang akan diperbaiki, dan bagian transparan dari gambar yang akan diisi oleh warna apa pun yang Anda suka melalui CSS. Itukah yang ingin Anda capai?