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.