05.09.2017

Фотоаппарат на чистом CSS

Фотоаппарат на чистом CSS

Возможности CSS безграничны — уже в который раз убеждаемся в этом на данном примере. Cassidy Williams сверстал очень крутой фотоаппарат на чистом HTML и CSS, что в очередной раз доказывает, что в вебе возможно все! Насладитесь и вы его работой.

<div class="demo-container">
	<div class="camera-container">
		<div class="camera-top">
			<div class="zoom"></div>
			<div class="mode-changer"></div>
			<div class="sides"></div>
			<div class="range-finder"></div>
			<div class="focus"></div>
			<div class="red"></div>
			<div class="view-finder"></div>
			<div class="flash">
				<div class="light"></div>
			</div>
		</div>
		<div class="camera-mid">
			<div class="sensor"></div>
			<div class="lens"></div>
		</div>
		<div class="camera-bottom"></div>
	</div>
</div>
.demo-container {
	display: block;
	position:relative;
	height: 400px;
}
.camera-container {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	border-radius: 5px;
	box-shadow: 0px 30px 50px -20px rgba(0, 0, 0, .7);
	animation: 5s angle infinite;
}

.camera-top, .camera-mid, .camera-bottom {
	width: 360px;
}

.camera-top {
	height: 60px;
	background: linear-gradient(
		to right,
		rgba(226, 226, 226, 1) 0%,
		rgba(245, 245, 245, 1) 10%,
		rgba(245, 245, 245, 1) 90%,
		rgba(226, 226, 226, 1) 100%
	);
	border: 1px solid #DCDCDC;
	border-top-left-radius: 5px;
}
.camera-top:before {
	display: block;
	content: '';
	position: absolute;
	top: -20px;
	right: 0;
	width: 210px;
	height: 20px;
	background: linear-gradient(
		to right,
		rgba(245, 245, 245, 1) 0%,
		rgba(245, 245, 245, 1) 174px,
		rgba(226, 226, 226, 1) 100%
	);
	border: 1px solid #DCDCDC;
	border-top-left-radius: 5px;
	border-top-right-radius: 5px;
	border-bottom: none;
	box-shadow: inset 0 15px 15px -15px #FDFDFD;
}
.camera-top .zoom {
	position: absolute;
	top: -15px;
	left: 30px;
	width: 42px;
	height: 9px;
	background: linear-gradient(
		to right,
		rgba(176, 176, 176, 1) 0%,
		rgba(226, 226, 226, 1) 30%,
		rgba(226, 226, 226, 1) 50%,
		rgba(226, 226, 226, 1) 70%,
		rgba(176, 176, 176, 1) 100%
	);
	border: 1px solid #A3A3A3;
	border-top-left-radius: 3px;
	border-top-right-radius: 3px;
	box-shadow: inset 0 15px 15px -15px #FDFDFD;
}
.camera-top .zoom:before {
	display: block;
	content: '';
	position: relative;
	top: -6px;
	left: 50%;
	transform: translateX(-50%);
	width: 20px;
	height: 4px;
	background: linear-gradient(
		to right,
		rgba(176, 176, 176, 1) 0%,
		rgba(226, 226, 226, 1) 50%,
		rgba(176, 176, 176, 1) 100%
	);
	border: 1px solid #A3A3A3;
	border-top-left-radius: 3px;
	border-top-right-radius: 3px;
}
.camera-top .zoom:after {
	display: block;
	content: '';
	position: relative;
	top: 3px;
	left: 50%;
	transform: translateX(-50%);
	width: 46px;
	height: 4px;
	background: linear-gradient(
		to right,
		rgba(176, 176, 176, 1) 0%,
		rgba(226, 226, 226, 1) 30%,
		rgba(226, 226, 226, 1) 50%,
		rgba(226, 226, 226, 1) 70%,
		rgba(176, 176, 176, 1) 100%
	);
	border: 1px solid #A3A3A3;
	border-bottom: none;
	border-top-left-radius: 3px;
	border-top-right-radius: 3px;
}
.camera-top .mode-changer {
	position: absolute;
	top: -20px;
	left: 82px;
	width: 60px;
	height: 16px;
	background: linear-gradient(
		to right,
		rgba(176, 176, 176, 1) 0%,
		rgba(226, 226, 226, 1) 30%,
		rgba(226, 226, 226, 1) 50%,
		rgba(226, 226, 226, 1) 70%,
		rgba(176, 176, 176, 1) 100%
	);
	border: 1px solid #A3A3A3;
	border-radius: 3px;
	box-shadow: inset 0 15px 15px -15px #FDFDFD;
}
.camera-top .mode-changer:after {
	display: block;
	content: '';
	position: absolute;
	top: 16px;
	left: 50%;
	transform: translateX(-50%);
	width: 50px;
	height: 2px;
	background: linear-gradient(
		to right,
		rgba(176, 176, 176, 1) 0%,
		rgba(226, 226, 226, 1) 30%,
		rgba(226, 226, 226, 1) 50%,
		rgba(226, 226, 226, 1) 70%,
		rgba(176, 176, 176, 1) 100%
	);
	border: 1px solid #A3A3A3;
	border-bottom: none;
}
.camera-top .sides {
	width: 100%;
}
.camera-top .sides:before, .camera-top .sides:after {
	display: block;
	content: '';
	position: absolute;
	top: 24px;
	width: 8px;
	height: 30px;
	background: linear-gradient(
		to bottom,
		rgba(130, 129, 129, 1) 0%,
		rgba(105, 103, 103, 1) 10%,
		rgba(79, 77, 77, 1) 50%,
		rgba(64, 62, 63, 1) 100%
	);
	border: 1px solid #3E3C3D;
	border-radius: 2px;
	box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, .5);
}
.camera-top .sides:before {
	left: -4px;
	border-top-left-radius: 3px;
	border-bottom-left-radius: 3px;
}
.camera-top .sides:after {
	right: -4px;
	border-top-right-radius: 3px;
	border-bottom-right-radius: 3px;
}
.camera-top .range-finder {
	position: absolute;
	top: 10px;
	left: 105px;
	width: 30px;
	height: 20px;
	background: #3E3C3D;
	border-radius: 3px;
	box-shadow: inset 0 0 5px 3px #333132;
}
.camera-top .range-finder:before {
	display: block;
	content: '';
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	width: 12px;
	height: 12px;
	background: #797878;
	border-radius: 100%;
}
.camera-top .focus {
	position: absolute;
	top: -14px;
	left: 156px;
	width: 15px;
	height: 15px;
	background: #3F3D3E;
	border-radius: 100%;
	box-shadow: inset 0 0 4px 3px #2D2B2B,
		inset 0 4px 5px 0 #F5F5F5,
		inset 0 -3px 4px -2px #A3A2A2;
}
.camera-top .red {
	position: absolute;
	top: 5px;
	left: 165px;
	width: 30px;
	height: 30px;
	background: #DC2839;
	border-radius: 100%;
}
.camera-top .view-finder {
	position: absolute;
	left: 210px;
	width: 48px;
	height: 30px;
	background: radial-gradient(
		ellipse at center,
		rgba(130, 129, 129, 1) 0%,
		rgba(64, 62, 63, 1) 85%,
		rgba(64, 62, 63, 1) 100%
	);
	border: 3px solid #312F2F;
	border-radius: 4px;
	box-shadow: inset 0 8px 8px -8px #FDFDFD;
}
.camera-top .flash {
	position: absolute;
	top: -6px;
	right: 20px;
	width: 58px;
	height: 46px;
	background: radial-gradient(
		ellipse at center,
		rgba(130, 129, 129, 1) 0%,
		rgba(64, 62, 63, 1) 70%,
		rgba(64, 62, 63, 1) 100%
	);
	border: 2px solid #312F2F;
	border-radius: 3px;
	box-shadow: inset 0 8px 8px -8px #FDFDFD;
}
.camera-top .flash:before, .camera-top .flash:after {
	display: block;
	content: '';
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
}
.camera-top .flash:before {
	width: 90%;
	height: 70%;
	background: radial-gradient(
		ellipse at center,
		rgba(105, 103, 103, 1) 0%,
		rgba(30, 30, 30, 1) 50%,
		rgba(30, 30, 30, 1) 100%
	);
}
.camera-top .flash:after {
	width: 16px;
	height: 14px;
	background: #797979;
	border-top-left-radius: 8px 2px;
	border-top-right-radius: 8px 2px;
	border-bottom-left-radius: 8px 2px;
	border-bottom-right-radius: 8px 2px;
}
.camera-top .flash .light {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	width: 20px;
	height: 20px;
	background: radial-gradient(
		ellipse at center,
		rgba(255, 255, 255, 1) 0%,
		rgba(255, 255, 255, 0) 100%
	);
	border-radius: 100%;
	z-index: 2;
	animation: 1s flash infinite;
}

.camera-mid {
	position: relative;
	height: 130px;
	background: linear-gradient(
		to right,
		rgba(228, 228, 228, 1) 0%,
		rgba(250, 250, 250, 1) 10%,
		rgba(250, 250, 250, 1) 90%,
		rgba(228, 228, 228, 1) 100%
	);
	border: 1px solid #DCDCDC;
	border-top: none;
	border-bottom: none;
	box-shadow: inset 0 15px 15px -15px #FDFDFD;
}
.camera-mid .sensor {
	position: absolute;
	top: 40px;
	left: 105px;
	width: 30px;
	height: 30px;
	background: #545252;
	border: 2px solid #545252;
	border-radius: 100%;
	box-shadow: inset 0 12px 12px -10px #FDFDFD,
		0 2px 5px 1px rgba(0, 0, 0, .3);
}
.camera-mid .sensor:before, .camera-mid .sensor:after {
	display: block;
	content: '';
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
}
.camera-mid .sensor:before {
	width: 20px;
	height: 20px;
	background: linear-gradient(to bottom, #E9E9E9 0%, #BDBDBD 100%);
	border-radius: 100%;
}
.camera-mid .sensor:after {
	width: 12px;
	height: 12px;
	background: #FAFAFA;
	border-radius: 100%;
	box-shadow: 0 2px 3px 0 #747474;
}
.camera-mid .lens {
	position: absolute;
	top: -20px;
	left: 130px;
	width: 155px;
	height: 155px;
	background: radial-gradient(
		ellipse at center,
		rgb(0, 0, 0) 0%,
		rgb(0, 0, 0) 15%,
		rgb(39, 37, 37) 30%,
		rgb(64, 62, 63) 30%,
		rgb(64, 62, 63) 31%,
		rgb(64, 62, 63) 40%,
		rgb(233, 235, 236) 41%,
		rgb(233, 235, 236) 44%,
		rgb(176, 177, 178) 48%,
		rgb(232, 233, 234) 50%,
		rgb(232, 233, 234) 60%,
		rgb(247, 248, 248) 60%,
		rgb(120, 121, 121) 65%,
		rgb(255, 255, 255) 66%,
		rgb(255, 255, 255) 100%
	);
	border: 1px solid #B6B7B8;
	border-radius: 100%;
	box-sizing: border-box;
	box-shadow: 0 7px 15px -2px rgba(0, 0, 0, .4),
		inset 0 -2px 15px -2px rgba(0, 0, 0, .2),
		inset 0 7px 15px -2px #FFF;
}
.camera-mid .lens:before {
	display: block;
	content: '';
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	width: 25px;
	height: 25px;
	background: rgba(0, 0, 0, .7);
	border-radius: 100%;
	box-shadow: inset 0 5px 3px -2px rgba(255, 255, 255, .5),
		inset 0 -5px 20px -8px rgba(255, 255, 255, .5);
}

.camera-bottom {
	height: 16px;
	background: linear-gradient(
		to right,
		rgba(226, 226, 226, 1) 0%,
		rgba(245, 245, 245, 1) 10%,
		rgba(245, 245, 245, 1) 90%,
		rgba(226, 226, 226, 1) 100%
	);
	border: 1px solid #DCDCDC;
	border-bottom: none;
	border-bottom-left-radius: 5px;
	border-bottom-right-radius: 5px;
	box-shadow: inset 0 15px 15px -15px #FDFDFD, inset 0 -12px 12px -10px #797979;
}

@keyframes flash {
	0% {
		width: 0;
		height: 0;
	}
	20% {
		width: 200px;
		height: 200px;
	}
	25% {
		width: 0;
		height: 0;
	}
	45% {
		width: 200px;
		height: 200px;
	}
	50% {
		width: 0;
		height: 0;
	}
	100% {
		width: 0;
		height: 0;
	}
}

@keyframes angle {
	0% {
		transform: translate(-50%, -50%) rotate(0deg);
		box-shadow: 0px 30px 50px -20px rgba(0, 0, 0, .7);
	}
	25% {
		transform: translate(-50%, -50%) rotate(2deg);
		box-shadow: 10px 30px 50px -20px rgba(0, 0, 0, .7);
	}
	75% {
		transform: translate(-50%, -50%) rotate(-2deg);
		box-shadow: -10px 30px 50px -20px rgba(0, 0, 0, .7);
	}
	100% {
		transform: translate(-50%, -50%) rotate(0deg);
		box-shadow: 0px 30px 50px -20px rgba(0, 0, 0, .7);
	}
}

Демонстрация

Нам будет приятно

Поделитесь

Комментарии

Загрузка комментариев...