Анимация панели вкладок - только на CSS

Разработка Анимация панели вкладок - только на CSS

Нет прав для скачивания
Анимация панели вкладок - только на CSS
Пишем нашу разметку:
HTML:
<nav class="tabbar">
    <div>
        <input id="menu-1" type="radio" name="menu" checked>
        <label for="menu-1">
            <svg>
                <use xlink:href="#messageIcon">
            </svg>
            <span>Messages</span>
        </label>
        <input id="menu-2" type="radio" name="menu">
        <label for="menu-2">
            <svg>
                <use xlink:href="#imageIcon">
            </svg>
            <span>Images</span>
        </label>
        <input id="menu-3" type="radio" name="menu">
        <label for="menu-3">
            <svg>
                <use xlink:href="#settingsIcon">
            </svg>
            <span>Settings</span>
        </label>
        <span></span>
    </div>
</nav>

<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
    <symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="messageIcon" fill="currentColor">
        <path d="M19.07 4.93a10 10 0 0 0-16.28 11 1.06 1.06 0 0 1 .09.64L2 20.8a1 1 0 0 0 .27.91A1 1 0 0 0 3 22h.2l4.28-.86a1.26 1.26 0 0 1 .64.09 10 10 0 0 0 11-16.28zM8 13a1 1 0 1 1 1-1 1 1 0 0 1-1 1zm4 0a1 1 0 1 1 1-1 1 1 0 0 1-1 1zm4 0a1 1 0 1 1 1-1 1 1 0 0 1-1 1z" />
    </symbol>
    <symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="imageIcon" fill="currentColor">
        <path d="M18 3H6a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3h12a3 3 0 0 0 3-3V6a3 3 0 0 0-3-3zM8 7a1.5 1.5 0 1 1-1.5 1.5A1.5 1.5 0 0 1 8 7zm11 10.83A1.09 1.09 0 0 1 18 19H6l7.57-6.82a.69.69 0 0 1 .93 0l4.5 4.48z" />
    </symbol>
    <symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="settingsIcon" fill="currentColor">
        <circle cx="12" cy="12" r="1.5" />
        <path d="M21.89 10.32L21.1 7.8a2.26 2.26 0 0 0-2.88-1.51l-.34.11a1.74 1.74 0 0 1-1.59-.26l-.11-.08a1.76 1.76 0 0 1-.69-1.43v-.28a2.37 2.37 0 0 0-.68-1.68 2.26 2.26 0 0 0-1.6-.67h-2.55a2.32 2.32 0 0 0-2.29 2.33v.24a1.94 1.94 0 0 1-.73 1.51l-.13.1a1.93 1.93 0 0 1-1.78.29 2.14 2.14 0 0 0-1.68.12 2.18 2.18 0 0 0-1.12 1.33l-.82 2.6a2.34 2.34 0 0 0 1.48 2.94h.16a1.83 1.83 0 0 1 1.12 1.22l.06.16a2.06 2.06 0 0 1-.23 1.86 2.37 2.37 0 0 0 .49 3.3l2.07 1.57a2.25 2.25 0 0 0 1.35.43A2 2 0 0 0 9 22a2.25 2.25 0 0 0 1.47-1l.23-.33a1.8 1.8 0 0 1 1.43-.77 1.75 1.75 0 0 1 1.5.78l.12.17a2.24 2.24 0 0 0 3.22.53L19 19.86a2.38 2.38 0 0 0 .5-3.23l-.26-.38A2 2 0 0 1 19 14.6a1.89 1.89 0 0 1 1.21-1.28l.2-.07a2.36 2.36 0 0 0 1.48-2.93zM12 15.5a3.5 3.5 0 1 1 3.5-3.5 3.5 3.5 0 0 1-3.5 3.5z" />
    </symbol>
</svg>

<!-- dribbble -->
<a class="dribbble" href="https://dribbble.com/shots/6612066-Tab-Bar-active-animation" target="_blank"><img src="https://cdn.dribbble.com/assets/dribbble-ball-mark-2bd45f09c2fb58dbbfb44766d5d1d07c5a12972d602ef8b32204d28fa3dda554.svg" alt=""></a>
Пишем стиль:
SCSS:
.tabbar {
    --icon-active: #275EFE;
    --icon-inactive: #6C7486;
    --icon-hover: #99A3BA;
    --text: #E4ECFA;
    --circle: #E4ECFA;
    --background: #171C28;
    --shadow: rgba(18, 22, 33, .1);
    border-radius: 0 0 12px 12px;
    background: var(--background);
    width: 240px;
    height: 64px;
    padding: 0 12px;
    box-shadow: 0 8px 16px var(--shadow);
    & > div {
        display: flex;
        height: 100%;
        position: relative;
        label {
            flex: 0 0 33.33%;
            display: flex;
            justify-content: center;
            align-items: center;
            position: relative;
            cursor: pointer;
            z-index: 1;
            svg,
            span {
                display: block;
                -webkit-backface-visibility: hidden;
                transition: transform .4s cubic-bezier(.2, .64, .48, 1.12), opacity .4s ease, color .4s ease;
                transform: translateY(var(--y)) scale(var(--s));
            }
            svg {
                --y: 0;
                --s: .84;
                width: 24px;
                height: 24px;
                margin: auto;
                color: var(--icon-inactive);
                transform-origin: 50% 50%;
            }
            span {
                --y: -8px;
                --s: .92;
                font-size: 10px;
                font-weight: 500;
                position: absolute;
                left: 0;
                right: 0;
                text-align: center;
                bottom: 0;
                opacity: 0;
                color: var(--text);
                transform-origin: 50% 0;
            }
            &:hover {
                svg {
                    color: var(--icon-hover);
                }
            }
            &:active {
                svg {
                    --s: .76;
                }
            }
        }
        input {
            display: none;
            &:nth-of-type(1) {
                &:checked {
                    & + label + input + label + input + label + span {
                        --x: 0;
                    }
                }
            }
            &:nth-of-type(2) {
                &:checked {
                    & + label + input + label + span {
                        --x: 100%;
                    }
                }
            }
            &:nth-of-type(3) {
                &:checked {
                    & + label + span {
                        --x: 200%;
                    }
                }
            }
            &:checked {
                & + label {
                    svg {
                        --y: -24px;
                        --s: 1;
                        color: var(--icon-active);
                    }
                    span {
                        --s: 1;
                        --y: -14px;
                        opacity: 1;
                    }
                }
            }
        }
        & > span {
            --x: 0;
            display: block;
            position: absolute;
            left: 0;
            top: 0;
            bottom: 0;
            width: 33.33%;
            transition: transform .4s cubic-bezier(.2, .64, .48, 1.12);
            transform: translateX(var(--x));
            -webkit-backface-visibility: hidden;
            &:after {
                content: '';
                width: 44px;
                height: 44px;
                display: block;
                border-radius: 50%;
                background: var(--circle);
                position: absolute;
                left: 50%;
                top: 0;
                box-shadow: 0 2px 8px var(--shadow);
                margin: -14px 0 0 -22px;
            }
        }
    }
}

html {
    box-sizing: border-box;
    -webkit-font-smoothing: antialiased;
}

* {
    box-sizing: inherit;
    &:before,
    &:after {
        box-sizing: inherit;
    }
}

// Center & dribbble
body {
    min-height: 100vh;
    font-family: Roboto, Arial;
    color: #ADAFB6;
    display: flex;
    justify-content: center;
    align-items: center;
    background: #3F4656;
    .dribbble {
        position: fixed;
        display: block;
        right: 20px;
        bottom: 20px;
        img {
            display: block;
            height: 28px;
        }
    }
}
Смотрим наш результат:
fg32.gif
Автор
baltun
Скачиваний
0
Просмотры
632
Первый выпуск
Обновление
Рейтинг
0.00 звёзд Оценок: 0

Ещё ресурсы от baltun

Похожие ресурсы
Назад
Верх Низ