CSS를 통해 PNG 이미지의 색상을 변경 하시겠습니까?


464

흰색으로 단순한 모양을 표시하는 투명한 PNG가 주어지면 CSS를 통해 어떻게 든 색상을 변경할 수 있습니까? 어떤 종류의 오버레이 또는 그렇지 않은가?


4
background-colorCSS 속성을 설정할 수 있습니다 . 고정 된 불투명 한 부분과 CSS를 통해 원하는 색상으로 채워지는 이미지의 투명한 부분을 만들 수 있습니다. 그게 당신이 달성하고 싶은 것입니까?
jakub.g

2
@ qbk, 이것은 단지 의견이 아닌 대답의 가치가 있습니다. 그리고 당신은 기술적으로 1 초씩 나를 때렸습니다.
Kirill G

2
블렌드 모드와 함께 psuedo 요소를 사용하여 100 % 검정 또는 100 % 흰색 (배경이 투명하게 유지되는) 아이콘을 다시 칠할 수 있습니다. 내 대답을 여기에서보십시오 : stackoverflow.com/a/39796437/1472114
chrscblls

답변:


569

당신이 필터를 사용 -webkit-filter하고 filter: 필터는 상대적으로 브라우저에 새로운 있지만 다음 CanIUse 테이블에 따라 브라우저의 90 % 이상에서 지원됩니다 https://caniuse.com/#feat=css-filters

이미지를 회색조, 세피아 등으로 변경할 수 있습니다 (예 참조).

이제 필터를 사용하여 PNG 파일의 색상을 변경할 수 있습니다.

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">

출처


12
짧은 대답은 대부분의 브라우저에 대한 일반적인 해결책이 없다는 것입니다.
Trilarion

18
그러나 실제로 ero은 채도 또는 채도는 흰색 이미지에 영향을 줄까요?
Keith

6
2016 업데이트 : 이는 IE를 제외한 거의 모든 브라우저에서 작동합니다 : caniuse.com/#feat=css-filters
Stan

4
@datatype_void 때로는 시작 이미지를 직접 제어하지 않는 경우가 있습니다. 따라서 내 요점이 유효하다는 데 동의하는 것 같습니다. 흑백에서 시작하는 색상을 얻을 수 없습니다. 아, 그리고 나는이 결론에 도달하기 위해 5 분 이상 연주했습니다.
AsGoodAsItGets

5
또한 다음과 같은 작업을 수행 할 수 있음을 지정하십시오. .gifcorrect{ filter: invert(28%) sepia(100%) hue-rotate(-180deg) saturate(3); }즉, 검정 및 투명 또는 회색조에서 색상으로 이동할 수 있으며 애니메이션 GIF에서도 작동합니다.
tatsu

140

16 진수 색상 값 을 삽입 하고이 색상을 png에 적용하는 데 필요한 필터를 반환하는 이 훌륭한 코드 펜 예제를 발견했습니다.

검정색에서 대상 16 진 색상으로 변환하는 CSS 필터 생성기

예를 들어 다음과 같은 색상을 사용하려면 png가 필요했습니다. # 1a9790

그런 다음 png에 다음 필터를 적용해야합니다.

filter: invert(48%) sepia(13%) saturate(3207%) hue-rotate(130deg) brightness(95%) contrast(80%);

12
<3 <3 <3 <3 <3 <3
dwjohnston

2
이 코드를 사용하여 색상을 파란색에서 흰색으로 변경했습니다.filter: invert(1%) sepia(1%) saturate(1%) hue-rotate(1deg) brightness(1000%) contrast(80%);
Anjan Biswas

대단해 !!
Thiago Pires

2
작가는 동상이 필요하다! (의심 : 의심의 여지없이 명도 (0) 채도 (100 %) 선택적 prepend)
Jackie Degl'Innocenti

1
사람이 그것을 필요로하는 경우, 여기에이 코드의 TS 변환입니다 gist.github.com/dwjohnston/7e60bf5d4b6c071cd869f9f346241c08
dwjohnston

56

아이콘 글꼴을 살펴볼 수 있습니다. http://css-tricks.com/examples/IconFont/

편집 : 최신 프로젝트에서 Font-Awesome 을 사용하고 있습니다. 부트 스트랩 할 수도 있습니다. 간단히 이것을 당신의 <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">

그런 다음 다음과 같은 아이콘 링크를 추가하십시오.

<a class="icon-thumbs-up"></a>

여기의 전체 컨닝 페이퍼는

--편집하다--

Font-Awesome은 새 버전에서 다른 클래스 이름을 사용합니다. 아마도 CSS 파일이 크게 작아지고 모호한 CSS 클래스를 피하기 때문일 것입니다. 이제 다음을 사용해야합니다.

<a class="fa fa-thumbs-up"></a>

편집 2 :

방금 github은 자체 아이콘 글꼴 인 Octicons를 사용합니다 . 무료로 다운로드 할 수 있습니다. 또한 고유 한 아이콘 글꼴을 만드는 방법대한 팁도 있습니다 .


Font Awesome은 그 이름 그대로입니다.
HerrimanCoder

상자 밖에서 +1합니다. 요즘에는 (svg) 이미지에서 웹 폰트를 만드는 데 도움이되는 온라인 앱을 쉽게 사용할 수 있습니다.
yvan vander sanden

<a class="icon-thumbs-up"> </a>이 이전 클래스 이름이고 <a class="fa fa-thumbs-up"> </a>이 새로운 것으로 생각되지 않는 경우 CSS를 작게 만듭니다 .fa와 fa-thumbs-up 사이에 공백이 더 있고, 실수하지 않으면 CSS 파일에 최소 1 바이트를 추가합니까?
Brandito

Font Awesome은 안타깝게도 렌더 블로킹으로 인해 Google과 사용자를 불행하게 만듭니다. 먼저 CSS와 이진 글꼴 파일에서 사용하지 않는 글꼴을 제거하여 데이터를 절반으로 줄임으로써이 문제를 해결했습니다. 우리는 렌더 블로킹 (DOM 및 CSSOM 프로세스가 더 빨라지고 페이지의 요소가 더 빨리 나타남)이 아닌 간단한 스프라이트로 대체하고 현재 데이터를 6KB로 75 % 줄입니다. FA는 약 100KB입니다. CSS 마스크는 우리의 경우에 도움이 될 수 있지만 아마도 불필요 할 것입니다.
YK

25

SVG 필터를 사용 하여이 작업을 수행 할 수있었습니다. 소스 이미지의 색상과 변경하려는 색상을 곱하는 필터를 작성할 수 있습니다. 아래 코드 스 니펫에서 flood-color 는 이미지 색상을 변경하려는 색상입니다 (이 경우 빨간색). feComposite는 필터에 색상 처리 방법을 알려줍니다. 산술이있는 feComposite의 공식은 (k1 * i1 * i2 + k2 * i1 + k3 * i2 + k4)입니다. 여기서 i1 및 i2는 입력 / 입력 2의 입력 색상입니다. 따라서 k1 = 1 만 지정하면 i1 * i2 만 수행되므로 두 입력 색상을 곱하는 것입니다.

참고 : 인라인 SVG를 사용하므로 HTML5에서만 작동합니다. 그러나 SVG를 별도의 파일에 넣어 이전 브라우저 에서이 작업을 수행 할 수 있다고 생각합니다. 나는 그 접근법을 아직 시도하지 않았습니다.

스 니펫은 다음과 같습니다.

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


4
이 답변에서 강탈당하는 사람. 색조 회전이 수행 할 수있는 필터 이상의 이미지를 색상으로 표시하려는 사람은 누구나이를 수행 할 수 있습니다.
MaxPRafferty 2016 년

23

img 태그에는 다른 것과 마찬가지로 배경 속성이 있습니다. 스텐실과 같이 투명한 모양의 흰색 PNG가있는 경우 다음을 수행 할 수 있습니다.

<img src= 'stencil.png' style= 'background-color: red'>

147
투명 부분이 아닌 흰색 부분을 다르게 색칠하고 싶습니다.
웨슬리

2
내가 지금까지 찾은 최고의 솔루션. 웹 사이트에서 단색 배경색을 사용하는 경우에만 작동합니다
Jules Colle

8
@Wesley 당신은 당신이 좋아하는 이미지 편집기와 마스크를 사용하여 할 수있는 이미지를 반전해야합니다 (따라서 흰색 비트가 투명하고 나머지 흰색).
Charles Goodwin

5
@CharlesGoodwin이 기능 만 작동하면 이미지가 흰색 배경에 배치됩니다.
Alex

21

예 :)

Surfin 'Safari-블로그 아카이브»CSS 마스크

WebKit은 이제 CSS에서 알파 마스크를 지원합니다. 마스크를 사용하면 최종 디스플레이에서 상자의 일부를 녹아웃하는 데 사용할 수있는 패턴으로 상자의 내용을 오버레이 할 수 있습니다. 즉, 이미지의 알파를 기준으로 복잡한 모양으로 클립 할 수 있습니다.
[...]
웹 디자이너에게 이러한 마스크에 대한 많은 제어 및 적용 방법을 제공하기 위해 새로운 속성을 도입했습니다. 새 속성은 이미 존재하는 배경 및 테두리 이미지 속성과 유사합니다.

-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)

1
웹킷과 관련이없는 정보를 찾지 못했거나 애플 맛일 뿐이므로 (아직 접할 수있는) 표준의 일부입니까? W3는 이러한 유스 케이스에 SVG를 제안하는 것으로 보입니다. w3.org/TR/SVG/masking.html
feeela

3
슬프게도 이것은 웹킷 전용이며 블로그는 실제 예제가 아닌 합성 이미지를 사용하여 속임수입니다. 이 답변은 약간의 청어입니다.
Charles Goodwin

17

에서 대부분의 브라우저 , 당신은 필터를 사용할 수 있습니다 :

  • 모두 <img>다른 요소의 요소와 배경 이미지

  • CSS에서 정적으로 설정하거나 JavaScript를 사용하여 동적으로 설정

아래 데모를 참조하십시오.


<img> 집단

이 기술을 <img>요소에 적용 할 수 있습니다 .

#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" />

배경 이미지

이 기술을 배경 이미지에 적용 할 수 있습니다.

#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>

자바 스크립트

런타임에 JavaScript를 사용하여 필터를 설정할 수 있습니다.

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>


6
문제는 투명한 배경으로 흰색 이미지를 채색하는 것입니다. hue-rotate화이트에서는 작동하지 않습니다.
Synetech

17

a) 5 년 전에 찾고 있었던 것과 b)이 다른 코드 옵션보다 약간 더 간단한 해결책이 있다고 생각합니다.

흰색 png (예 : 투명 배경의 흰색 아이콘)를 사용하면 :: after 선택기를 추가하여 다시 채색 할 수 있습니다.

.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 */
}

이 코드 펜을 참조하십시오 (호버에 색상 스왑 적용) : http://codepen.io/chrscblls/pen/bwAXZO


이미지에서 이미지를 다시 호스팅했으며 이미지를로드하는 데 문제가있었습니다.
chrscblls

최신 버전의 Chrome에서는 (투명한) 배경이 색상으로 설정되는 것처럼 보입니다. 링크 된 예에서 마우스를 가져 가면 불투명 한 분홍색 사각형이 나타납니다 ... Firefox에서 잘 작동합니다.
logidelic

1
@chrscblls 연결이 끊어졌습니다.
스티븐 루

15

나를 위해 일한 가장 간단한 한 줄 :

filter: opacity(0.5) drop-shadow(0 0 0 blue);

0에서 1까지 불투명도를 조정하여 색상을 밝거나 어둡게 만들 수 있습니다.


좋은. 이것은 여기서 다른 솔루션의 모든 제한을 피합니다.
cdonner

3
더 강해지도록 그림자를 2-3 번 반복하십시오
djdance

1
GENIUS SOLUTION은 CSS에서 약간 혼란스러워 보이지만 의견이 있으면 완벽하게 이해할 수 있습니다. 감사!
Richard KeMiKaL GeNeRaL Denton

정확한 색상을 얻기 위해 작동하지는 않습니다. 항상 원래 색상과 새로운 색상을 혼합 한 것입니다.
스위스

이 방법은 이미지를 약간 왜곡 시키며 그림자 효과를 적용 할 때마다 나빠집니다. 사본을 만드는 것처럼 결과는 원본과 다릅니다.
SMAG

8

인터넷 검색을 하면서이 것을 발견했으며, 나를 위해 가장 잘 작동하는 것을 발견했습니다 ...

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

http://jsfiddle.net/a63b0exm/


이것은 효과가 있습니다. 그러나 레코드의 경우 배경 이미지의 크기를 조정할 수없고 이미지를 배치 할 수 없으며 반복하는 것과 같은 몇 가지 문제가 있습니다.
Daniel

오, 난 정말 시도하지 않았다 ... 아래 링크를보십시오. developer.mozilla.org/en-US/docs/Web/CSS/-webkit-mask-box-image 감사, Daniel
Muthukumar Anbalagan

7

특정 색상이 필요했기 때문에 필터가 작동하지 않았습니다.

대신 CSS 여러 배경 이미지와 선형 그라데이션 함수 (이미지 자체를 만드는)를 활용하여 div를 만들었습니다. 오버레이 블렌드 모드를 사용하면 실제 이미지가 원하는 색상 (여기서 # 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>


나를 위해 작동하지 않았다. 나는 왜, 내가 정확히 붙여 복사 말할 수 없다
빅 Seedoubleyew

@VicSeedoubleyew 스 니펫이 제대로 작동합니다. dev 도구를 사용하여 div를 검사하여 CSS가 실제로 적용되는지 확인하십시오. 또한 내가 제공 한 URL을 사용하지 않는 경우 이미지의 URL이 유효한지 확인하십시오. 편집 : 스 니펫이 작동하지 않으면 구식이거나 선형 그라디언트 기능을 지원하지 않는 브라우저를 사용 중일 수 있습니다.
rolznz

5

이에 대한 해결책을 찾고 있었기 때문에 대답했습니다.

@chrscblls 답변의 펜은 흰색 또는 검정색 배경이 있지만 잘 작동하지 않으면 잘 작동합니다. 또한 이미지는 ng-repeat로 생성되었으므로 CSS에 URL을 넣을 수 없으며 img 태그에서 :: after를 사용할 수 없습니다.

그래서 나는 해결 방법을 찾아서 사람들이 너무 걸려 넘어지면 도움이 될 것이라고 생각했습니다.

그래서 내가 한 일은 세 가지 주요 차이점과 거의 동일합니다.

  • URL이 내 img 태그에 있으면 :: after 작동하는 다른 div에 태그와 레이블을 넣습니다.
  • '혼합 혼합 모드'는 '곱하기'또는 '스크린'대신 '차이'로 설정됩니다.
  • :: before를 정확히 동일한 값으로 추가하여 :: after가 :: before에서 만든 '차이'의 '차이'를 수행하고 자체 취소했습니다.

검은 색에서 흰색으로 또는 흰색에서 검은 색으로 변경하려면 배경색이 흰색이어야합니다. 검은 색에서 색상까지 모든 색상을 선택할 수 있습니다. 흰색에서 색상에 이르기까지 원하는 색상의 반대 색상을 선택해야합니다.

.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: "";
}

https://codepen.io/spaceplant/pen/oZyMYG


3

아이콘이 하나만 필요한 경우 전체 글꼴 세트가 필요하지 않으며 개별 요소로 더 "깨끗한"느낌이 듭니다. 따라서 이러한 목적으로 HTML5에서는 문서 흐름 내부에 SVG를 직접 배치 할 수 있습니다. 그런 다음 .CSS 스타일 시트에서 클래스를 정의하고fill 속성을 있습니다.

일 바이올린 : http://jsfiddle.net/qmsj0ez1/

이 예에서는 :hover동작을 설명하는 데 사용 했습니다. "정상"상태의 색상 만 변경하려면 의사 클래스를 제거해야합니다.


1

문자 그대로 색상을 변경하기 위해 CSS 전환을 -webkit-filter와 통합하여 어떤 상황이 발생하면 선택한 -webkit-filter를 호출 할 수 있습니다. 예를 들면 다음과 같습니다.

img {
    -webkit-filter:grayscale(0%);
    transition: -webkit-filter .3s linear;
    }
img:hover 
    {
    -webkit-filter:grayscale(75%);
    }

1

흑백에서 기술적으로 색상이 아니기 때문에 그림을 흑백에서 변경하거나 백색에서 검정색으로 변경하면 색조 회전 필터가 작동하지 않습니다. 대신, 반전 필터 속성을 사용하여 흑백 색상 변경 (흑백에서 그 반대로)을 수행해야합니다.

.img1 { filter: invert(100%); }


0

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>

출처 : https://codepen.io/taryaoui/pen/EKkcu

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.