Установка `overflow: Hidden` для элемента, чтобы заставить полосы прокрутки сделать недействительным `transform: TranslaCSS

Разбираемся в CSS
Ответить Пред. темаСлед. тема
Anonymous
 Установка `overflow: Hidden` для элемента, чтобы заставить полосы прокрутки сделать недействительным `transform: Transla

Сообщение Anonymous »

Я сделал что-то вроде слайд-шоу на HTML и CSS с небольшим количеством JavaScript. Слайд-шоу запускается в одном окне просмотра и управляется с помощью клавиш со стрелками на клавиатуре. Все это работает довольно хорошо, и я включил фрагмент, показывающий, как это работает. Это немного подробно, но я думаю, что большинство вещей там имеют отношение к моей проблеме.
Короче, естьверхний элемент навигации. Ниже приведен основной элемент, занимающий остальную высоту области просмотра. В этом основном элементе есть два раздела, представляющие слайд. Эти разделы располагаются горизонтально рядом друг с другом с помощью флексбокса. Аспект скольжения исходит из крошечного фрагмента JavaScript, который устанавливает, например, преобразование TranslateX(-100vw) в главном элементе для отображения второго слайда. Все работает хорошо.
Теперь содержимое слайдов по вертикали больше высоты области просмотра. Поэтому я хочу сделать прокручиваемый отдельно левый и правый контент. Это работает, когда я устанавливаю переполнение: скрыто для основного элемента, однако преобразование перестает работать, и при нажатии стрелки слайды не отображаются.
Во включенном фрагменте я прокомментировал переполнение: скрыто, чтобы работала хотя бы скользящая часть. Как только вы раскомментируете эту строку, скольжение перестанет работать, но вертикальные полосы прокрутки содержимого слайда появятся правильно.
Теперь мой вопрос: почему происходит преобразование: TranslateX(...) перестает работать, когда установлено переполнение основного элемента? И как мне это сделать, чтобы работали и скользящие и полосы прокрутки содержимого слайда?

Код: Выделить всё

const main = document.querySelector('main');

function openSlide(slide) {
main.style.transform = `translateX(-${slide * 100}vw)`;
}

window.addEventListener('keydown', function(event) {
if (['ArrowLeft', 'ArrowRight'].includes(event.key)) {
event.key === 'ArrowLeft' ? openSlide(0) : openSlide(1);
event.preventDefault();
}
});

openSlide(0);

Код: Выделить всё

*, *::before, *::after {
box-sizing: border-box;
}
html,
body {
font-family: sans-serif;
margin: 0;
padding: 0;
overflow: hidden;
}
body {
width: 100%;
height: 100vh;
font-size: 7vh;
display: flex;
flex-direction: column;
}
nav {
padding: 2vh;
}
main {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
flex-grow: 1;
transition: transform 0.6s ease-in-out;
/* Uncommenting the statement below, will correctly set the height of the "main" section (i.e. scrollbars appear for both ".left" & ".right"), but the "transform: translateX(...)" doesn't work anymore. */
/* overflow: hidden; */
}
section.slide {
padding: 2vh;
min-width: 100vw;
max-width: 100vw;
display: flex;
flex-flow: row nowrap;
}

section.slide .left {
width: 55vw;
display: flex;
flex-flow: column nowrap;
overflow-y: auto;
}
section.slide .left > div {
background-color: yellow;
margin-bottom: 5vh;
}

section.slide .right {
width: 45vw;
display: flex;
flex-flow: column nowrap;
overflow-y: auto;
}
section.slide .right > div {
background-color: red;
margin-bottom: 5vh;
}

Код: Выделить всё








Navigation - press left or right arrow




Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla felis lorem, ullamcorper sed porttitor non, hendrerit aliquet nisi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In interdum varius leo non maximus. Morbi quis dui tellus. Praesent at quam et metus fringilla volutpat ut eu justo. Phasellus at odio non ante consectetur aliquam. Fusce congue ultrices ante, eu sollicitudin lectus tristique sed.  Sed neque velit, cursus non consequat ut, aliquet auctor ante.


Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla felis lorem, ullamcorper sed porttitor non, hendrerit aliquet nisi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In interdum varius leo non maximus. Morbi quis dui tellus. Praesent at quam et metus fringilla volutpat ut eu justo. Phasellus at odio non ante consectetur aliquam. Fusce congue ultrices ante, eu sollicitudin lectus tristique sed. Sed neque velit, cursus non consequat ut, aliquet auctor ante.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla felis lorem, ullamcorper sed porttitor non, hendrerit aliquet nisi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In interdum varius leo non maximus. Morbi quis dui tellus. Praesent at quam et metus fringilla volutpat ut eu justo. Phasellus at odio non ante consectetur aliquam. Fusce congue ultrices ante, eu sollicitudin lectus tristique sed. Sed neque velit, cursus non consequat ut, aliquet auctor ante.




Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla felis lorem, ullamcorper sed porttitor non, hendrerit aliquet nisi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In interdum varius leo non maximus. Morbi quis dui tellus. Praesent at quam et metus fringilla volutpat ut eu justo. Phasellus at odio non ante consectetur aliquam. Fusce congue ultrices ante, eu sollicitudin lectus tristique sed. Sed neque velit, cursus non consequat ut, aliquet auctor ante.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla felis lorem, ullamcorper sed porttitor non, hendrerit aliquet nisi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In interdum varius leo non maximus. Morbi quis dui tellus. Praesent at quam et metus fringilla volutpat ut eu justo. Phasellus at odio non ante consectetur aliquam. Fusce congue ultrices ante, eu sollicitudin lectus tristique sed. Sed neque velit, cursus non consequat ut, aliquet auctor ante.


Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla felis lorem, ullamcorper sed porttitor non, hendrerit aliquet nisi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In interdum varius leo non maximus. Morbi quis dui tellus. Praesent at quam et metus fringilla volutpat ut eu justo. Phasellus at odio non ante consectetur aliquam. Fusce congue ultrices ante, eu sollicitudin lectus tristique sed. Sed neque velit, cursus non consequat ut, aliquet auctor ante.







Подробнее здесь: https://stackoverflow.com/questions/790 ... -transform
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Полоса прокрутки при попутном ветре при использовании overflow-x-hidden
    Anonymous » » в форуме CSS
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Overflow-x:hidden не предотвращает переполнение контента в мобильных браузерах.
    Anonymous » » в форуме CSS
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Overflow-x:hidden не предотвращает переполнение контента в мобильных браузерах.
    Anonymous » » в форуме CSS
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Flex Item не сокращается независимо от `min-width: 0` и` overflow: hidden` [закрыто]
    Anonymous » » в форуме CSS
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Измените параметр overflow-visible на overflow-auto, если размер элемента больше области просмотра.
    Anonymous » » в форуме CSS
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous

Вернуться в «CSS»