Перекрывание слоев overflow: hidden;
Добрый день уважаемые. Делал прелодер на CSS на выходе получил очень много артефактов, подскажите пожалуйста где я косячу? :cray:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Preloader</title> <!-- <link rel="stylesheet" type="text/css" href="normalize.css"> --> <style> .preloader{ margin: 0 auto; width: 75px; height: 75px; border: 1px solid black; } .circle { border-radius: 50%; cursor: pointer; } .c_main { position: relative; width: 75px; height: 75px; border-bottom: 1px solid #d7d7d5; background-color: #E1E1E1; opacity: .99; z-index: 1; } .c_orange{ position: absolute; margin-left: 1px; height: 73px; width: 73px; background: -webkit-linear-gradient(bottom, #FF7D00 0%, #FB7E01 50%, #FC5200 51%, #FC5101); background: linear-gradient(to top, #FF7D00 0%, #FB7E01 50%, #FC5200 51%, #FC5101); overflow: hidden; } .c_orange:before{ content:''; position: absolute; top: -4px; margin-left: -74px; width: 148px; height: 148px; border-radius: 50%; border: 1px solid #BB4001; box-shadow: 4px 7px 4px 8px rgba(187,64,1, 0.9), inset 8px 6px 3px rgba(187,64,1, 0.9); } .rect1{ position: absolute; top: -36px; left: 36px; height: 73px; width: 73px; background-color: #E1E1E1; -webkit-transform-origin: left bottom; transform-origin: left bottom; -webkit-transform: rotate(45deg); transform: rotate(45deg); } .cover1 { position: absolute; margin-left: 11px; margin-top: 11px; height: 50px; width: 50px; background-color: #E1E1E1; } .c_blue{ position: absolute; margin-left: 1px; margin-top: 1px; height: 48px; width: 48px; background-color: #50A2CA; overflow: hidden; } .c_blue:before{ content:''; position: absolute; top: -3px; margin-left: -4px; width: 88px; height: 88px; border-radius: 50%; border: 1px solid #083A4D; box-shadow: 4px 6px 3px 9px rgba(8,58,77, 0.9), inset -8px 6px 1px 1px rgba(8,58,77, 0.9); overflow: hidden; } .rect2{ position: absolute; left: 24px; height: 48px; width: 48px; background-color: #E1E1E1; -webkit-transform-origin: left center; transform-origin: left center; -webkit-transform: rotate(-20deg); transform: rotate(-20deg); overflow: hidden; } .cover2{ position: absolute; margin-left: 6px; margin-top: 6px; height: 36px; width: 36px; background-color: #E1E1E1; } .c_purple{ position: relative; margin-left: 1px; margin-top: 1px; height: 34px; width: 34px; background-color: #5B4A69; z-index: 1; opacity: 0.99; overflow: hidden; } .c_purple:before{ content:''; position: absolute; top: -8px; margin-left: -2px; width: 88px; height: 88px; border-radius: 50%; border: 1px solid #3B2E43; box-shadow: 4px 6px 3px 9px rgba(59,46,67, 0.9), inset -8px 6px 1px 1px rgba(59,46,67, 0.9); } .cover3{ position: absolute; margin-left: 5px; margin-top: 5px; height: 24px; width: 24px; background-color: #E1E1E1; } .rect3{ position: absolute; top: -4px; left: 16px; height: 38px; width: 38px; background-color: #E1E1E1; /*border: 1px solid black;*/ z-index: 2; -webkit-transform-origin: left center; transform-origin: left center; -webkit-transform: rotate(-45deg); transform: rotate(-45deg); } .circle:hover .rotating { -webkit-animation: swinger 3s linear infinite normal; animation: swinger 3s linear infinite normal; } .circle:hover .rotatingBackward{ -webkit-animation: swinger 3s linear infinite reverse; animation: swinger 3s linear infinite reverse; } @-webkit-keyframes swinger { 0%{ -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } @keyframes swinger { 0%{ -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } </style> </head> <body> <div class="preloader"> <div class="circle c_main"> <div class="circle c_orange"><div class="rect1 rotating"></div> <div class="circle cover1"> <div class="circle c_blue"> <div class="rect2 rotatingBackward"></div> <div class="circle cover2"> <div class="circle c_purple"><div class="rect3 rotating"></div> <div class="circle cover3"></div> </div> </div> </div> </div> </div> </div> </div> <script type="text/javascript" src="script.js"></script> </body> </html> Не могу понять как избавится от этого квадрата перекрытия. + 1px радиуса по ободу кругов |
От квадрата перекрытия помогает
Код:
clip: rect(0px, 100%, 50%, 50%); Обводка в 1 пкс при закр. уголках -- изчеснет, если вырезать по кругу, уменьшить его на 1% Код:
clip-path: circle(49% at center); <!doctype html> <html> <head> <meta charset="utf-8"> <title>Preloader</title> <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" > <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui"> </head> <body> <style scoped> html, body { height: 100%; } body { margin: 0; display: flex; } .preloader { --size: 150px; margin: auto; width: var(--size); height: var(--size); cursor: pointer; } .circle { border-radius: 50%; position: relative; overflow: hidden; width: 100%; height: 100%; background: #eee; transform: scale(.999); clip-path: circle(49% at center); } .circle > .circle { transform: scale(.666) scaleX(-1); } .circle::before { content: ""; position: absolute; width: 100%; height: 100%; background: #eee; border-radius: 50%; animation: swinger 3s linear infinite normal; clip: rect(0px, var(--size), calc(var(--size) / 2), calc(var(--size) / 2)); } .circle.orange { background: radial-gradient(circle at 0% 100%, transparent 72%, rgba(187, 64, 1, 0.8) 74%, transparent 83%), radial-gradient(circle at 10% 120%, transparent 72%, rgba(187, 64, 1, 0.8) 78%, transparent 86%), linear-gradient(to top, #FF7D00, #FB7E01 50%, #FC5200 calc(50% + 1px), #FC5101); } .circle.blue { background: radial-gradient(circle at 0% 100%, transparent 72%, rgba(8,58,77, 0.8) 74%, transparent 83%), radial-gradient(circle at 10% 120%, transparent 72%, rgba(8,58,77, 0.8) 78%, transparent 86%), #50A2CA; } .circle.purple { background: radial-gradient(circle at 0% 100%, transparent 72%, rgba(59,46,67, 0.8) 74%, transparent 83%), radial-gradient(circle at 10% 120%, transparent 72%, rgba(59,46,67, 0.8) 78%, transparent 86%), #5B4A69; } @keyframes swinger { from { transform: rotate(0); } to { transform: rotate(1turn); } } </style> <div role="presentation" class="preloader"> <div class="circle orange"> <div class="circle blue"> <div class="circle purple"> <div class="circle"></div> </div> </div> </div> </div> </body> </html> |
Спасибо, Malleys, за объяснение
|
Часовой пояс GMT +3, время: 10:17. |