龙空技术网

CSS-画一个iPhone12

web端开发 1061

前言:

眼前你们对“苹果css”可能比较重视,小伙伴们都想要学习一些“苹果css”的相关资讯。那么小编也在网络上搜集了一些有关“苹果css””的相关知识,希望看官们能喜欢,朋友们快快来学习一下吧!

iPhone12发布一个月了,作为还没有拥有过一个苹果设备的穷B程序员。这次,依旧还是买不起。

于是,使用css给自己画了一个。

先看效果:

需求分析:

1、分别画出6个面,然后组成一个立方体。

2、圆角部分使用多个div依次旋转一个角度,组成圆弧

一、画iPhone背面

先画一个圆角长方形;左下到右上渐变;增加border和内阴影使得看起来更立体。

.back {	position: absolute;	width: 307px;	height: 633px;	background: linear-gradient(65deg, rgb(26, 53, 64) 20%, rgb(37, 63, 76) 50%, rgb(117, 140, 154) 120%);	border-radius: 46px;	transform-style: preserve-3d;	border: solid 2px rgb(76, 100, 117);	box-shadow: inset 0 0 3px 1px;}

使用径向渐变画出画出一层一层的圆模拟摄像头的光圈。复制两个做出相机组。

.camera-group {	position: absolute;	left: 20px;	top: 20px;	width: 128px;	height: 128px;	background: linear-gradient(70deg, rgb(26, 53, 64) 46%, rgb(55, 81, 93) 46%);	border-radius: 30px;	transform-style: preserve-3d;	border: solid 2px rgb(76, 100, 117);	box-shadow: inset 0 0 3px 1px;}.camera {	position: absolute;	width: 46px;	height: 46px;	border-radius: 50%;	background: radial-gradient(#444 1px, rgb(0, 54, 161) 4px, rgb(14, 27, 29) 5px, rgb(6, 6, 6) 18px, rgb(40, 50, 57) 22px);	border: solid 4px rgb(45, 72, 83);	box-shadow: 0 0 3px, inset 0 0 2px;}.camera1 {	left: 6px;	top: 6px;}.camera2 {	left: 6px;	bottom: 6px;}.camera3 {	top: 50%;	transform: translateY(-50%);	right: 6px;	bottom: 6px;}.camera4 {	position: absolute;	right: 20px;	top: 6px;	width: 25px;	height: 25px;	border-radius: 50%;	background: radial-gradient(rgb(214, 200, 217) 2px, rgb(214, 200, 197) 9px, rgb(45, 72, 83) 14px);	box-shadow: 0 0 2px rgb(45, 72, 83), inset 0 0 2px rgb(45, 72, 83);}.camera5 {	position: absolute;	right: 20px;	bottom: 6px;	width: 25px;	height: 25px;	border-radius: 50%;	background: radial-gradient(#333 1px, rgb(14, 27, 29) 5px, rgb(6, 6, 6) 18px, rgb(40, 50, 57) 22px);	box-shadow: 0 0 2px rgb(45, 72, 83), inset 0 0 2px rgb(45, 72, 83);}.camera6 {	position: absolute;	right: 10px;	bottom: 30px;	width: 3px;	height: 3px;	border-radius: 50%;	background: rgb(6, 6, 6);	box-shadow: 0 0 2px rgb(45, 72, 83), inset 0 0 2px rgb(45, 72, 83);}

画一个苹果的logo,这里就使用一个简单的画法,一个div+before+after,做出苹果logo的叶子和两个椭圆。拼凑起接近苹果的样子。使用mask-image给图片遮罩出一个豁口。

.logo {	position: absolute;	top: -30px;	left: -30px;	width: 145px;	height: 220px;	border-radius: 80% 70% 60% 90%/50% 50% 60% 100%;	background: linear-gradient(70deg, rgb(26, 53, 64) 70%, rgb(55, 81, 93) 50%);	transform: scale(.28);	transform-origin: 0 0;}.logo::after {	position: absolute;	content: '';	left: 97px;	width: 145px;	height: 220px;	border-radius: 70% 80% 90% 60% /50% 50% 100% 60%;	background: linear-gradient(70deg, rgb(26, 53, 64) 27%, rgb(55, 81, 93) 27%);	-webkit-mask-image: radial-gradient(circle at 110% 38%, #0000 60px, #000 20px);	mask-image: radial-gradient(circle at 110% 38%, #0000 60px, #000 20px);}.logo::before {	position: absolute;	top: -70px;	left: 117px;	width: 60px;	height: 68px;	background-color: rgb(55, 81, 93);	content: '';	border-radius: 100% 0;}

二、画手机正面

正面本来想一个div搞定,使用多个渐变图片背景。不过渐变的圆边缘会有毛刺效果不好看。

就简单的多画几个渐变背景的圆形div。

.front {	position: absolute;	width: 307px;	height: 633px;	background: rgb(239, 221, 197);	border-radius: 46px;	transform-style: preserve-3d;	border: solid 2px rgb(76, 100, 117);	box-shadow: inset 0 0 0 10px;	display: flex;	justify-content: center;	align-items: center;	overflow: hidden;	transform: translateZ(15px);}.front::after {	position: absolute;	width: 100%;	height: 100%;	border-radius: 46px;	box-shadow: inset 0 0 0 10px;	content: '';}.circle1 {	position: absolute;	width: 196px;	height: 196px;	background: radial-gradient(circle at 40% 50%, rgb(255, 73, 42), rgb(254, 164, 104));	border-radius: 50%;	box-shadow: inset -10px 15px 50px rgb(255, 248, 147);}.circle2 {	position: absolute;	width: 196px;	height: 196px;	transform: translate(-60px, 0px) scale(1.9);	background: radial-gradient(circle at 40% 50%, rgb(255, 73, 42) 20%, rgb(254, 164, 104) 80%);	border-radius: 50%;	box-shadow: inset 10px -15px 50px rgb(255, 248, 147), inset -3px 8px 20px rgb(239, 221, 197);}.circle3 {	position: absolute;	width: 196px;	height: 196px;	background: radial-gradient(circle at 40% 50%, rgb(255, 73, 42), rgb(254, 164, 104));	border-radius: 50%;	box-shadow: inset -5px 10px 30px rgb(255, 248, 147), inset 5px -15px 40px rgb(255, 206, 86);	transform: scale(2.8);}.circle4 {	position: absolute;	width: 196px;	height: 196px;	background: radial-gradient(circle at 40% 50%, rgb(255, 73, 42), rgb(254, 164, 104));	border-radius: 50%;	box-shadow: inset -10px 15px 50px rgb(255, 248, 147);	transform: scale(3.6);}

加上刘海

.front-camera {	position: absolute;	top: 0;	width: 50%;	height: 32px;	background: #111;	border-radius: 0 0 18px 18px/15px;}.front-camera::before {	position: absolute;	left: 20%;	bottom: 10px;	width: 50%;	height: 8px;	background: #333;	content: '';	border-radius: 4px;}.front-camera::after {	position: absolute;	right: 20%;	width: 10px;	height: 10px;	content: '';	background: radial-gradient(#444 1px, rgb(0, 54, 161) 2px, rgb(14, 27, 29) 5px);	bottom: 9px;	border-radius: 50%;}

三、画两个侧边

两个侧边比较简单,长方形div。

在使用3个div,画做三个开关。开关translateZ(2px)的before和after伪元素做出一个立体图片的样子。

.side {	position: absolute;	width: 30px;	height: 541px;	background: rgb(37, 63, 76);	transform-style: preserve-3d;	display: flex;	justify-content: center;	align-items: center;}.switch {	position: absolute;	top: 80px;	width: 8px;	height: 50px;	border-radius: 4px;	background: rgb(37, 63, 76);	box-shadow: 1px 1px 2px, -1px -1px 2px rgb(167, 190, 204);}.switch-extra {	transform-style: preserve-3d;	transform: translateZ(3px);}.switch-extra::before {	position: absolute;	left: 0;	top: 5%;	height: 90%;	width: 3px;	background: rgb(37, 63, 76);	content: '';	transform-origin: left center;	transform: rotateY(90deg);}.switch-extra::after {	position: absolute;	left: 0;	top: 2%;	height: 96%;	width: 3px;	background: rgb(37, 63, 76);	content: '';	transform-origin: right center;	transform: rotateY(-90deg);}

四、画出顶部底部

这里跟上下两边类似

五、画出四个圆角

圆角需要是多个div旋转一定角度。拼接成一个圆弧

.pad-radius {	position: absolute;	width: 30px;	height: 9px;	background: rgb(37, 63, 76);}.pad-radius0 {	transform: rotateY(-90deg) rotateX(0deg) translateZ(48px);}.pad-radius1 {	transform: rotateY(-90deg) rotateX(10deg) translateZ(48px);}.pad-radius2 {	transform: rotateY(-90deg) rotateX(20deg) translateZ(48px);}.pad-radius3 {	transform: rotateY(-90deg) rotateX(30deg) translateZ(48px);}.pad-radius4 {	transform: rotateY(-90deg) rotateX(40deg) translateZ(48px);}.pad-radius5 {	transform: rotateY(-90deg) rotateX(50deg) translateZ(48px);}.pad-radius6 {	transform: rotateY(-90deg) rotateX(60deg) translateZ(48px);}.pad-radius7 {	transform: rotateY(-90deg) rotateX(70deg) translateZ(48px);}.pad-radius8 {	transform: rotateY(-90deg) rotateX(80deg) translateZ(48px);}.pad-radius9 {	transform: rotateY(-90deg) rotateX(90deg) translateZ(48px);}

六、将各个面拼接起来

代码仓库地址:

演示地址:

标签: #苹果css