Центрировать элементы в прокручиваемой области

Как вы выравниваете по центру первый и последний элементы гибкости в прокручиваемом горизонтальном гибком контейнере?

Получить прокрутку до работы очень просто.

В моем контейнере есть:

scroll-snap-type: x mandatory;
overflow-x: scroll;

и предметы имеют:

scroll-snap-align: center;

Прокрутка работает, однако крайний левый и крайний правый элементы в списке всегда выравниваются по левому и правому краям соответственно.

Я хотел бы, чтобы первый и последний элементы также можно было центрировать в списке прокручиваемых элементов.

Если мы посмотрим на пример это, вкладка "главная" будет крайним левым элементом. Я хотел бы, чтобы это было по центру в прокручиваемой области.

Нужны ли мне пустые вкладки слева и справа от прокручиваемой области?

Спасибо за любой совет.

div.scrollmenu {
  background-color: #333;
  overflow: auto;
  white-space: nowrap;
}

div.scrollmenu a {
  display: inline-block;
  color: white;
  text-align: center;
  padding: 14px;
  text-decoration: none;
}

div.scrollmenu a:hover {
  background-color: #777;
}
<div class = "scrollmenu">
  <a href = "#home">Home</a>
  <a href = "#news">News</a>
  <a href = "#contact">Contact</a>
  <a href = "#about">About</a>
  <a href = "#support">Support</a>
  <a href = "#blog">Blog</a>
  <a href = "#tools">Tools</a>
  <a href = "#base">Base</a>
  <a href = "#custom">Custom</a>
  <a href = "#more">More</a>
  <a href = "#logo">Logo</a>
  <a href = "#friends">Friends</a>
  <a href = "#partners">Partners</a>
  <a href = "#people">People</a>
  <a href = "#work">Work</a>
</div>
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
3
0
1 148
2

Ответы 2

Do I need to have blank tabs on the left and right of the scrollable area?

Это неплохая идея.

Вы можете создать кучу «фальшивых» элементов на обоих концах, а затем дать им visibility: hidden.

div.scrollmenu {
  background-color: #333;
  overflow: auto;
  white-space: nowrap;
}

div.scrollmenu a {
  display: inline-block;
  color: white;
  text-align: center;
  padding: 14px;
  text-decoration: none;
}

div.scrollmenu a:hover {
  background-color: #777;
}

/* NEW */
a:nth-child(-n + 5),
a:nth-last-child(-n + 5) {
  background-color: green;
  visibility: hidden;
<div class = "scrollmenu">
  <a href = "#home">Home</a>
  <a href = "#home">Home</a>
  <a href = "#home">Home</a>
  <a href = "#home">Home</a>
  <a href = "#home">Home</a>
  <a href = "#home">Home</a>
  <a href = "#news">News</a>
  <a href = "#contact">Contact</a>
  <a href = "#about">About</a>
  <a href = "#support">Support</a>
  <a href = "#blog">Blog</a>
  <a href = "#tools">Tools</a>
  <a href = "#base">Base</a>
  <a href = "#custom">Custom</a>
  <a href = "#more">More</a>
  <a href = "#logo">Logo</a>
  <a href = "#friends">Friends</a>
  <a href = "#partners">Partners</a>
  <a href = "#people">People</a>
  <a href = "#work">Work</a>
  <a href = "#home">Home</a>
  <a href = "#home">Home</a>
  <a href = "#home">Home</a>
  <a href = "#home">Home</a>
  <a href = "#home">Home</a>
  <a href = "#home">Home</a>
</div>

Однако есть более простое и семантически ценное решение: использовать псевдоэлементы CSS.

Поскольку вы сосредотачиваетесь только на внешнем виде макета, вам не следует вмешиваться в HTML. Вам следует придерживаться чистого CSS.

А поскольку псевдоэлементы на гибком контейнере обрабатываются как гибкие элементы, вы можете использовать ::before (первый элемент в естественном потоке) и ::after (последний элемент в естественном потоке) для создания необходимого вам эффекта центрирования.

div.scrollmenu {
  background-color: #333;
  overflow: auto;
  white-space: nowrap;
  display: flex;
}

div.scrollmenu a {
  color: white;
  text-align: center;
  padding: 14px;
  text-decoration: none;
}

div.scrollmenu a:hover {
  background-color: #777;
}

/* NEW */
.scrollmenu::before,
.scrollmenu::after {
  content: "";
  flex: 0 0 50%;
}
<div class = "scrollmenu">
  <a href = "#home">Home</a>
  <a href = "#news">News</a>
  <a href = "#contact">Contact</a>
  <a href = "#about">About</a>
  <a href = "#support">Support</a>
  <a href = "#blog">Blog</a>
  <a href = "#tools">Tools</a>
  <a href = "#base">Base</a>
  <a href = "#custom">Custom</a>
  <a href = "#more">More</a>
  <a href = "#logo">Logo</a>
  <a href = "#friends">Friends</a>
  <a href = "#partners">Partners</a>
  <a href = "#people">People</a>
  <a href = "#work">Work</a>
</div>

Я получил это для работы с помощью transform3D. Я поместил все содержимое в гибкий контейнер и прокрутил весь контейнер с помощью transform3D плюс некоторый javascript. Я вычислил размер экрана и получил центр экрана, провел некоторые математические вычисления и вычислил ширину каждого элемента в контейнере и зная, что каждый индекс элементов дал мне смещение, которое я сделал, затем сделал анимацию для прокрутки содержимого влево или вправо с помощью transform3d .

Другие вопросы по теме