Как сохранить слайдер диапазона внутри div в flex-контейнере - PullRequest
0 голосов
/ 09 ноября 2018

Используя Javascript, я пытаюсь создать сетку изображений, и я хотел бы встроить ползунок диапазона внизу одного из изображений. Чтобы получить сетку, я использую flex-container (ниже я просто показываю два числа, 1 и 2, в качестве примеров, но в реальном приложении они заменяются изображениями):

<style>
  .flex-container {
   display: flex;
   flex-wrap: wrap;
   background-color: LightYellow;
  }

.flex-item {
  background-color: #f1f1f1;
  width: 300px;
  margin: 10px;
  text-align: center;
  line-height: 300px;
 font-size: 30px; 
 }

</style>
<body>
 <div class="flex-container">
   <div class="flex-item">1</div>
  <div class="flex-item"> 2 </div>
</div>
</body>

Эта часть работает нормально - я получаю два изображения рядом, как я хочу:

enter image description here

Теперь предположим, что я хотел бы добавить слайд диапазона во второй div. Поэтому я добавляю это к своим стилям:

  .slidecontainer {
    flex: 0 1 auto;
    order: 0;
    position: relative;
    align-items: center;
    width: 100%;
   }

 .slider {
     -webkit-appearance: none;
     width: 100%;
     height: 5px;
     border-radius: 5px;
     background: #d3d3d3;
     outline: none;
     opacity: 0.7;
     -webkit-transition: .2s;
     transition: opacity .2s;
   }

  .slider:hover {
    opacity: 1;
   }

  .slider::-webkit-slider-thumb {
     -webkit-appearance: none;
     appearance: none;
     width: 25px;
     height: 15px;
     border-radius: 50%;
     background: #4CAF50;
     cursor: pointer;
    }

 .slider::-moz-range-thumb {
    width: 25px;
    height: 15px;
    border-radius: 50%;
    background: #4CAF50;
    cursor: pointer;
  }

, а затем попытайтесь встроить ползунок в один из блоков flex-контейнера, скажем, второй:

<div class="flex-item"> 2
   <div class="slidercontainer">
     <input type="range" min="1" max="100" value="50" class="slider" id="myRange">
     <p>Value: <span id="demo"></span></p>
  </div>
</div>

По причинам, которые я не понимаю, изображения взрываются. Вот как они выглядят сейчас:

enter image description here

Есть ли способ сохранить размеры изображений без изменений и просто добавить ползунок внизу одного из изображений в его div?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Это выглядит непропорционально из-за line-height: 300px;, который вы установили на .flex-item. Уберите это, и это должно выглядеть более нормально.

Чтобы сохранить изображения с исходным соотношением сторон, просто установите max-width на значение ширины, затем установите width: 100%;. Вы, вероятно, также хотите использовать div для изображения, поскольку IE11 имеет тенденцию смешно играть с изображениями в качестве гибких элементов.

0 голосов
/ 09 ноября 2018

Вот HTML:

<div class="flex-container">
        <div class="flex-item">
            <img src="https://placeimg.com/300/150/any" alt="">
        </div>
        <div class="flex-item">
            <img src="https://placeimg.com/300/150/any" alt="">
            <div class="slidercontainer">
                <input type="range" min="1" max="100" value="50" class="slider" id="myRange">
                <p>Value: <span id="demo"></span></p>
            </div>
        </div>
    </div>

А вот и CSS:

img {
       max-width: 100%;
       object-fit: cover;
    }
        .flex-container {
            display: flex;
            flex-wrap: wrap;
            background-color: LightYellow;
        }

        .flex-item {
            background-color: #f1f1f1;
            width: 300px;
            margin: 10px;
            font-size: 30px;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: space-between;
        }

        .slidecontainer {
            flex: 0 1 auto;
            order: 0;
            position: relative;
            align-items: center;
            width: 100%;
        }

        .slider {
            -webkit-appearance: none;
            width: 100%;
            height: 5px;
            border-radius: 5px;
            background: #d3d3d3;
            outline: none;
            opacity: 0.7;
            -webkit-transition: .2s;
            transition: opacity .2s;
        }

        .slider:hover {
            opacity: 1;
        }

        .slider::-webkit-slider-thumb {
            -webkit-appearance: none;
            appearance: none;
            width: 25px;
            height: 15px;
            border-radius: 50%;
            background: #4CAF50;
            cursor: pointer;
            }

        .slider::-moz-range-thumb {
            width: 25px;
            height: 15px;
            border-radius: 50%;
            background: #4CAF50;
            cursor: pointer;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...