Меньшая горизонтальная полоса прокрутки, чем ширина div? +Нет фиговой подписи?

Я пытаюсь сделать изображение "карусель" с горизонтальной прокруткой. Чистый HTML + CSS без JS.

Это мой HTML:

<div class = "slideshow">
    <figure class = "slideshow__fig">
        <img src = "img/hilti-png.png" alt = "" class = "slideshow__fig-img">
        <figcaption>Fig.1 - Trulli, Puglia, Italy.</figcaption>
    </figure>
    <figure class = "slideshow__fig">
        <img src = "img/hilti-png.png" alt = "" class = "slideshow__fig-img">
        <figcaption>Fig.1 - Trulli, Puglia, Italy.</figcaption>
    </figure>
    <figure class = "slideshow__fig">
        <img src = "img/hilti-png.png" alt = "p" class = "slideshow__fig-img">
        <figcaption>Fig.1 - Trulli, Puglia, Italy.</figcaption>
    </figure>
</div>

Это мой css:

.slideshow {

display: flex;
flex-wrap: nowrap;
overflow-y: hidden;
overflow-x: scroll;
//width: 80vw;
//margin: auto;

&::-webkit-scrollbar {
    width: 350px;
    height: 10px;
  }
  
  /* Track */
  &::-webkit-scrollbar-track {
    background: #f1f1f1; 
  }
   
  /* Handle */
  &::-webkit-scrollbar-thumb {
    background: #888; 
    border-radius: 500px;
  }
  
  /* Handle on hover */
  &::-webkit-scrollbar-thumb:hover {
    background: #555; 
  }


&__fig {
    flex: 0 0 auto;
    height: 900px;

    &-img{
        height: 100%;
        //width: 100%;
        display: block;
    }
}

}

1. Проблема заключается в том, что когда я устанавливаю ширину .slideshow на 80vw, полоса прокрутки, естественно, становится короче, но мои изображения обрезаются и не отображаются на всю ширину экрана. Когда я пытаюсь настроить ширину полосы прокрутки с помощью ::-webkit-scrollbar {width: 350px или 50vw или ...}, ничего не происходит.

Я хотел бы иметь полосу прокрутки, которая не является полной шириной div, который я прокручиваю, но почему-то не могу понять это.

2 - Другая проблема в том, что я хотел бы иметь figcaption в нижней левой части изображения. Но почему-то не отображается, когда есть горизонтальная прокрутка. Какие-либо предложения?

Вот пример того, как я хотел бы это иметь:

Пример изображения

Edit: Теперь мне наконец удалось это сделать, добавив:

&::-webkit-scrollbar-button:end:increment {
    width: 50%;
    display: block;
    background: transparent;
  }

Но теперь проблема в том, что полоса прокрутки находится не посередине, а с левой стороны. Margin:auto не помогает. Без понятия, как еще это сделать.

Также создание размера изображения 90% показало заголовок, который является не таким уж плохим решением.

Теперь вопрос только в том, как поставить полосу прокрутки в центр.

5 способов использования оповещений, предупреждений, ошибок, сообщений об успехе в Bootstrap
5 способов использования оповещений, предупреждений, ошибок, сообщений об успехе в Bootstrap
Bootstrap - это популярный front-end фреймворк, который делает веб-разработку проще и быстрее. Использование Bootstrap растет по мере того, как все...
Как сделать меню гамбургера только на CSS
Как сделать меню гамбургера только на CSS
Недавно я делал небольшие изменения на своем сайте , когда я вновь обнаружил меню гамбургера, которое я сделал для него. В нем нет ничего особенного,...
Полеты по миру фронтенда, том 9
Полеты по миру фронтенда, том 9
Мир фронтенда снова растет быстрее, чем население Земли. За всеми новостями и тенденциями в нем становится почти так же трудно уследить, как за...
Создание фильтров для вашего сайта
Создание фильтров для вашего сайта
Фильтры - удобный инструмент в арсенале веб-дизайнера. Они позволяют изменять элементы на странице с помощью всего нескольких строк кода. Эти...
Библиотека Bootstrap
Библиотека Bootstrap
Bootstrap - это бесплатный набор инструментов для разработки веб-приложений с открытым исходным кодом, разработанный компанией Twitter. Написанный на...
Уроки CSS 28
Уроки CSS 28
Здравствуйте, дорогие читатели, я Ферди Сефа Дюзгюн, сегодня мы продолжим с вами уроки css.
1
0
1 283
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот что-то близкое к изображению, которое вы привели в качестве примера. Извините, но я действительно не знаю, как этого можно добиться с соблюдением критериев Pure HTML + CSS без критериев JS. Я думаю, что это вообще невозможно.

Итак, здесь используются jQuery и jQuery-ui, которые можно перетаскивать.

Он использует перетаскиваемый div, содержащийся внутри его родителя. Ondrag вычисляет процент «прокрутки», чтобы применить его к прокручиваемой ширине ползунка изображения.

Для мобильных... Я добавил патч для jQuery-ui. Подробнее об этом здесь. Я также поместил «код инициализации» в функцию, чтобы она могла работать при загрузке и изменении размера.

$(document).ready(function(){
  function initDisplay(){
    let slide_scrollWidth = $("#slide")[0].scrollWidth;
    let customScrollbar_width = $("#sliderScroll_outer")[0].scrollWidth;
    let percent = slide_scrollWidth/customScrollbar_width
    $("#sliderScroll").css({"width":percent+"%", "left":0})
    $("#slide")[0].scrollTo(0,0)
  }

  // On page load
  initDisplay()

  // Useful for mobile orientation change
  window.onresize = initDisplay

  $("#sliderScroll").draggable({ 
    containment: "#sliderScroll_outer",
    scroll: false,
    drag: function(e){

      let parentOffset = $(e.target).parent().offset().left
      let offset = $(e.target).offset().left
      let scrollableWidth = $(e.target).parent().width() - $(e.target).width()
      let sliderPercent = (offset-parentOffset)/scrollableWidth
      //console.info(sliderPercent)

      let imageSliderWidth = $("#slide")[0].scrollWidth - $("#slide").width()

      //console.info(imageSliderWidth)

      $("#slide")[0].scrollTo(sliderPercent*imageSliderWidth,0)
    }
  });
});
#container{
  margin: 1em;
}

#slide{
  display: flex;
  overflow: hidden;
}

#slide img{
  margin: 0 0.5em;
}

#sliderScroll_outer{
  width: 40vw;
  background: lightgrey;
  margin: 1em;
}
#sliderScroll{
  width: 0vw;
  height: 10px;
  background: green;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jqueryui-touch-punch/0.2.2/jquery.ui.touch-punch.min.js"></script>

<div id = "container">

  <div id = "slide">
    <img src = "https://via.placeholder.com/800x600.png">
    <img src = "https://via.placeholder.com/400x600.png">
    <img src = "https://via.placeholder.com/1000x600.png">
  </div>

  <div id = "sliderScroll_outer">
    <div id = "sliderScroll"></div>
  </div>

</div>

Запускайте в полностраничном режиме или CodePen

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

HomoHabilis 21.12.2020 11:55

Для мобильных устройств вам просто нужно добавить патч jQuery-ui под названием Touch Punch , как говорит этот другой ответ SO... ;) Я попробовал в своем codePen, и он отлично работает без каких-либо изменений в приведенном выше коде. ;)

Louys Patrice Bessette 21.12.2020 16:14

Гна! Я все равно отредактировал, для размера абсолютно необходим обработчик onresize для мобильных устройств. ;)

Louys Patrice Bessette 21.12.2020 16:32

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

HomoHabilis 21.12.2020 18:06

Вы можете нажать на зеленую галочку, чтобы принять ответ. ;)

Louys Patrice Bessette 21.12.2020 18:22

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