transition
Свойство transition используется, когда нам нужно плавно изменить CSS-свойства между двумя состояниями элемента. Например, при наведении мышкой.
Пример
Скопировать ссылку «Пример» Скопировано
Подробно
Скопировать ссылку «Подробно» Скопировано
Свойство transition это шорткат. Как, например, margin или background . Оно включает в себя несколько подсвойств:
- transition — property — указываем свойство, которое хотим плавно изменить;
- transition — duration — длительность перехода;
- transition — timing — function — функция, описывающая скорость изменения свойства;
- transition — delay — задержка перед началом изменения.
Как записывается
Скопировать ссылку «Как записывается» Скопировано
Применить к одному свойству:
.selector transition: transform 4s;>
.selector transition: transform 4s; >
.selector transition: transform 4s 1s;>
.selector transition: transform 4s 1s; >
.selector transition: transform 4s ease-in-out 1s;>
.selector transition: transform 4s ease-in-out 1s; >
Применить к двум свойствам:
.selector transition: transform 4s, color 1s;>
.selector transition: transform 4s, color 1s; >
Применить ко всем свойствам, которые будут меняться:
.selector transition: all 0.5s ease-out;>
.selector transition: all 0.5s ease-out; >
Как понять
Скопировать ссылку «Как понять» Скопировано
Предположим, у нас есть кнопка, у которой мы хотим изменить фон при наведении мышкой.
button class="button">Кнопкаbutton>
Тогда можно сказать, что у кнопки есть два состояния:
- Базовое состояние, когда мышка не над кнопкой.
- Состояние при наведении курсора мыши (ховер-состояние).
Стили для двух этих состояний могут быть записаны в CSS вот так 👇
Стили для базового состояния:
.button background-color: blue;>
.button background-color: blue; >
.button:hover background-color: white;>
.button:hover background-color: white; >
Чтобы при наведении фон кнопки изменялся не скачком, а плавно, мы используем свойство transition для плавного изменения цвета фона.
Стили для базового состояния:
.button background-color: blue; transition: background-color 0.6s;>
.button background-color: blue; transition: background-color 0.6s; >
.button:hover background-color: white;>
.button:hover background-color: white; >
Если мы хотим плавно изменить два и более свойств, нужно просто перечислить их через запятую.
Стили для базового состояния:
.button background-color: pink; transition: background-color 0.6s, transform 0.5s;>
.button background-color: pink; transition: background-color 0.6s, transform 0.5s; >
.button:hover background-color: white; transform: scale(110%);>
.button:hover background-color: white; transform: scale(110%); >
Не забывай о том, что вместе с изменяемым свойством обязательно должна указываться длительность изменения ( .5s ).
Подсказки
Скопировать ссылку «Подсказки» Скопировано
💡 Обратите внимание, что свойство transition мы задали в стилях для базового состояния. Таким образом, мы заранее говорим браузеру, какое свойство должно изменяться плавно.
💡 С помощью transition можно плавно изменять любое свойство, у которого значение записывается с помощью чисел (например, margin ). Исключения: visibility , z — index .
💡 По возможности старайтесь не использовать слово all для описания перехода ( transition : all . 3s ). Да, это проще на первоначальном этапе, но позже из-за этого в какой-то момент могут начать плавно изменяться свойства, которые не должны этого делать. Ну и вообще, когда браузер встречает слово all , он начинает перебирать каждое свойство элемента в поисках необходимого. Это ненужная нагрузка.
💡 Старайтесь использовать для анимации в первую очередь свойства transform и opacity — они самые производительные, потому что не приводят к перезапуску процессов Layout и Paint. Изменяйте свойства left , top , inset , margin , padding , width , inline — size , height , block — size и прочие с осторожностью, только когда без этого никак не обойтись.
Особенности
Скопировать ссылку «Особенности» Скопировано
💡 Вторым состоянием необязательно должно быть состояние при наведении. Это может быть состояние :focus , :active , :checked или, например, появление дополнительного класса.
💡 Мы можем настроить transition таким образом, что при изменении состояния переход будет выполняться с одной скоростью, а при обратном изменении состояния — с другой.
Стили для базового состояния:
.button background-color: pink; transition: background-color 0.3s, transform 0.2s;>
.button background-color: pink; transition: background-color 0.3s, transform 0.2s; >
.button:hover background-color: white; transform: scale(110%); transition: background-color 3s, transform 2.5s;>
.button:hover background-color: white; transform: scale(110%); transition: background-color 3s, transform 2.5s; >
Обратите внимание, в этом случае свойство transition задаётся для обоих состояний.
💡 Длительность перехода может задаваться в секундах ( 0 . 3s ) или в миллисекундах ( 300ms ). Ноль перед точкой можно не писать ( .3s ).
💡 Значение свойства z — index записывается числом, но его нельзя плавно изменить никаким способом.
💡 Значение свойства visibility записывается строкой, но его в связке с opacity можно плавно изменять при помощи transition .
💡 Кроме использования для изменения внешнего вида элемента, transition прекрасно подходит для решения задач с появлением элементов. Например, при реализации тултипов или всплывающих меню:
Fade in
Наведи на меняЭта подсказка проявиласьSlide up
Наведи на меняЭто подсказка, которая всплылаdiv> h2>Fade inh2> div class="tooltip-cnt"> span class="tooltip-target">Наведи на меняspan> div class="tooltip">Эта подсказка проявиласьdiv> div> div> div class="transitioned"> h2>Slide uph2> div class="tooltip-cnt"> span class="tooltip-target">Наведи на меняspan> div class="tooltip">Это подсказка, которая всплылаdiv> div> div>
.tooltip-cnt position: relative;> .tooltip position: absolute; /* Описываем переход */ transition: opacity 0.4s, visibility 0.4s, transform 0.4s; /* Прячем элемент */ opacity: 0; visibility: hidden;> .transitioned .tooltip /* Второй тултип еще опускаем вниз */ transform: translateY(20px);> .tooltip-target:hover + .tooltip opacity: 1; visibility: visible;> .transitioned .tooltip-target:hover + .tooltip /* Поднимаем второй тултип обратно вверх при появлении */ transform: translateY(0);>
.tooltip-cnt position: relative; > .tooltip position: absolute; /* Описываем переход */ transition: opacity 0.4s, visibility 0.4s, transform 0.4s; /* Прячем элемент */ opacity: 0; visibility: hidden; > .transitioned .tooltip /* Второй тултип еще опускаем вниз */ transform: translateY(20px); > .tooltip-target:hover + .tooltip opacity: 1; visibility: visible; > .transitioned .tooltip-target:hover + .tooltip /* Поднимаем второй тултип обратно вверх при появлении */ transform: translateY(0); >
Обратите внимание, что мы прописали visibility как одно из свойств, которое нужно плавно изменить. Это работает в связке с opacity и обеспечивает возможность плавного появления и скрытия элемента:
.tooltip transition: opacity 0.4s, visibility 0.4s;>
.tooltip transition: opacity 0.4s, visibility 0.4s; >
Если использовать только opacity , то элемент станет невидимым, но будет доступен для взаимодействия с мышкой и клавиатурой.
Если использовать только visibility , то скрытие и появление не будет плавным.
CSS Transition Left to Right working, RIght to Left
The following tutorial shows you how to use CSS to do «CSS Transition Left to Right working, RIght to Left».
CSS Style
The CSS style to do «CSS Transition Left to Right working, RIght to Left» is
ul !-- w w w . de m o 2 s . co m --> width:100%; margin:0; -webkit-box-sizing:border-box; -moz-box-sizing:border-box; box-sizing:border-box; > li < display:inline-block; width:100px; -webkit-box-sizing:border-box; -moz-box-sizing:border-box; box-sizing:border-box; > li:hover~#arrow < opacity:1; > li:nth-child(1):hover~#arrow < margin-left:0; > li:nth-child(2):hover~#arrow < margin-left:100px; > li:nth-child(3):hover~#arrow < margin-left:200px; > li:nth-child(4):hover~#arrow < margin-left:300px; > li:nth-child(5):hover~#arrow < margin-left:400px; > #arrow < margin-left:-50px; position:relative; width:100px; text-align:center; opacity:0; -webkit-box-sizing:border-box; -moz-box-sizing:border-box; box-sizing:border-box; transition:margin-left 1s ease, opacity 0.3s ease; -webkit-transition:margin-left 1s ease, opacity 0.3s ease; -moz-transition:margin-left 1s ease, opacity 0.3s ease; -o-transition:margin-left 1s ease, opacity 0.3s ease; > #arrow:before < content:""; display:block; width:0; border:10px solid red; border-color:red transparent transparent transparent; position:absolute; top:100%; left:50%; margin-left:-10px; > ul < border:2px dashed green; padding:4px; > li < border:1px solid blue; text-align:center; > #arrow < outline:1px dashed red; >
HTML Body
body> ul> li>Menu 1 li>Menu 2 li>Menu 3 li>Menu 4 li>Menu 5 div id="arrow"> Arrow
The following iframe shows the result. You can view the full source code and open it in another tab.
html> head> title>Menu arrow follow meta name="viewport" content="width=device-width, initial-scale=1"> style id="compiled-css" type="text/css"> ul!-- w w w .d em o 2 s . co m --> width: 100%; margin: 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; > li< display: inline-block; width: 100px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; > li:hover ~ #arrow< opacity: 1; > li:nth-child(1):hover ~ #arrow< margin-left: 0; > li:nth-child(2):hover ~ #arrow< margin-left: 100px; > li:nth-child(3):hover ~ #arrow< margin-left: 200px; > li:nth-child(4):hover ~ #arrow< margin-left: 300px; > li:nth-child(5):hover ~ #arrow< margin-left: 400px; > #arrow< margin-left: -50px; /* border:0px solid red; */ position:relative; width:100px; text-align:center; opacity: 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; transition: margin-left 1s ease, opacity 0.3s ease; -webkit-transition: margin-left 1s ease, opacity 0.3s ease; -moz-transition: margin-left 1s ease, opacity 0.3s ease; -o-transition: margin-left 1s ease, opacity 0.3s ease; > /* faking a triangle using borders and pseudo element :before */ #arrow:before< content:""; display:block; width:0; border:10px solid red; border-color:red transparent transparent transparent; position:absolute; top:100%; left:50%; margin-left:-10px; > ul< border: 2px dashed green; padding: 4px; > li< border: 1px solid blue; text-align: center; > #arrow< outline: 1px dashed red; > body> ul> li>Menu 1 li>Menu 2 li>Menu 3 li>Menu 4 li>Menu 5 div id="arrow">Arrow
Related
- CSS transition jump to center
- CSS Transition Jumpy / Jerky
- CSS Transition Jumpy / Jerky (Demo 2)
- CSS Transition Left to Right working, RIght to Left
- CSS Transition Left to Right working, RIght to Left (Demo 2)
- CSS transition smooth
- CSS transition with overflow
demo2s.com | Email: | Demo Source and Support. All rights reserved.