покупки сегодняБлог сайта -- shoptalkhow, очень интересно посмотреть на такой интерфейс:
Я думаю, что его стиль уникален, особенно некоторые безели.
Эй, вот функция границ, чтобы увидеть, какие трюки вы можете делать с границами с помощью CSS.
пограничная собственность
Когда речь заходит о границах, первое, что приходит на умborder
, чаще всего используетсяsolid
,dashed
, что показано на рисунке вышеdashed
.
За исключением самых распространенныхsolid
,dashed
, граница CSS также поддерживаетnone
,hidden
,dotted
,double
,groove
,ridge
,inset
,outset
и другие стили. Удалитьnone
,hidden
чтобы увидеть все изначально поддерживаемые стили границ:
Это основы.Если вы хотите реализовать границу других стилей или добавить анимацию к границе, вам нужно сотрудничать с некоторыми другими свойствами или открыть свой разум. Хорошо, давайте взглянем на некоторые дополнительные интересные границы.
Изменение длины границы
Давайте начнем с более простого, чтобы добиться такого эффекта границы:
На самом деле это два псевдоэлемента, которые заимствуют элементы. Два псевдоэлемента устанавливают только верхнюю и левую границы, а также нижнюю и правую границы соответственно.hover
При изменении высоты и ширины два псевдоэлемента. Очень легко понять.
div {
position: relative;
border: 1px solid #03A9F3;
&::before,
&::after {
content: "";
position: absolute;
width: 20px;
height: 20px;
}
&::before {
top: -5px;
left: -5px;
border-top: 1px solid var(--borderColor);
border-left: 1px solid var(--borderColor);
}
&::after {
right: -5px;
bottom: -5px;
border-bottom: 1px solid var(--borderColor);
border-right: 1px solid var(--borderColor);
}
&:hover::before,
&:hover::after {
width: calc(100% + 9px);
height: calc(100% + 9px);
}
}
CodePen Demo -- width border animation
Далее он начнет углублять сложность.
Анимация пунктирной границы
использоватьdashed
ключевое слово, чтобы легко создавать пунктирные границы.
div {
border: 1px dashed #333;
}
Конечно, наша цель - сдвинуть границу. использоватьdashed
Ключевые слова ни в коем случае. Но есть много способов реализовать пунктирные линии в CSS, например, градиенты — хороший способ:
div {
background: linear-gradient(90deg, #333 50%, transparent 0) repeat-x;
background-size: 4px 1px;
background-position: 0 0;
}
Взгляните, пунктирные линии, смоделированные с помощью градиентов, выглядят следующим образом:
Ну, градиент поддерживает несколько градиентов, мы можем использовать градиенты для представления всех четырех сторон контейнера:
div {
background:
linear-gradient(90deg, #333 50%, transparent 0) repeat-x,
linear-gradient(90deg, #333 50%, transparent 0) repeat-x,
linear-gradient(0deg, #333 50%, transparent 0) repeat-y,
linear-gradient(0deg, #333 50%, transparent 0) repeat-y;
background-size: 4px 1px, 4px 1px, 1px 4px, 1px 4px;
background-position: 0 0, 0 100%, 0 0, 100% 0;
}
Эффект следующий:
Итак, наша анимация с пунктирной рамкой завершена более чем наполовину. Несмотря на то чтоborder-style: dashed
Анимации не поддерживаются, но поддерживаются градиенты. Мы добавляем еще один к вышеупомянутому divhover
Эффект,hover
при добавленииanimation
анимация, изменение элементаbackground-position
Вот и все.
div:hover {
animation: linearGradientMove .3s infinite linear;
}
@keyframes linearGradientMove {
100% {
background-position: 4px 0, -4px 100%, 0 -4px, 100% 4px;
}
}
Хорошо, посмотрите на эффект, когда наведение поднимается, граница может бытьпошевеливайся, поскольку вся анимация связана встык, анимация с бесконечным циклом выглядит так, будто пунктирная граница все время движется, что представляет собой небольшую хитрость или хитрость:
Вот еще одна маленькая хитрость, если мы хотим, чтобы анимация пунктирной границы переходила от других границ к пунктирной границе, а затем анимировалась. Также можно имитировать полностью по градиенту, если вы хотите сохранить некоторый код, используйтеborder
будет быстрее, вот так:
div {
border: 1px solid #333;
&:hover {
border: none;
background:
linear-gradient(90deg, #333 50%, transparent 0) repeat-x,
linear-gradient(90deg, #333 50%, transparent 0) repeat-x,
linear-gradient(0deg, #333 50%, transparent 0) repeat-y,
linear-gradient(0deg, #333 50%, transparent 0) repeat-y;
background-size: 4px 1px, 4px 1px, 1px 4px, 1px 4px;
background-position: 0 0, 0 100%, 0 0, 100% 0;
}
}
Из-за разницы в положении границы и фона на блочной модели будет явное визуальное смещение:
Для решения этой проблемы мы можемborder
заменитьoutline
,так какoutline
можно установитьoutline-offset
. Он может прекрасно решить эту проблему:
div {
outline: 1px solid #333;
outline-offset: -1px;
&:hover {
outline: none;
}
}
Наконец, взгляните на эффект, примененный к фактической кнопке:
Полный код приведенной выше демонстрации выглядит следующим образом:
CodePen Demo -- dashed border animation
На самом деле, из-за особого отношения между фоном и рамкой, при использовании границы путем изменения
background-position
Ее тоже можно решить, но сложнее. Для заполнения отношений между фоном и границей вы можете прочитать эту статью:Различные реализации полосатых бордюров
Другие классные способы использования градиентов
С помощью градиентов можно добиться большего, чем просто вышеперечисленные эффекты.
Продолжаем углубляться в градиент и с помощью градиента добиваемся вот такого фона:
div {
position: relative;
&::after {
content: '';
position: absolute;
left: -50%;
top: -50%;
width: 200%;
height: 200%;
background-repeat: no-repeat;
background-size: 50% 50%, 50% 50%;
background-position: 0 0, 100% 0, 100% 100%, 0 100%;
background-image: linear-gradient(#399953, #399953), linear-gradient(#fbb300, #fbb300), linear-gradient(#d53e33, #d53e33), linear-gradient(#377af5, #377af5);
}
}
Обратите внимание, что здесь используется графика, сгенерированная псевдоэлементом элемента, а ширина и высота такие же, как у родительского элемента.200%
, за пределамиoverflow: hidden
.
Затем добавьте к нему вращение:
div {
animation: rotate 4s linear infinite;
}
@keyframes rotate {
100% {
transform: rotate(1turn);
}
}
Взгляните на эффект:
Наконец, используйте псевдоэлемент, чтобы замаскировать середину, и получится анимация Nice border (анимация будет с полупрозрачными элементами, что удобно для понимания принципа):
Полный код приведенного выше демо выглядит следующим образом, впервые я увидел этот эффект у этого автора --Jesse B
CodePen Demo -- gradient border animation
Изменить цвет градиента
После освоения вышеуказанных базовых навыков мы можем внести некоторые коррективы в цвета градиента, мы превратим 4 цвета в 1 цвет:
div::after {
content: '';
position: absolute;
left: -50%;
top: -50%;
width: 200%;
height: 200%;
background-color: #fff;
background-repeat: no-repeat;
background-size: 50% 50%;
background-position: 0 0;
background-image: linear-gradient(#399953, #399953);
}
Получите такой график:
Опять же, пусть он вращается вместе, и появляется одноцветная анимация погони за границей:
CodePen Demo -- gradient border animation 2
Вау, очень красивый вид. Однако, если это одна линия, то есть явный дефект, то есть конец границы представляет собой небольшой треугольник вместо вертикального, что может быть неприменимо в некоторых сценариях или неприемлемо для ПМ.
Есть ли способ избавиться от этих маленьких треугольников? Да, далее мы представляем другой метод, используяclip-path
, удалите эти маленькие треугольники.
conic-gradient
магия
вновь ввестиclip-path
Перед этим поговорим об угловых градиентах.
Вышеупомянутое в основном используется для линейных градиентовlinear-gradient
. Мы используем угловой градиентconic-gradient
На самом деле можно добиться точно такого же эффекта.
мы пытаемся использоватьconic-gradient
Это тоже реализовано один раз, на этот раз для темного стиля. Основной код выглядит следующим образом:
.conic {
position: relative;
&::before {
content: '';
position: absolute;
left: -50%;
top: -50%;
width: 200%;
height: 200%;
background: conic-gradient(transparent, rgba(168, 239, 255, 1), transparent 30%);
animation: rotate 4s linear infinite;
}
}
@keyframes rotate {
100% {
transform: rotate(1turn);
}
}
Визуализация и схематические диаграммы выглядят следующим образом: поверните график с частичным угловым градиентом и используйте другой псевдоэлемент, чтобы замаскировать среднюю часть, чтобы просочилась только часть линии:
CodePen Demo -- Rotating border 3
clip-path
магия
старый друг сноваclip-path
, интересных вещей никогда не будет.
clip-path
Можно анимировать саму точку координат, переходя от одной формы отсечения к другой форме отсечения.
Используя эту функцию, мы можем ловко реализовать такой эффект следования за границей. Псевдокод выглядит следующим образом:
div {
position: relative;
&::before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
border: 2px solid gold;
animation: clippath 3s infinite linear;
}
}
@keyframes clippath {
0%,
100% {
clip-path: inset(0 0 95% 0);
}
25% {
clip-path: inset(0 95% 0 0);
}
50% {
clip-path: inset(95% 0 0 0);
}
75% {
clip-path: inset(0 0 0 95%);
}
}
Визуализации вместе со схематической диаграммой:
CodePen - clip-path border animation
Здесь, поскольку элемент будет обрезан, используйте псевдоэлемент в качестве фона для обрезки и анимации, используйтеclip-path
Преимущество в том, что на обрезанном кадре не образуются маленькие треугольники. В то же время этот метод также поддерживает закругленные углы.border-radius
из.
Если мы используем другой псевдоэлемент для фактической реализации стиля кнопки, мы можем получить такой эффект:
CodePen - clip-path border animation 2
overflow
магия
Следующий трюк реализован с использованием переполнения. Реализуйте такую анимацию границы:
зачем использоватьoverflow
выполнить?
Вставьте схему:
Два основных момента:
- мы используем
overflow: hidden
, скрывает весь элемент, который изначально находился вне контейнера - воспользовался
transform-origin
, который управляет центром вращения элемента
Вы обнаружили, что на самом деле почти в большинстве интересных CSS-эффектов используются похожие приемы:
Проще говоря, анимация, которую мы видим, — это лишь малая часть исходного явления.Благодаря специальной обрезке, изменению прозрачности, маскам и т. д. мы наконец видим только часть исходного явления.
border-image
магия
использоватьborder-image
, мы также можем реализовать некоторые интересные анимации границ. оborder-image
, есть очень хорошая поясняющая статья --Правильное использование border-image, эта статья не слишком много объясняет основное определение.
Если у нас есть такой график:
может воспользоватьсяborder-image-slice
иborder-image-repeat
свойства, чтобы получить аналогичный шаблон границы:
div {
width: 200px;
height: 120px;
border: 24px solid;
border-image: url(image-url);
border-image-slice: 32;
border-image-repeat: round;
}
Исходя из этого, высоту и ширину элемента можно менять по желанию, чтобы его можно было расширить до любого размера границы контейнера:
CodePen Demo -- border-image Demo
Далее в этой статье --How to Animate a SVG with border-image, также описывает использованиеborder-image
Анимация границы очень крутая.
В отличие от приведенного выше примера, нам нужно только заставить наш узор двигаться, то есть нам нужно такое фоновое изображение (самородки не поддерживают анимацию SVG,Исходный адрес изображения):
Затем мы также можем получить карту движущейся границы, код точно такой же, но граница движется:
CodePen Demo -- Dancing Skull Border
border-image
Используйте градиенты
border-image
За исключением ссылок на текстурыurl
Кроме того, он также может быть непосредственно заполнен цветом или градиентом.
Также была предыдущая статья оborder-image
Статьи --Умело реализуйте градиентную границу с закругленными углами
мы можем использоватьborder-image
+ filter
+ clip-path
Закругленная граница, реализующая преобразование градиента:
.border-image-clip-path {
width: 200px;
height: 100px;
border: 10px solid;
border-image: linear-gradient(45deg, gold, deeppink) 1;
clip-path: inset(0px round 10px);
animation: huerotate 6s infinite linear;
filter: hue-rotate(360deg);
}
@keyframes huerotate {
0% {
filter: hue-rotate(0deg);
}
100% {
filter: hue-rotate(360deg);
}
}
Наконец
В этой статье представлены некоторые трюки с анимацией границ, которые я считаю более интересными.Конечно, есть много интересных эффектов, создаваемых CSS.Из-за нехватки места я не буду раскрывать их по одному.
Это конец этой статьи, надеюсь, она вам поможет :), если вы хотите получить самую интересную информацию о CSS, не пропустите мой официальный аккаунт --Интересные факты о внешнем интерфейсе iCSS
Другие замечательные технические статьи по CSS собраны в моемGithub -- iCSS, продолжайте обновлять, добро пожаловать, нажмите звездочку, чтобы подписаться на коллекцию.
Если у вас есть какие-либо вопросы или предложения, вы можете общаться больше.Оригинальные статьи ограничены в написании и знаниях.Если в статье есть какие-либо неточности, пожалуйста, дайте мне знать.