CSS의 간단한 마이크로 인터랙티브(Pt1):햄버거 메뉴 아이콘
23079 단어 uimicrointeractionsfrontendcss
이것은 마이크로 인터랙티브 시리즈의 첫 편으로 햄버거 메뉴 아이콘을 전면적으로 소개할 것이다. 이것은 인터넷에서 가장 자주 사용하는 요소 중의 하나이다.가장 유행하는 3가지 동작 유형과 CSS에서 이를 복제하는 방법에 대해 설명합니다.일부 JS를 사용하여 클래스만 전환합니다.
스태킹 및 회전
이것은 많은 응용 프로그램과 사이트에서 볼 수 있는 가장 광범위하게 사용되는 상호작용 중 하나입니다. 무슨 일이 일어났는지 분석해 봅시다.
우리는 먼저 용기에 세 개의 줄무늬 원소를 그릴 것이다.이것은 우리가 대부분의 예시에 사용할 기초이다.
body
.hamburger
.bar
.bar
.bar
이제 CSS의 경우 막대 그래프를 축소(기본 아이콘)로 지정하여 바탕을 만듭니다..hamburger {
height: 2.3rem;
width: 3rem;
display: inline-block;
cursor: pointer;
position: relative;
}
.bar {
border-bottom: 0.33rem solid white;
position: absolute;
display: block;
width: 100%;
&:first-of-type {
top: 0;
}
&:nth-of-type(2) {
top: 1rem;
}
&:nth-of-type(3) {
top: 2rem;
}
}
CSS 클래스를 전환하여 상호 작용을 수행할 것입니다. 다음은 간단한 JS입니다.const hamburger = document.querySelector('.hamburger');
hamburger.addEventListener('click', function(){
hamburger.classList.toggle('opened');
});
이제 애니메이션에 바로 들어갈 준비가 되었습니다. 애니메이션은 두 부분으로 구성되어 있습니다. 그것이 바로 쌓아올리기와 회전입니다.키 프레임을 사용하지 않고transition 속성을 다른 시간에 터치하도록 설정합니다. 쉼표로 구분된 값을 type-of-transition duration delay
로 전달할 수 있습니다.이렇게 .opened .bar
에 추가합니다.transition:
top 100ms,
transform 100ms 230ms,
opacity 100ms;
스타일을 .opened
클래스에 적용할 때가 되었다. 우리는 중간의 줄을 빼고 윗부분과 밑부분의 줄을 이동하고 회전시켜 먼저 선을 형성하고 그 다음에 X를 형성할 것이다.또한 X가 스택 아이콘으로 다시 이동하는 시간에 역변환 타이밍을 적용합니다..opened {
.bar {
transition:
top 100ms,
transform 100ms 230ms,
opacity 100ms;
&:first-of-type {
top: 1em;
transform: rotate(45deg);
}
&:nth-of-type(2) {
opacity: 0;
}
&:nth-of-type(3) {
top: 1em;
transform: rotate(-45deg);
}
}
}
재미를 더하기 위해 애니메이션에 포착 효과를 더하기 위해 .hamburger .bar
와 .opened .bar
에 모두 과도 시간 기능이 추가되었습니다.transition-timing-function: cubic-bezier(1, 0.05, 0.62, 1.78);
최종 결과:슬라이딩 및 회전
이런 상호작용은 상술한 것과 유사하지만 사람들은 더욱 원시적(또는 효율적이다!)이라고 할 수 있다.모든 애니메이션은 한 단계에서 완성할 수 있습니다.하지만 전체적으로 우리가 무엇을 해야 하는지 봅시다.
우리의 줄의 초기 위치는 같고, 다른 것은 이번에 우리는
transition: all
를 추가하여 우리의 코드를 간소화할 것이다. 왜냐하면 이런 다단계 애니메이션이 필요하지 않기 때문이다.hamburger {
height: 2.3rem;
width: 3rem;
display: inline-block;
margin: 0 auto;
cursor: pointer;
position: relative;
.bar {
border-bottom: 0.33rem solid white;
position: absolute;
display: block;
width: 100%;
transition: all 350ms;
transition-timing-function: cubic-bezier(1, 0.05, 0.62, 1.78);
&:first-of-type {
top: 0;
}
&:nth-of-type(2) {
top: 1rem;
}
&:nth-of-type(3) {
top: 2rem;
}
}
}
또한 Dellopened
클래스, 특히 두 번째 요소는 이제 왼쪽으로 슬라이드하여 투명해야 합니다..opened {
.bar {
&:first-of-type {
top: 1em;
transform: rotate(45deg);
}
&:nth-of-type(2) {
opacity: 0;
transform: translateX(-30px);
}
&:nth-of-type(3) {
top: 1em;
transform: rotate(-45deg);
}
}
}
최종 결과:경탄
햄버거 버튼을 뒤집는 것은 미리 맞춤형 아이콘을 사용하는 좋은 방법이자 내가 자주 보는 또 다른 것이다.메커니즘은 매우 간단하다. 한쪽에는 햄버거 아이콘이 있고 다른 한쪽에는 닫힌 아이콘이 있는데 클릭(또는 어떤 동작)을 하면 뒤집힌다.
이를 위해서는 먼저 HTML(Slim)을 조정해야 합니다.
body
.hamburger
.hamburger-button
.icon-opened
.bar
.bar
.bar
.hamburger-button.hamburger-button-back
.icon-closed
.bar
.bar
이것은 두 가지 요소를 만들 것이다. 하나는 우리가 하나의 스트라이프 아이콘으로 설계할 것이고, 다른 하나는 x와 같으며, .hamburger-button
를 배경으로 하는 소포와 우리의 스트라이프 내부icon-
요소를 포함할 것이다.네, 이것은 상당히 많은 코드입니다. 그러나 이것은 단지 CSS로 아이콘을 만들고 있기 때문입니다. 만약 당신이 SVG 아이콘을 사용한다면 이것은 훨씬 간단해 보일 것입니다.이제 외부 요소에 CSS를 추가합니다.
.hamburger {
margin: 0 auto;
&-button {
border-radius: 100px;
display: inline-block;
cursor: pointer;
background: linear-gradient(to right, #485563, #29323c);
// the padding along with the inner wrap adds up to 6rem*6rem circle
padding: 1.85rem 1.5rem;
}
}
이제 아이콘을 추가합니다.어떤 것들은 더 간결한 코드로 조합될 수 있지만, 우리는 여기서 이렇게 하지 않을 것이다. 왜냐하면 나는 일을 가능한 한 쉽게 이해하고 따르게 하고 싶기 때문이다. .icon-opened {
height: 2.3rem;
width: 3rem;
position: relative;
.bar {
border-bottom: 0.33rem solid white;
position: absolute;
display: block;
width: 100%;
&:first-of-type {
top: 0;
}
&:nth-of-type(2) {
top: 1rem;
}
&:nth-of-type(3) {
top: 2rem;
}
}
}
.icon-closed {
height: 2.3rem;
width: 3rem;
position: relative;
.bar {
border-bottom: 0.33rem solid white;
position: absolute;
display: block;
width: 100%;
&:first-of-type {
top: 1em;
transform: rotate(45deg);
}
&:nth-of-type(2) {
top: 1em;
transform: rotate(-45deg);
}
}
}
이때 다음과 같이 두 개의 아이콘이 나란히 놓여야 한다.일단 우리가 여기에 도착하면 애니메이션을 만들 수 있습니다. 자바스크립트 코드는 우리가 사용한 것과 같이 외부
.hamburger
요소에서 클래스를 전환하기만 하면 됩니다.CSS 3D를 사용하여 속성 및 위치를 변환합니다.우선, 우리는 X 아이콘을 뒤집어 단추의 뒷면에 놓아야 한다.이를 위해, 우리는 절대 포지셔닝
.hamburger-button
원소를 -back
원소에transform 속성을 추가할 것입니다.우리는 또한 backface-visibility: hidden;
를 추가할 것이다. 속성 이름은 매우 자명하게 들리지만 원소의 뒷면을 숨긴다. 이것은 보통'뒤집을 수 있는'원소에 적용되어 z 인덱스와 층 고장으로 인한 반짝임을 방지한다. &-button {
border-radius: 100px;
display: inline-block;
cursor: pointer;
background: linear-gradient(to right, #485563, #29323c);
// the padding along with the inner wrap adds up to 6rem*6rem circle
padding: 1.85rem 1.5rem;
position: absolute;
top: 0;
left: 0;
backface-visibility: hidden;
&-back {
transform: rotateY(180deg);
}
}
또한 중첩된 요소도 3D 공간에서 렌더링되도록 기본.hamburger
요소 및 transform-style: preserve-3d
요소에 미리 정의된 치수 및 변환 속성을 추가합니다..hamburger {
margin: 0 auto;
width: 6rem;
height: 6rem;
transition: all 300ms ease-in;
transform-style: preserve-3d;
}
지금 유일하게 해야 할 일은 .hamburger
류를 추가할 때 전체opened
원소를 뒤집는 것이다!최종 결과:
이 세 개의 마이크로 상호작용은 SVG나 그 어떠한 JS 라이브러리도 필요하지 않고 CSS에서 완전히 완성할 수 있다. 비록 매우 간단하지만, 일부 추가 회전, 과도 시간과 다른 속성을 통해 조정하여 더욱 매끄럽거나 복잡하게 보일 수 있다.만약 네가 인터넷을 둘러본다면 대부분의 햄버거 아이콘이 위의 하나를 상호작용의 기초로 사용한다는 것을 알게 될 것이다. 이것은 당연한 것이다.상술한 방법은 간단한 해결 방안을 제공하는 동시에 관건적인 프레임이나 기이한 라이브러리를 사용할 필요가 없다.너는 복제하기 쉬운 다른 햄버거 아이콘의 상호작용이 있다는 것을 아니?만약 그렇다면, 나도 이런 말을 기꺼이 들을 것이다!
Reference
이 문제에 관하여(CSS의 간단한 마이크로 인터랙티브(Pt1):햄버거 메뉴 아이콘), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/saintasia/easy-micro-interactions-in-css-pt1-hamburger-menu-icons-541j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)