05.09.2017
Фотоаппарат на чистом 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);
}
}
Демонстрация
Нам будет приятно
Поделитесь
Комментарии