Поиск по сайту
Ctrl + K
Вопросы по CSS

Как создать "липкую" сайдбар, который прокручивается с контентом в CSS?

Создание "липкого" сайдбара в CSS — это довольно распространённая задача, которую можно реализовать с использованием свойства position: sticky. Это свойство позволяет элементу оставаться на экране даже при прокрутке страницы, пока он находится в пределах родительского контейнера.

Пример реализации

Давайте создадим простой пример, который демонстрирует, как сделать сайдбар "липким".

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Липкий сайдбар</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="container">
        <aside class="sidebar">
            <h2>Сайдбар</h2>
            <ul>
                <li>Ссылка 1</li>
                <li>Ссылка 2</li>
                <li>Ссылка 3</li>
                <li>Ссылка 4</li>
            </ul>
        </aside>
        <main class="content">
            <h1>Основной контент</h1>
            <p>Добавьте много текста здесь, чтобы протестировать прокрутку. Повторите этот текст несколько раз.</p>
            <p>Добавьте много текста здесь, чтобы протестировать прокрутку. Повторите этот текст несколько раз.</p>
            <p>Добавьте много текста здесь, чтобы протестировать прокрутку. Повторите этот текст несколько раз.</p>
            <p>Добавьте много текста здесь, чтобы протестировать прокрутку. Повторите этот текст несколько раз.</p>
            <p>Добавьте много текста здесь, чтобы протестировать прокрутку. Повторите этот текст несколько раз.</p>
            <p>Добавьте много текста здесь, чтобы протестировать прокрутку. Повторите этот текст несколько раз.</p>
        </main>
    </div>
</body>
</html>
body {
    font-family: Arial, sans-serif;
    margin: 0;
    padding: 0;
}

.container {
    display: flex;
}

.sidebar {
    width: 200px;
    background-color: #f4f4f4;
    padding: 15px;
    position: sticky;
    top: 0; /* элемент "липкий", когда он достигает верхней части окна */
    height: 100vh; /* Заставляем сайдбар занимать всю высоту экрана */
}

.content {
    padding: 15px;
    flex-grow: 1; /* Контент занимает доступное пространство */
    max-width: 800px; /* Максимальная ширина основного контента */
}

h1, h2 {
    color: #333;
}

Как это работает

  • HTML структура: Мы создали два основных блока — <aside> для сайдбара и <main> для основного контента.
  • CSS стили:
    • Установили display: flex для контейнера, чтобы сайдбар и контент отображались рядом.
    • Используем position: sticky для сайдбара с top: 0, это означает, что сайдбар будет оставаться на верхней части видимой области, когда вы прокручиваете страницу.
    • Задаём height: 100vh сайдбару, чтобы он занимал всю высоту окна браузера.
  • Заключение

    Теперь у вас есть простой пример создания "липкого" сайдбара с помощью CSS. Вы можете доработать данный пример, добавив более сложные элементы стиля, чтобы адаптировать его к своим нуждам. Не забудьте протестировать на разных устройствах, чтобы убедиться, что все работает правильно!