12 блестящих шаблонов пагинации страниц на основе HTML и CSS3
Организация пагинации страниц сайта очень важна, чтобы сделать просмотр удобным для посетителя. Мы нашли впечатляющие примеры навигации на HTML5 и CSS3 для подпитки вашей креативности.
Простая навигация по страницам на основе CSS3
Эта навигация прекрасно работает даже при том, что она слегка старомодна на вид. Единственное, что вам потребуется, это div с применёнными к нему стилями. Скачайте исходный код с разметкой и стилями.
Навигация на основе CSS3
Коллекция полезных списков пронумерованных элементов, которые можно легко добавить на собственный сайт.

Адаптивная навигация
Простой дизайн и адаптивные медиазапросы стилей позволяют этому шаблону страниц пагинации корректно отображаться на экранах любого размера.

Навигация с плагином Tooltip
В отличие от других вариантов эта навигация показывает всплывающие подсказки при наведении курсора мыши с помощью плагина Tooltip .

Навигация с предварительным просмотром
Еще одна достойная упоминания пагинация страниц HTML с плагином Tooltip показывает миниатюрные картинки предпросмотра вместо обычного текста. Плавная анимация при наведении курсора мыши может вас заинтересовать.
Демо Подробнее / Скачать

Навигация на чистом CSS
Легкий шаблон навигации с исходным кодом разметки и стилей.

Тёмная навигация
Простой шаблон с тёмной темой.

Flexing pagination arrows
Скачайте полный набор файлов js , css и html и используйте этот шаблон навигации на своем сайте.

Навигация «Pagination One»
Стильный шаблон навигации c красивыми кнопками для пагинации на сайте .

Адаптивная навигация «Волшебная полоска»
Анимированная навигация, реализованная с помощью jQuery , которая перемещает полоску вдоль ряда номеров страниц.

Индикатор текущей страницы
Блестящая анимация кнопок с эффектом быстрого плавного переключения.
Демо Подробнее / Скачать

Мобильная навигация
Набор элементов навигации, который может впечатлить своей простотой. В этом пакете сразу реализовано несколько подходов к постраничной пагинации , которые можно использовать совершенно бесплатно.

Навигация с помощью слайдера
Старая, но до сих пор используемая навигация с помощью слайдера с невероятной функциональностью с использованием слайдера из плагина jQuery UI .
Демо Подробнее / Скачать
Как сделать пагинацию: актуальные методы
Разбираем способы оформить пагинацию в каталоге интернет-магазина или блоге. Что использовать, когда rel=next и rel=prev не работают, и как избежать ошибок, влияющих на индексацию.
В статье:
- Настройка пагинации
- Как оформить пагинацию правильно
- Постраничная пагинация
- Динамическая или бесконечная прокрутка
Большое количество товаров или статей в блоге нужно удобно просматривать, для этого их делят на страницы. Вывод ограниченного количества элементов на странице называется пагинацией. К примеру, когда на одной странице каталога выводится по 20 товаров и есть возможность посмотреть другие позиции на следующих страницах.
Нет универсального способа оформить список товаров в каталоге интернет-магазина или статей в блоге, но в материале мы разберем разные варианты и ошибки.
Настройка пагинации
Раньше для настройки веб-мастеры использовали теги rel=next и rel=prev. Весной 2019 года оптимизаторы выяснили, что Google и Яндекс их не учитывают.

«Когда мы оценили сигналы индексации, решили отказаться от rel=prev/next. Исследования показывают, что пользователи любят одностраничный контент. Стремитесь к этому по возможности, но помните, что многостраничность тоже подходит для поиска Google. Изучайте и делайте то, что лучше вашим пользователям!»
Позиция Google в ТвиттереFAQ по пагинации:
- Теги rel=prev/next теперь бесполезны?
Если вы оптимизируете страницы под Google или Яндекс, то да. Но, к примеру, Bing их распознает. - Нужно удалять rel=prev/next со страниц?
Нет, сами по себе теги не навредят, тем более что их используют некоторые браузеры для предзагрузки и некоторые поисковые системы — тот же Bing. - Какой способ настройки пагинации лучше?
Веб-мастеры оформляют пагинацию разными способами: с помощью нумерованных страниц, диапазона цифр, списка по алфавиту, где каждая страница — подборка товаров на определенную букву, и другими методами. Принимайте решение из расчета на то, чтобы пользователям было удобно смотреть элементы списка.
Как оформить пагинацию правильно
Разберем популярные способы. Выбирайте тот, который больше подходит вашей ситуации и будет удобнее пользователям.
Постраничная пагинация
Если на сайте много контента — большой массив товаров, много статей, которых становится только больше — используют постраничную пагинацию с нумерацией.


Как настроить: вариант 1
Если использовать такую пагинацию, то нужно использовать атрибут canonical. На всех страницах, начиная с первой, нужно прописать тег rel=canonical и в роли главного адреса отмечать самую первую страницу. Это рекомендует Яндекс.
К примеру, есть URL:
И есть другие страницы этого же раздела:
Страницы https://www.site.ru/p/bulki/?page=1 по логике быть не должно, первой считается https://www.site.ru/p/bulki/. Если page=1 генерируется автоматически, то нужно ставить редирект на страницу /.
Для всех этих URL нужно задать canonical:

Пагинация может затрагивать сортировку и количество товаров. В этом случае нужно прописать на этих страницах rel=canonical, в котором указать страницу раздела без сортировки.
Проверить интернет-магазин, блог и любой другой сайт и найти ошибки, критичные для оптимизации, можно в сервисе Анализ сайта.
Он оценит проект по 70+ тестам, даст подсказки, сравнит с конкурентами и поможет следить за позициями страниц по ключевым словам.
ПопробоватьЧто если указать canonical только на первой странице?
Атрибут canonical важно поставить на все страницы и указать в нем первую. Если вы поставили canonical только на первую страницу, PR не будет передаваться, а пути сканирования других страниц окажутся закрытыми. Поисковым системам будет сложнее находить контент, чтобы его проиндексировать, образуются страницы-сироты.
Что если запретить индексацию остальных страниц?
Важно, чтобы весь контент был доступен поисковым ботам. Некоторые запрещают индексацию страниц тегом noindex, но лучше так не делать — PR перестанет передаваться, страницы не будут ранжироваться. Сотрудники Яндекса не советуют так делать:

Что делать с текстами, чтобы не навредить релевантности?
Если на странице каталога есть какой-то текст, лучше вынести его на главную страницу категории или раздела, чтобы он не повторялся на всех страницах пагинации.
Как настроить: вариант 2
Есть другой вариант: сформировать общую страницу с контентом со всех страниц пагинации и указать ее в rel=canonical. В этом случае продвигаться будет более сильная страница с большим количеством ключей, чем если бы в canonical указали только первую страницу.

В CMS сделать такую пагинацию можно с помощью плагинов.
Почитать по теме:
Все о rel canonical: как указывать атрибут правильно и зачем он нуженЧто если не делать общую страницу?
Не страшно, если общей страницы со всеми товарами нет. При корректном использовании canonical все страницы пагинации тоже будут индексироваться, как говорит Яндекс:

Есть и другие способы просмотра контента. В своем твите про rel=prev/next Google заявил об исследованиях, которые показывают, что пользователи чуть больше любят одностраничный контент. Ссылок на исследования нет, но если поверить поисковику на слово, вывод контента на одной странице будет хорошим вариантом.
Динамическая или бесконечная прокрутка, single page content
Контент, размещенный на одной странице, можно просматривать целиком с помощью динамической или бесконечной прокрутки. Элементы появляются на странице динамически по скрипту, как только пользователь доскроллит до низа или вдобавок кликнет на кнопку «показать еще».
К примеру, бесконечную ленту используют социальные сети, поисковые системы в выдаче по картинкам.
Получается, пользователи смотрят каталог или список статей в блоге, не покидая страницу. Такие страницы называют single-page content.
Настраивают динамический показ элементов с помощью Ajax-подгрузки в JavaScript или с помощью специальных решений для CMS.
Как сделать, чтобы ПС увидела весь контент
Важно проследить, чтобы поисковый робот видел весь контент страницы. Как это сделать:
- Вариант 1: при открытии страницы выдавать текстовый контент элементов, которые могут быть загружены с помощью скриптов, а потом подгружать графические элементы с помощью отложенной загрузки.
- Вариант 2: выдавать боту статическую страницу из кэша оперативной памяти сервера. В этом случае поисковик проиндексирует весь контент и не будет наказывать за клоакинг, поскольку этот способ выдачи под санкции не попадает.
- Вариант 3: использовать ее вместе с обычной постраничной загрузкой.
Протестировать URL и проверить, доступен ли ботам весь важный контент, можно в Яндекс.Вебмастере и Google Search Console.
Почему это не идеальный вариант
Автоматический показ контента по доскроллу затягивает пользователя и увеличивает время нахождения на сайте. Но не очень удобен в использовании:
- нельзя оставить страницу в закладках и вернуться к просмотру позже;
- футер становится неуловимым;
- непонятно, сколько элементов просмотрено и сколько осталось, полоса прокрутки не отображает реальный прогресс.
Решением обычно становится использование одновременно и динамического появления элементов по кнопке, и нумерации страниц.
Комбинация решений
На сайте akcentr.ru можно кликать на номера страниц или на кнопку «показать еще» для перехода на следующую страницу.
При нажатии на кнопку «Показать еще» в URL отображается следующий номер страницы, на которую перешел посетитель.

Что использовать в итоге
Выберите актуальный способ из предложенных с учетом направления вашего сайта и предпочтений аудитории.
-
Если вы развиваете интернет-магазин с множеством товаров, советуем остановиться на страницах с нумерацией и по желанию добавить отображение позиций по кнопке «Показать еще». При этом лучше добавить возможность сортировки всего массива по цене, новизне и рейтингу для удобной навигации по списку.
Какой вариант лучше по вашему мнению, какой вы используете в своих проектах?
Как реализовать пагинацию с помощью HTML, CSS и JavaScript
В Интернете пагинация — это способ разбиения больших фрагментов содержимого на более мелкие части. В этой статье мы рассмотрим простой способ разделения содержимого на ряд «страниц» с помощью HTML, CSS и обычного JavaScript.
Хотя пагинация может быть реализована с помощью таких фреймворков, как React и Angular, цель данной статьи — предоставить простое пошаговое руководство по настройке пагинации, чтобы мы могли понять основные концепции, связанные с ней.
Создание базовой веб-страницы
Прежде чем приступить к реализации системы пагинации, давайте создадим HTML-структуру, хранящую содержимое, которое мы хотим отображать. Это может быть любое содержимое, но в данном учебном пособии мы будем использовать таблицу из пяти столбцов и 15 строк, в которой будут храниться имена учеников разных классов. Вот фрагмент нашего HTML:
article class="content">
table>
thead>
tr>
th>Grade 1th>
th>Grade 2th>
th>Grade 3th>
th>Grade 4th>
th>Grade 5th>
tr>
thead>
tbody>
tr>
td>Faith Andrewtd>
td>Angela Christopher`td>
td>David Eliastd>
td>Samuel Thomastd>
td>Richard Eliastd>
tr>
⋮
tbody>
table>
article>Мы обернули таблицу в элемент-контейнер ( ). Хотя элемент-контейнер нам не нужен, его удобно иметь, особенно если на странице есть другие элементы. (Он создаёт полезный контекст для кнопок пагинации, которые мы будем добавлять).
Полный HTML-код с некоторыми элементами оформления можно посмотреть на CodePen.
Реализация функциональности пагинации с помощью JavaScript
После того как HTML и CSS созданы, остаётся реализовать постраничную навигацию. Сначала мы воспользуемся JavaScript для разделения таблицы на различные «страницы» и добавим функциональность кнопок для перехода по этим страницам.
Создание функции, разбивающей таблицу на страницы
Вот наш код для разделения таблицы на отдельные части:
document.addEventListener('DOMContentLoaded', function ()
const content = document.querySelector('.content');
const itemsPerPage = 5;
let currentPage = 0;
const items = Array.from(content.getElementsByTagName('tr')).slice(1);Первая строка создаёт слушатель событий, который обеспечивает выполнение JavaScript-кода после полной загрузки и разбора HTML-содержимого. Это делается для того, чтобы предотвратить любые манипуляции или взаимодействие с элементами до того, как содержимое станет доступным в DOM.
С помощью document.querySelector(‘.content’) мы выбираем обёртку и инициализируем её как переменную.
С помощью const itemsPerPage = 5; мы задаём количество строк для отображения на каждой странице.
С помощью let currentPage = 0; мы создаём переменную, которая отслеживает номер текущей страницы. Она начинается с 0, что означает первую страницу. (Первый индекс в JavaScript равен 0, поэтому отсчёт ведётся от 0, а не от 1).
Это означает, что заголовок будет оставаться на месте при переключении страниц.
Отработка функциональности showPage()
Далее поработаем над кодом для показа страниц:
function showPage(page)
const startIndex = page * itemsPerPage;
const endIndex = startIndex + itemsPerPage;
items.forEach((item, index) =>
item.classList.toggle('hidden', index startIndex || index >= endIndex);
>);
updateActiveButtonStates();
>Начнём с создания функции showPage() , принимающей параметр page . Эта функция отвечает за отображение элементов, связанных с данной страницей, при её вызове.
Далее мы вычисляем startIndex , являющийся первым элементом, который должен быть отображён на текущей странице, путём умножения параметра page на itemsPerPage . Также вычисляется endIndex , находящийся сразу после последнего элемента, который должен быть отображён на текущей странице.
Таким образом, мы создаём диапазон отображаемых элементов. Например, допустим, у нас есть десять элементов, и мы хотим отображать по пять элементов на странице. Если мы находимся на первой странице ( page = 0 ), то startIndex будет равен 0, а endIndex будет равен 0 + 5 = 5. Этот диапазон ( [0, 5] ) включает в себя первые пять элементов. На следующей странице ( page = 1 ) startIndex будет равен 5, а endIndex — 5 + 5 = 10. Этот диапазон ( [5, 10] ) включает оставшиеся элементы.
С помощью функции items.forEach() мы создаём цикл, перебирающий каждую строку и проверяющий, попадает ли её индекс в диапазон элементов, которые будут отображаться на текущей странице, т.е. находится ли он до startIndex или после/равно endIndex . Если индекс находится в этом диапазоне, то ключевое слово toggle применяет к элементу класс hidden (который мы определим в нашем CSS-коде), эффективно скрывая его. Если индекс не удовлетворяет ни одному из условий, класс hidden удаляется, делая элемент видимым.
Наш класс hidden перемещает элементы за пределы экрана, скрывая их от глаз, но сохраняя доступность для пользователей программ чтения с экрана:
.hidden
clip: rect(0 0 0 0);
clip-path: inset(50%);
height: 1px;
overflow: hidden;
position: absolute;
white-space: nowrap;
width: 1px;
>Добавление кнопок
Теперь рассмотрим, как добавить кнопки навигации. В приведённом ниже коде мы создадим и добавим функциональность кнопок на основе содержимого таблицы:
function createPageButtons()
const totalPages = Math.ceil(items.length / itemsPerPage);
const paginationContainer = document.createElement('div');
const paginationDiv = document.body.appendChild(paginationContainer);
paginationContainer.classList.add('pagination');Сначала мы создаём функцию createPageButtons() , которая будет хранить логику создания наших кнопок. Затем мы вычисляем общее количество страниц, необходимых для отображения нашей таблицы. Для этого мы делим общее количество элементов на желаемое количество элементов на странице. Полученный результат округляется в большую сторону с помощью функции Math.ceil() . Это гарантирует, что все строки элементов нашей таблицы будут заняты имеющимися страницами.
Затем мы создаём div для размещения динамически генерируемых кнопок страницы ( document.createElement(‘div’) ). Далее мы добавляем элемент в тело нашей HTML-структуры с помощью document.body.appendChild(paginationDiv) . (На самом деле мы ещё не указали ему место в структуре HTML. Сделаем это в ближайшее время.) Наконец, мы добавляем класс pagination к контейнеру кнопки, чтобы можно было использовать для него стили.
Следующим шагом будет создание кнопок для каждой страницы с использованием цикла для перебора всех возможных индексов страниц:
for (let i = 0; i totalPages; i++)
const pageButton = document.createElement('button');
pageButton.textContent = i + 1;
pageButton.addEventListener('click', () =>
currentPage = i;
showPage(currentPage);
updateActiveButtonStates();
>);Цикл for имеет диапазон от 0 (это первая страница) до общего количества страниц минус 1.
В каждой итерации страницы с помощью метода document.createElement() создаётся новая отдельная кнопка страницы, увеличивающая номер страницы на 1 при каждом цикле.
Далее мы создаём слушатель события click и прикрепляем его к кнопкам страницы. При нажатии на кнопку будет выполняться функция обратного вызова слушателя события.
Вот объяснение функции обратного вызова:
- Переменная currentPage обновляется до текущего значения i , которое соответствует индексу кликнутой страницы.
- Функция showPage() вызывается с обновлённым значением currentPage , что приводит к отображению содержимого кликнутой страницы.
Завершая наш код создания кнопки, мы заканчиваем его следующим образом:
content.appendChild(paginationContainer);
paginationDiv.appendChild(pageButton);Мы добавляем наш контейнер кнопок в конец нашей обёртки .content , а затем помещаем наши кнопки внутрь контейнера button .
Подсветка активных кнопок
Чтобы сделать наши кнопки более удобными в использовании, добавим отличительный стиль к активной в данный момент кнопке. Создадим функцию, которая будет применять стили CSS-класса active к кнопке, когда её страница становится активной:
function updateActiveButtonStates()
const pageButtons = document.querySelectorAll('.pagination button');
pageButtons.forEach((button, index) =>
if (index === currentPage)
button.classList.add('active');
> else
button.classList.remove('active');
>
>);
>Сначала мы извлекаем все кнопки пагинации с помощью document.querySelectorAll и присваиваем их переменной pageButtons .
Затем функция updateActiveButtonStates() с помощью цикла forEach поочерёдно проходит по каждой из этих кнопок и сравнивает её индекс со значением переменной currentPage .
Далее мы используем условный оператор if для назначения стилей класса active , если индекс кнопки совпадает с текущей страницей.
Если индекс кнопки не соответствует текущей странице, то класс active удаляется. Это гарантирует, что другие кнопки не сохранят класс active .
Для реализации этой возможности мы вызываем функцию updateActiveButtonStates() при каждом изменении или отображении страницы.
Вызов скрипта
Наш скрипт пагинации заканчивается следующими двумя строками:
createPageButtons();
showPage(currentPage);Мы вызываем функцию createPageButtons() перед функцией showPage() . Это гарантирует, что кнопки будут созданы сразу после загрузки страницы.
Теперь наш скрипт вычисляет соответствующий диапазон элементов для отображения на каждой странице, прослушивает нажатия кнопок и обновляет отображение страницы.
Итоговый результат
Следующий Pen показывает итоговый результат.
Адаптация кода к другим сценариям
Созданный нами скрипт удобен для разбиения таблицы на ряд страниц. Но что делать, если наше содержимое не является таблицей? Вместо таблиц попробуем применить наш скрипт к другим видам содержимого.
Пагинация для элементов section
Вместо элемента таблицы разместим внутри нашего контейнера несколько элементов и посмотрим, как адаптировать наш скрипт. Вот наш базовый HTML:
article class="content">
section>section>
section>section>
section>section>
section>section>
section>section>
article>Нам нужно внести всего три очень простых изменения в наш скрипт:
document.addEventListener('DOMContentLoaded', function ()
const content = document.querySelector('.content');
const itemsPerPage = 1;
let currentPage = 0;
const items = Array.from(content.getElementsByTagName('section')).slice(0);Изменения заключаются в следующем:
- установить значение itemsPerPage равным 1, чтобы на каждой странице отображалась только одна секция
- изменить имя целевого тега на section , поскольку теперь мы перебираем элементы , а не
- установить значение slice() равным 0, что ограничивает выборку первым элементом секции (который имеет индекс 0)
Приведённая ниже демонстрация CodePen показывает это в действии.
Пагинация для неупорядоченного списка
-
и меняем элементы на элементы
:ul class="content">
li>li>
li>li>
li>li>
li>li>
li>li>
ul>В нашем JavaScript мы сделаем всего два изменения:
- getElementsByTagName(‘section’) становится getElementsByTagName(‘li’)
- установим const itemsPerPage равной 2, чтобы показывать по два элемента списка на странице
После небольших изменений в CSS для учёта неупорядоченного списка мы получили результат, представленный ниже.
Заключение
В этом руководстве мы научились реализовывать пагинацию с помощью HTML, CSS и JavaScript. Для тех, у кого не включён JavaScript (по каким-либо причинам), полный текст страницы по-прежнему доступен — просто без пагинации. Благодаря использованию семантических элементов страница по-прежнему доступна для клавиатуры. Кроме того, мы скрыли неактивное содержимое, переместив его за пределы экрана, а не использовали display: none , чтобы оно оставалось доступным для программ чтения с экрана.
Мы можем пойти дальше и добавить описательные метки и атрибуты ARIA, чтобы передать читателям экрана назначение и роль таких элементов, как кнопки пагинации.
Я надеюсь, что эта демонстрация заставит вас задуматься о простой функциональности пагинации без необходимости обращаться к фреймворку.
Как сделать — Пагинацию
Узнать, как создать разбиение на страницы с помощью CSS.
Пагинация
Создать пагинацию
Шаг 1) Добавить HTML:
Пример
«
1
2
3
4
5
6
»Шаг 2) Добавить CSS:
Пример
/* Ссылки для разбиения на страницы */
.pagination a color: black;
float: left;
padding: 8px 16px;
text-decoration: none;
transition: background-color .3s;
>/* Стиль активной/текущей ссылки */
.pagination a.active background-color: dodgerblue;
color: white;
>/* Добавить серый цвет фона при наведении курсора мыши */
.pagination a:hover:not(.active)Зайдите на наш учебник CSS Пагинация, чтобы узнать больше о пагинации.
Мы только что запустили
SchoolsW3 видеоВЫБОР ЦВЕТА

курс сегодня!
Сообщить об ошибке
Если вы хотите сообщить об ошибке или внести предложение, не стесняйтесь отправлять на электронное письмо:
Ваше предложение:
Спасибо Вам за то, что помогаете!
Ваше сообщение было отправлено в SchoolsW3.
ТОП Учебники
ТОП Справочники
ТОП Примеры
Получить сертификат
SchoolsW3 оптимизирован для бесплатного обучения, проверки и подготовки знаний. Примеры в редакторе упрощают и улучшают чтение и базовое понимание. Учебники, ссылки, примеры постоянно пересматриваются, чтобы избежать ошибок, но не возможно гарантировать полную правильность всего содержания. Некоторые страницы сайта могут быть не переведены на РУССКИЙ язык, можно отправить страницу как ошибку, так же можете самостоятельно заняться переводом. Используя данный сайт, вы соглашаетесь прочитать и принять Условия к использованию, Cookies и политика конфиденциальности.
