тема: есть дваDIV,следующим образом:
<div class="radar">
<div class="fan"></div>
</div>
в,radarДобрыйDIVда200pxширина и высота,fanДобрыйDIVда100pxширина и высота.
Пожалуйста, используйтеCSSЗавершите эффект ниже.
🔥 Эффект совместим с современными популярными браузерами.
Я: ах! Это динамическая карта, чтобы получить имеющиеся вещиUIЭто сделано с движущейся картинкой, эта проблема решена, такой же остроумный, как и я!
Интервьюер: Когда выйдете, поверните налево, спасибо!
Ближе к дому, в этом вопросе еще много пунктов знаний, давайте выучим их один за другим~
Ключевой кадр
Вращающийся сектор, достигнутым эффектом можно управлять с помощью ключевых кадров.
Например, следующий код ключевого кадра:
div {
animation-duration: 3s;
animation-name: identifier;
// more code
}
@keyframes identifier {
from { top: 0; }
to { top: 100px; }
}
DIVРасстояние от вершины0Измените положение на расстояние от вершины100pxположение, весь процесс требует3秒.
цветовой градиент
Веерообразный цветовой эффект — это процесс линейного градиента, мы можем пройтиlinear-gradientреализовать.
Например следующий код:
div {
background: linear-gradient(to right, white, black);
// more code
}
DIVЦвет фона градиента слева направо, от белого к черному;
Исследование косой функции
Конечно, можно сделать веерную форму для достижения эффекта, но стоимость реализации не так велика, какskewспуститься ~
Теперь давайте исказим квадрат напрямую.
// origin
div {
width: 100px;
height: 100px;
background: blue;
}
// after
div {
width: 100px;
height: 100px;
background: blue;
transform: skew(-10deg);
}
Как показано на рисунке:
::before ::after псевдоэлемент
Требования к предмету здесь очень четкие, дваDIV, если вы просто используете эти дваDIVДобавляя сам стиль, можно ли добиться эффекта?
::beforeСоздает псевдоэлемент, который будет первым элементом, соответствующим выбранному элементу.
::afterСоздает псевдоэлемент в качестве последнего элемента выбранных элементов.
::before 和 ::afterЭти два виртуальных элемента являются встроенными элементами по умолчанию и обычно работают вместе.contentСвойства для добавления контента.
Например:
div{
width: 100px;
height: 100px;
background: red;
}
div::after {
width: 100px;
height: 100px;
background: blue;
display: block;
content: '::after'
}
Если вы запустите приведенный выше код, вы получите上红下蓝дваDIV, и следующееDIVтакже содержит::afterшрифт.
Коробка-SIZING
Также есть яма, чтобы избежать ступенчатых деталей, детали границы и границы должны быть, как с ними обращаться, не выглядит так несуразно.
мы обычно используемborder: 1px solid #eee;Сделанный.
Как всем известно, вопрошающий снова изрыгнул его.
мы устанавливаемdivШирина и высота есть50pxПосле этого добавьте границу поверх него.border: 1px solid #eee;, то на практике мы эквивалентны установке52pxширина и высота.
использоватьbox-sizing: border-box;может решить эту проблему;
div {
width: 50px;
height: 50px;
background: red;
border: 1px solid #eee;
box-sizing: border-box;
}
Таким образом, полученные ширина и высота не изменятся, они по-прежнему50px.
Код реализации темы
Хорошо, все это сказано и сделано, давайте осознаем эффект следующей темы. следующим образомCSSКод:
.radar {
overflow: hidden;
position: relative;
margin: 200px;
width: 200px;
height: 200px;
border-radius: 50%;
background: #fff;
border: 1px solid #5ef2ff;
box-sizing: border-box;
}
.radar::before {
width: 100px;
height: 200px;
content: '';
display: block;
position: absolute;
right: 0;
top: 0;
box-sizing: border-box;
border-left: 1px solid #5ef2ff;
}
.radar::after {
width: 200px;
height: 100px;
content: '';
display: block;
box-sizing: border-box;
border-bottom: 1px solid #5ef2ff;
}
.fan {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
border-radius: 50%;
box-sizing: border-box;
border: 1px solid #5ef2ff;
width: 100px;
height: 100px;
}
.fan::after {
content: "";
width: 100px;
height: 100px;
display: block;
box-sizing: border-box;
position: relative;
top: -50%;
right: -50%;
transform-origin: 0% 100%;
border-bottom: 3px solid transparent;
border-image: linear-gradient(to right, transparent, #5ef2ff);
border-image-slice: 3;
background: transparent;
background-image: linear-gradient(to right, transparent, #9bfdfd);
animation: rotateAnimate 2s linear infinite;
}
@keyframes rotateAnimate {
from {
transform: rotate(0deg) skew(-10deg)
}
to {
transform: rotate(360deg) skew(-10deg)
}
}
Адрес онлайн-опытаДва DIV для достижения эффекта сканирования радара;Связанное хранилище исходного кодасклад.
Каково ваше решение этой проблемы?
Можете оставить сообщение ниже, учиться и поощрять друг друга~
Кодировать слова непросто. Может вам понравится, когда вы пройдете мимо? Заранее спасибо!
ε=ε=ε=┏(゜ロ゜;)┛
рекомендуется вамСоздайте свою визитную карточку GITHUBа такжеРазработайте простой апплет WeChat с нуля
Для получения дополнительной информации перейдите наjimmy github.