今天继续玩玩CSS3的效果,默认和点击分别实现颜色变化功能。走起吧,直击分享主题:纯CSS3绘制游戏手柄并且涂色酷炫效果。有兴趣的朋友可以进来看看哟,先上个效果图再说咯。
先用CSS绘制出手柄的设计图,然后在实现功能。
默认和点击分别实现颜色变化,通过点击"Toggle CSS illustration"和"Hide image"去控制。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>纯CSS3绘制游戏手柄并且涂色酷炫效果 - Web前端之家https://www.jiangweishan.com</title>
<style>
*,
*:before,
*:after {
box-sizing: border-box;
}
img {
position: absolute;
top: 50%;
left: 50%;
width: 75vmin;
transform: translate(-50%, -50%);
opacity: 0.5;
z-index: 2;
}
[type='checkbox'] {
margin-bottom: 2rem;
}
label {
margin-bottom: 0.5rem;
font-weight: bold;
font-family: sans-serif;
color: #fafdff;
}
#toggle:checked ~ .container .controller {
display: block;
}
#image:checked ~ .container img {
display: none;
}
:root {
--bg: #005ca3;
--accent: #0a45f5;
--desired-size: 75;
--controller-white: #f1f1f4;
--controller-black: #1f1f1f;
--unit: calc((var(--desired-size) / 1920) * 1vmin);
}
body {
min-height: 100vh;
background: var(--bg);
overflow: auto;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
.container {
position: relative;
width: calc(1920 * var(--unit));
height: calc(1080 * var(--unit));
}
.controller {
display: none;
}
.controller__container {
width: calc(1920 * var(--unit));
height: calc(1080 * var(--unit));
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.controller__container:before {
content: '';
position: absolute;
bottom: 0;
left: 50%;
width: 80%;
height: 35%;
z-index: -1;
background: radial-gradient(rgba(13,13,13,0.5), transparent 50%);
filter: blur(25px);
transform: translate(-50%, 24%);
}
.controller__body {
width: calc(1330 * var(--unit));
height: calc(880 * var(--unit));
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.controller__body:before,
.controller__body:after {
content: '';
position: absolute;
z-index: -1;
bottom: 0;
height: 15%;
width: 40%;
filter: blur(25px);
background: radial-gradient(#0d0d0d, transparent 75%);
}
.controller__body:before {
transform: translate(-25%, 50%);
left: 0;
}
.controller__body:after {
right: 0;
transform: translate(25%, 50%);
}
.controller__body-top {
width: 200%;
height: 125%;
background: var(--controller-white);
top: 1%;
left: 50%;
border-radius: 75% 75% 0 0/100% 100% 0 0;
position: absolute;
transform: translate(-50%, 0%);
}
.controller__body-top--center {
-webkit-clip-path: inset(0 32.5% 52% 32.5%);
clip-path: inset(0 32.5% 52% 32.5%);
transform: translate(-50%, 0.4%);
background: #dcdee4;
}
.controller__body-top--left {
-webkit-clip-path: inset(0 62.5% 52% 30.5%);
clip-path: inset(0 62.5% 52% 30.5%);
}
.controller__body-top--right {
-webkit-clip-path: inset(0 30.5% 52% 62.5%);
clip-path: inset(0 30.5% 52% 62.5%);
}
.controller__grip {
--mirrored: 0;
--size: 250;
height: calc(var(--size) * var(--unit));
width: calc(var(--size) * var(--unit));
background: var(--controller-white);
border-radius: 25% 20% 25% 25%/25% 25% 25% 25%;
top: 5%;
position: absolute;
transform: rotateY(calc(var(--mirrored) * 180deg)) rotate(-10.75deg);
}
.controller__grip div:nth-of-type(1) {
background: var(--controller-white);
height: 360%;
width: 100%;
position: absolute;
transform-origin: top left;
transform: rotate(19deg) translate(-26%, -8%);
border-radius: 95% 0 0 69%;
-webkit-clip-path: inset(7.78% 0 50% 0);
clip-path: inset(7.78% 0 50% 0);
}
.controller__grip div:nth-of-type(2) {
background: var(--controller-white);
height: 360%;
width: 100%;
position: absolute;
transform-origin: top left;
transform: rotate(19deg) translate(-26%, -12%);
border-radius: 100% 0 13% 60%/63% 0 25% 44%;
-webkit-clip-path: inset(50% 0 0 0);
clip-path: inset(50% 0 0 0);
}
.controller__grip div:nth-of-type(3) {
position: absolute;
background: var(--controller-white);
height: 200%;
width: 15%;
left: 0%;
top: 230%;
transform-origin: bottom center;
border-radius: 100%/50%;
transform: rotate(32deg) translate(-671%, -32%);
}
.controller__grip div:nth-of-type(4) {
position: absolute;
}
.controller__grip--left {
left: 12%;
}
.controller__grip--right {
--mirrored: 1;
right: 12%;
}
.controller__sticks-container {
position: absolute;
left: 50%;
top: 25%;
width: 85%;
height: 76%;
overflow: hidden;
transform: translate(-50%, 0%);
}
.controller__sticks {
height: 38%;
width: 60%;
background: var(--controller-black);
position: absolute;
top: 15%;
left: 50%;
transform: translate(-50%, 0);
border-radius: 19%/50%;
}
.controller__sticks > div {
--lightness: rgba(166,166,166,0.15);
position: absolute;
height: 100%;
width: 38%;
top: 0;
border-radius: 50%;
}
.controller__sticks > div:before {
content: '';
background: linear-gradient(-30deg, var(--lightness), transparent, var(--lightness));
height: 100%;
width: 100%;
position: absolute;
border-radius: 50%;
filter: blur(3px);
}
.controller__sticks > div:after {
box-sizing: border-box;
content: '';
height: 90%;
width: 90%;
position: absolute;
border-radius: 50%;
border: calc(5 * var(--unit)) solid var(--lightness);
filter: blur(6px);
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.controller__sticks > div:nth-of-type(1) {
left: 0;
}
.controller__sticks > div:nth-of-type(2) {
right: 0;
}
.controller__sticks > div:nth-of-type(2) .controller__stick {
transform: translate(-47%, -55%);
}
.controller__stick {
height: 82%;
width: 82%;
background: #262626;
border-radius: 50%;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-53%, -55%);
}
.controller__stick > div:nth-of-type(1) {
border: var(--unit) solid #000;
height: 85%;
width: 85%;
transform: translate(-50%, -50%);
background: linear-gradient(5deg, rgba(255,255,255,0.1), #1a1a1a, rgba(255,255,255,0.1), #1a1a1a, rgba(255,255,255,0.1));
position: absolute;
border-radius: 50%;
top: 50%;
left: 50%;
}
.controller__stick > div:nth-of-type(1) div {
height: 95%;
width: 95%;
background: #1a1a1a;
border-radius: 50%;
position: absolute;
transform: translate(-50%, -50%);
top: 50%;
left: 50%;
}
.controller__stick > div:nth-of-type(2) {
background: repeating-conic-gradient(rgba(26,26,26,0.5) 1deg, rgba(153,153,153,0.5) 6deg), #666;
filter: blur(1px);
border-radius: 50%;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 75%;
height: 75%;
box-shadow: calc(-4 * var(--unit)) calc(2 * var(--unit)) calc(20 * var(--unit)) calc(2 * var(--unit)) #080808 inset;
}
.controller__stick > div:nth-of-type(2) div {
position: absolute;
top: 50%;
left: 50%;
background: radial-gradient(circle at 80% 100%, #262626, transparent), #666;
transform: translate(-50%, -50%);
border-radius: 50%;
width: 60%;
height: 60%;
box-shadow: calc(1 * var(--unit)) calc(2 * var(--unit)) calc(13 * var(--unit)) calc(2 * var(--unit)) rgba(255,255,255,0.35), calc(-5 * var(--unit)) calc(-2 * var(--unit)) calc(10 * var(--unit)) calc(8 * var(--unit)) #262626, calc(5 * var(--unit)) calc(4 * var(--unit)) calc(10 * var(--unit)) calc(8 * var(--unit)) #262626;
}
.controller__backdrop {
height: 60%;
width: 100%;
background: var(--controller-black);
}
.controller__clip {
background: var(--bg);
width: 65%;
height: 50%;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, 3%);
border-radius: 15% 15% 0 0/22% 22% 0 0;
-webkit-clip-path: inset(0 0 80% 0);
clip-path: inset(0 0 80% 0);
}
.controller__grip-underlay {
--mirrored: 0;
position: absolute;
width: 50%;
height: 150%;
top: 0;
transform: rotateY(calc(var(--mirrored) * 180deg)) translate(-57%, -37%) rotate(10deg);
}
.controller__grip-underlay:before {
content: '';
position: absolute;
bottom: 0;
right: 0;
background: var(--controller-white);
border-radius: 50%/50%;
height: 40%;
width: 4%;
transform-origin: bottom center;
transform: translate(-253%, 0%) rotate(12deg);
}
.controller__grip-underlay:after {
content: '';
position: absolute;
bottom: 0;
right: 0;
background: var(--controller-black);
height: 5%;
width: 20%;
border-radius: 0 0 4% 0/0 0 25% 0;
transform: translate(-59%, -2%);
}
.controller__grip-underlay div:nth-of-type(1) {
background: var(--controller-white);
position: absolute;
bottom: 0;
right: 0;
width: 100%;
height: 100%;
-webkit-clip-path: polygon(0 0, 100% 0, 100% 70%, 85% 99.5%, 0 100%);
clip-path: polygon(0 0, 100% 0, 100% 70%, 85% 99.5%, 0 100%);
}
.controller__grip-underlay div:nth-of-type(2) {
background: var(--controller-black);
position: absolute;
height: 100%;
width: 26%;
right: 0;
bottom: 0;
transform: translate(44%, 23.5%) rotate(14deg);
border-radius: 100% 0 0 100%/50% 0 0 50%;
-webkit-clip-path: polygon(0 25%, 60% 25%, 54% 77%, 0 79%);
clip-path: polygon(0 25%, 60% 25%, 54% 77%, 0 79%);
}
.controller__grip-underlay div:nth-of-type(2):after {
content: '';
background: var(--controller-white);
position: absolute;
bottom: 0;
right: 0;
width: 50%;
height: 61%;
border-radius: 100% 0 0 100%/50% 0 0 100%;
}
.controller__grip-underlay div:nth-of-type(3) {
background: var(--controller-white);
position: absolute;
bottom: 0;
width: 10%;
height: 7%;
right: 21%;
z-index: 2;
transform: translate(0%, -3%) rotate(0deg);
border-radius: 0 0 65% 0/0 0 100% 0;
}
.controller__grip-underlay div:nth-of-type(4) {
position: absolute;
background: var(--controller-white);
width: 40%;
height: 25%;
top: 21%;
right: -15%;
transform: rotate(30deg) translate(-7%, -2%);
border-radius: 0 100% 0 0/0 64% 0 0;
}
.controller__grip-underlay--left {
left: 0;
}
.controller__grip-underlay--right {
--mirrored: 1;
right: 0;
}
.controller__touch-pad {
--touch-pad-inset: #aaa1a1;
--touch-pad-fade: rgba(255,255,255,0.15);
position: absolute;
width: 42%;
height: 34.5%;
left: 50%;
top: 1.5%;
transform: translate(-50%, 0);
border-radius: 50% 50% 0 0/8% 8% 0 0;
overflow: hidden;
}
.controller__touch-pad:after {
content: '';
position: absolute;
background: linear-gradient(#b3b3b3, #fff, transparent);
top: 0;
left: 50%;
width: 95%;
height: 30%;
transform: translate(-50%, 0);
border-radius: 18% 18% 0 0/50% 50% 0 0;
opacity: 0.5;
-webkit-clip-path: polygon(-2% 0, 102% 0, 98% 100%, 2% 100%);
clip-path: polygon(-2% 0, 102% 0, 98% 100%, 2% 100%);
}
.controller__touch-pad > div:nth-of-type(1) {
width: 86%;
height: 100%;
background: var(--touch-pad-fade);
left: 50%;
position: absolute;
transform: translate(-50%, 0);
border-radius: 0 0 14% 14%/0 0 25% 25%;
}
.controller__touch-pad > div:nth-of-type(1):before {
content: '';
position: absolute;
bottom: 0;
width: 65%;
height: 25%;
left: 50%;
background: var(--touch-pad-fade);
transform: translate(-50%, 0);
}
.controller__touch-pad > div:nth-of-type(1):after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
height: 5%;
width: 20%;
border-radius: 50%;
background: radial-gradient(#fff, transparent);
filter: blur(3px);
transform: translate(-50%, 50%);
}
.controller__touch-pad > div:nth-of-type(1) div {
--mirrored: 0;
background: var(--touch-pad-fade);
position: absolute;
height: 100%;
width: 15%;
border-radius: 80% 0 0 90%/13% 0 0 30%;
overflow: hidden;
transform: rotateY(calc(var(--mirrored) * 180deg)) rotate(-11.5deg) translate(-23%, 2%);
}
.controller__touch-pad > div:nth-of-type(1) div:before {
content: '';
position: absolute;
width: 100%;
height: 20%;
top: 0;
left: 0;
background: var(--touch-pad-inset);
}
.controller__touch-pad > div:nth-of-type(1) div:after {
content: '';
position: absolute;
top: 8%;
left: 0;
width: 100%;
height: 100%;
border-radius: 50% 0 0 0/10% 0 0 0;
background: linear-gradient(var(--accent) 15% 65%, transparent 85%);
}
.controller__touch-pad > div:nth-of-type(1) div:nth-of-type(1) {
top: 0;
left: 0;
}
.controller__touch-pad > div:nth-of-type(1) div:nth-of-type(2) {
--mirrored: 1;
top: 0;
right: 0;
}
.controller__touch-pad > div:nth-of-type(2) {
position: absolute;
top: 0;
left: 50%;
height: 94%;
width: 81%;
background: var(--controller-white);
transform: translate(-50%, 0);
border-radius: 0 0 15% 15%/0 0 25% 25%;
}
.controller__touch-pad > div:nth-of-type(2):after,
.controller__touch-pad > div:nth-of-type(2):before {
content: '';
position: absolute;
top: 0;
height: 100%;
background: var(--controller-white);
width: 15%;
}
.controller__touch-pad > div:nth-of-type(2):before {
left: 0;
border-radius: 100% 0 0 85%/12% 0 0 25%;
transform: rotate(-12deg) translate(-27%, 0);
}
.controller__touch-pad > div:nth-of-type(2):after {
right: 0;
border-radius: 0 100% 85% 0/0 12% 25% 0;
transform: rotate(12deg) translate(27%, 0);
}
.controller__speaker {
position: absolute;
top: 39%;
left: 50%;
display: flex;
flex-direction: row;
transform: translate(-50%, 0);
}
.controller__speaker div {
--size: 12;
background: #0d0d0d;
height: calc(var(--size) * var(--unit));
width: calc(var(--size) * var(--unit));
border-radius: 50%;
box-shadow: calc(-0.75 * var(--unit)) calc(0.5 * var(--unit)) calc(0.75 * var(--unit)) calc(0.5 * var(--unit)) inset rgba(255,255,255,0.25);
}
.controller__speaker div:nth-of-type(odd) {
transform: translate(0, -98%) scale(1.2);
}
.controller__speaker div:nth-of-type(even) {
transform: translate(0, 70%) scale(1.2);
}
.controller__start {
position: absolute;
background: linear-gradient(transparent 68%, rgba(255,255,255,0.5) 70%, transparent 72%), #333;
top: 57.5%;
left: 50%;
border-radius: 15%/50%;
width: calc(68 * var(--unit));
height: calc(var(--unit) * 18);
transform: translate(-50%, -50%);
box-shadow: 0 0 calc(0 * var(--unit)) calc(4 * var(--unit)) #000, 0 0 calc(0 * var(--unit)) calc(1 * var(--unit)) rgba(255,255,255,0.5) inset;
}
.controller__headphone {
position: absolute;
left: 50%;
top: 63.5%;
border-radius: 50%;
width: calc(20 * var(--unit));
height: calc(8 * var(--unit));
background: #000;
transform: translate(-50%, 0);
}
.controller__buttons {
position: absolute;
top: 23.75%;
left: 70.25%;
height: calc(90 * var(--unit));
width: calc(90 * var(--unit));
}
.controller__button {
height: 100%;
width: 100%;
border-radius: 50%;
position: absolute;
box-shadow: 0 0 calc(4 * var(--unit)) calc(4 * var(--unit)) rgba(115,115,115,0.35) inset;
border: calc(2 * var(--unit)) solid #0d0d0d;
}
.controller__button:after,
.controller__button:before {
content: '';
position: absolute;
width: 75%;
height: 75%;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.controller__button--square {
transform: translate(0, 0);
}
.controller__button--square:before {
width: 55%;
height: 55%;
border: calc(4 * var(--unit)) solid #404040;
}
.controller__button--triangle {
transform: translate(108%, -108%);
}
.controller__button--triangle:after,
.controller__button--triangle:before {
-webkit-clip-path: polygon(50% 0%, 100% 100%, 0 100%);
clip-path: polygon(50% 0%, 100% 100%, 0 100%);
}
.controller__button--triangle:before {
height: 60%;
width: 65%;
background: #404040;
transform: translate(-50%, -50%) translate(0, -16%);
}
.controller__button--triangle:after {
background: var(--controller-white);
height: 48%;
width: 49%;
transform: translate(-50%, -50%) translate(0, -16%);
}
.controller__button--cross {
transform: translate(108%, 108%);
}
.controller__button--cross:after,
.controller__button--cross:before {
height: calc(4 * var(--unit));
background: #404040;
width: 70%;
}
.controller__button--cross:after {
transform: translate(-50%, -50%) rotate(45deg);
}
.controller__button--cross:before {
transform: translate(-50%, -50%) rotate(-45deg);
}
.controller__button--circle {
transform: translate(216%, 0%);
}
.controller__button--circle:before {
width: 70%;
height: 70%;
border-radius: 50%;
border: calc(4 * var(--unit)) solid #404040;
}
.controller__dpad {
position: absolute;
width: calc(84 * var(--unit));
height: calc(100 * var(--unit));
top: 16%;
left: calc(210 * var(--unit));
}
.controller__dbutton {
position: absolute;
height: 100%;
width: 100%;
background: #666;
top: 0;
left: 0;
transform-origin: bottom center;
-webkit-clip-path: polygon(0 0, 100% 0, 100% 25%, 93% 70%, 57% 100%, 50% 100%, 43% 100%, 7% 70%, 0 25%);
clip-path: polygon(0 0, 100% 0, 100% 25%, 93% 70%, 57% 100%, 50% 100%, 43% 100%, 7% 70%, 0 25%);
border-radius: 35% 35% 0 0/27% 27% 0 0;
}
.controller__dbutton--top {
transform: translate(0, 0);
}
.controller__dbutton--right {
transform: translate(0, 12%) rotate(90deg) translate(0, -14%);
}
.controller__dbutton--bottom {
transform: translate(0, 12%) rotate(-180deg) translate(0, -14%);
}
.controller__dbutton--left {
transform: translate(0, 12%) rotate(-90deg) translate(0, -14%);
}
.controller__dbutton > div {
background: rgba(242,242,242,0.75);
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
border-radius: 35%/27%;
width: 85%;
height: 85%;
-webkit-clip-path: polygon(0 0, 100% 0, 93% 70%, 57% 100%, 50% 100%, 43% 100%, 7% 70%);
clip-path: polygon(0 0, 100% 0, 93% 70%, 57% 100%, 50% 100%, 43% 100%, 7% 70%);
}
.controller__dbutton > div:after,
.controller__dbutton > div:before {
content: '';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.controller__dbutton > div:before {
background: var(--controller-white);
height: 90%;
background: var(--controller-white);
width: 90%;
border-radius: 35%/27%;
-webkit-clip-path: polygon(0 0, 100% 0, 93% 70%, 57% 100%, 50% 100%, 43% 100%, 7% 70%);
clip-path: polygon(0 0, 100% 0, 93% 70%, 57% 100%, 50% 100%, 43% 100%, 7% 70%);
}
.controller__dbutton > div:after {
background: #404040;
top: 26%;
width: 28%;
height: 14%;
-webkit-clip-path: polygon(0 100%, 50% 0, 100% 100%);
clip-path: polygon(0 100%, 50% 0, 100% 100%);
}
.controller__trigger {
--mirrored: 0;
height: calc(80 * var(--unit));
width: calc(254 * var(--unit));
background: var(--controller-black);
position: absolute;
transform: translate(0%, 0) rotateY(calc(var(--mirrored) * 180deg)) translate(-13%, 3%) rotate(-11deg);
border-radius: 60% 50% 0 0/100% 100% 0 0;
-webkit-clip-path: polygon(19% 0, 9% 100%, 86% 100%, 86% 0);
clip-path: polygon(19% 0, 9% 100%, 86% 100%, 86% 0);
overflow: hidden;
}
.controller__trigger:after,
.controller__trigger:before {
content: '';
position: absolute;
top: 0;
left: 50%;
}
.controller__trigger:before {
height: 25%;
width: 75%;
transform: translate(-50%, 0);
background: linear-gradient(transparent 25%, rgba(255,255,255,0.25));
}
.controller__trigger:after {
height: 75%;
top: 25%;
width: 100%;
transform: translate(-50%, 0);
background: linear-gradient(90deg, transparent 0 19%, rgba(255,255,255,0.5), transparent 45% 55%), linear-gradient(90deg, transparent 0 69%, rgba(255,255,255,0.5), transparent 80%);
}
.controller__trigger--left {
left: 12%;
}
.controller__trigger--right {
--mirrored: 1;
right: 12%;
}
.controller__auxiliary-button {
--mirrored: 0;
position: absolute;
top: 9%;
border: calc(2 * var(--unit)) solid #262626;
border-radius: 50%/30%;
background: var(--controller-white);
box-shadow: 0 0 calc(2 * var(--unit)) calc(2 * var(--unit)) rgba(115,115,115,0.5) inset;
height: calc(62 * var(--unit));
width: calc(34 * var(--unit));
transform: rotateY(calc(var(--mirrored) * 180deg)) rotate(-12deg) translate(-18%, -4%);
}
.controller__auxiliary-button > div {
position: absolute;
top: 0;
left: 50%;
}
.controller__auxiliary-button--share {
left: 26%;
}
.controller__auxiliary-button--share > div {
background: #a6a6a6;
height: 24%;
width: 10%;
transform-origin: bottom center;
transform: translate(50%, -200%) rotate(12deg);
}
.controller__auxiliary-button--share > div:after,
.controller__auxiliary-button--share > div:before {
content: '';
position: absolute;
bottom: 0;
left: 0;
height: 70%;
width: 100%;
background: #a6a6a6;
transform-origin: 50% 220%;
}
.controller__auxiliary-button--share > div:before {
transform: rotate(-33deg);
}
.controller__auxiliary-button--share > div:after {
transform: rotate(33deg);
}
.controller__auxiliary-button--options {
--mirrored: 1;
right: 26%;
}
.controller__auxiliary-button--options > div {
background: #a6a6a6;
width: 10%;
height: 30%;
transform: translate(0, -160%) rotate(102deg) translate(0, -22%);
}
.controller__auxiliary-button--options > div:after,
.controller__auxiliary-button--options > div:before {
content: '';
position: absolute;
bottom: 0;
left: 0;
height: 100%;
width: 100%;
background: #a6a6a6;
}
.controller__auxiliary-button--options > div:before {
transform: translate(-250%, 0);
}
.controller__auxiliary-button--options > div:after {
transform: translate(250%, 0);
}
.controller__logo {
position: absolute;
top: 50%;
left: 50%;
width: calc(90 * var(--unit));
height: calc(70 * var(--unit));
transform: translate(-50%, -74%);
}
.controller__logo > div:nth-of-type(2) {
height: 96%;
width: 22%;
background: var(--controller-black);
position: absolute;
top: 50%;
left: 50%;
border: calc(3 * var(--unit)) solid #0d0d0d;
transform: translate(-71%, -50%) skewY(15deg);
}
.controller__logo > div:nth-of-type(2):after,
.controller__logo > div:nth-of-type(2):before {
content: '';
position: absolute;
}
.controller__logo > div:nth-of-type(2):before {
left: 108%;
top: -5%;
width: 150%;
height: 62%;
background: var(--controller-black);
border: calc(3 * var(--unit)) solid #0d0d0d;
border-radius: 0 50% 50% 0;
}
.controller__logo > div:nth-of-type(2):after {
left: 0%;
width: 230%;
box-shadow: 0 0 calc(2 * var(--unit)) calc(2 * var(--unit)) rgba(255,255,255,0.5) inset;
height: 20%;
background: var(--controller-black);
border-radius: 0 30% 0 0/0 100% 0 0;
-webkit-clip-path: polygon(0 0, 100% 0, 100% 80%, 0 30%);
clip-path: polygon(0 0, 100% 0, 100% 80%, 0 30%);
}
.controller__logo > div:nth-of-type(1) {
position: absolute;
height: 38%;
transform-origin: bottom center;
width: 122%;
bottom: 0;
left: 32%;
transform: skewX(62deg) rotate(-13deg) translate(-2%, -21%);
}
.controller__logo > div:nth-of-type(1) div:after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 70%;
height: 25%;
background: #0d0d0d;
transform: translate(-50%, -50%);
border-radius: 25%/50%;
}
.controller__logo > div:nth-of-type(1) div:nth-of-type(1) {
height: 54%;
background: var(--controller-black);
position: absolute;
top: 45%;
width: 100%;
-webkit-clip-path: polygon(57% 0, 100% 0, 100% 100%, 19% 100%);
clip-path: polygon(57% 0, 100% 0, 100% 100%, 19% 100%);
border-radius: 25%/50%;
box-shadow: calc(-1 * var(--unit)) calc(1 * var(--unit)) calc(1 * var(--unit)) calc(1 * var(--unit)) rgba(255,255,255,0.5) inset;
border: calc(2.5 * var(--unit)) solid #0d0d0d;
}
.controller__logo > div:nth-of-type(1) div:nth-of-type(2) {
border: calc(2 * var(--unit)) solid #0d0d0d;
top: 2%;
width: 100%;
left: 2%;
position: absolute;
box-shadow: calc(-1 * var(--unit)) calc(1 * var(--unit)) calc(1 * var(--unit)) calc(1 * var(--unit)) rgba(255,255,255,0.5) inset;
height: 58%;
background: var(--controller-black);
border-radius: 35%/50%;
-webkit-clip-path: polygon(0 0, 85% 0, 40% 100%, 0% 100%);
clip-path: polygon(0 0, 85% 0, 40% 100%, 0% 100%);
}
.controller__mute {
position: absolute;
width: calc(20 * var(--unit));
height: calc(20 * var(--unit));
top: 60%;
left: 50%;
transform: translate(-50%, 0);
}
.controller__mute > div:nth-of-type(1) {
position: absolute;
top: 38%;
left: 50%;
width: 62%;
height: 36%;
background: #808080;
border-radius: 0 0 25% 25%/0 0 50% 50%;
transform: translate(-50%, 0);
}
.controller__mute > div:nth-of-type(1):after,
.controller__mute > div:nth-of-type(1):before {
content: '';
position: absolute;
}
.controller__mute > div:nth-of-type(1):before {
height: 200%;
width: 80%;
background: #808080;
border: var(--unit) solid var(--controller-black);
border-radius: 25%;
position: absolute;
left: 50%;
top: 0;
transform: translate(-50%, -60%);
}
.controller__mute > div:nth-of-type(1):after {
width: 150%;
height: 50%;
border-radius: 25%/25%;
background: #808080;
border: var(--unit) solid var(--controller-black);
top: 50%;
left: 50%;
transform: translate(-50%, -159%) rotate(45deg);
}
.controller__mute > div:nth-of-type(2) {
position: absolute;
bottom: 0;
left: 50%;
background: #808080;
transform: translate(-50%, 0);
width: 60%;
height: 15%;
border-radius: 25%;
}
.controller__mute > div:nth-of-type(2):after {
content: '';
left: 50%;
bottom: 0;
height: 200%;
background: #808080;
width: 25%;
position: absolute;
transform: translate(-50%, 0);
}
.controller__patch {
--mirrrored: 0;
position: absolute;
bottom: 1.5%;
height: 25%;
width: 7%;
background: var(--controller-white);
border-radius: 50%/50%;
transform-origin: bottom center;
}
.controller__patch--left {
left: 4%;
transform: rotate(6deg);
}
.controller__patch--right {
right: 4%;
transform: rotate(-6deg);
}
</style>
</head>
<body>
<label for="toggle">Toggle CSS illustration</label>
<input id="toggle" type="checkbox"/>
<label for="image">Hide image</label>
<input id="image" type="checkbox"/>
<div class="container">
<div class="controller">
<div class="controller__container">
<div class="controller__body">
<div class="controller__trigger controller__trigger--left"></div>
<div class="controller__trigger controller__trigger--right"></div>
<div class="controller__body-top controller__body-top--left"></div>
<div class="controller__body-top controller__body-top--right"></div>
<div class="controller__body-top controller__body-top--center"></div>
<div class="controller__grip controller__grip--left">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="controller__grip controller__grip--right">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="controller__sticks-container">
<div class="controller__backdrop"></div>
<div class="controller__clip"></div>
<div class="controller__grip-underlay controller__grip-underlay--left">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="controller__grip-underlay controller__grip-underlay--right">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="controller__sticks">
<div>
<div class="controller__stick">
<div>
<div></div>
</div>
<div>
<div></div>
</div>
</div>
</div>
<div>
<div class="controller__stick">
<div>
<div></div>
</div>
<div>
<div></div>
</div>
</div>
</div>
</div>
</div>
<div class="controller__touch-pad">
<div>
<div></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
</div>
</div>
<div class="controller__speaker">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="controller__start"></div>
<div class="controller__headphone"></div>
<div class="controller__buttons">
<div class="controller__button controller__button--triangle"></div>
<div class="controller__button controller__button--square"></div>
<div class="controller__button controller__button--circle"></div>
<div class="controller__button controller__button--cross"></div>
</div>
<div class="controller__dpad">
<div class="controller__dbutton controller__dbutton--top">
<div></div>
</div>
<div class="controller__dbutton controller__dbutton--right">
<div></div>
</div>
<div class="controller__dbutton controller__dbutton--bottom">
<div></div>
</div>
<div class="controller__dbutton controller__dbutton--left">
<div></div>
</div>
</div>
<div class="controller__auxiliary-button controller__auxiliary-button--share">
<div></div>
</div>
<div class="controller__auxiliary-button controller__auxiliary-button--options">
<div></div>
</div>
<div class="controller__logo">
<div>
<div></div>
<div></div>
</div>
<div></div>
</div>
<div class="controller__mute">
<div></div>
<div></div>
</div>
<div class="controller__patch controller__patch--left"></div>
<div class="controller__patch controller__patch--right"></div>
</div>
</div>
</div>
</div>
<script>
</script>
</body>
</html>
试试吧。