Как растянуть слайд-шоу/карусель по высоте?

#html #css

Вопрос:

HTML и Javascript, и я не могу увеличить высоту своего слайд-шоу/карусели.

Я попытался изменить высоту #bigbigcontainer и .slideshow-контейнера, но это все равно не работает.

Это то, что я пытаюсь получить: Изображение

Это то, что у меня есть до сих пор (в этом контексте javascript не имеет значения):

 var slideIndex = 1;
showSlides(slideIndex);

function plusSlides(n) {
  showSlides(slideIndex  = n);
}

function currentSlide(n) {
  showSlides(slideIndex = n);
}

function showSlides(n) {
  var i;
  var slides = document.getElementsByClassName("mySlides");
  var dots = document.getElementsByClassName("dot");
  if (n > slides.length) {slideIndex = 1}    
  if (n < 1) {slideIndex = slides.length}
  for (i = 0; i < slides.length; i  ) {
      slides[i].style.display = "none";  
  }
  for (i = 0; i < dots.length; i  ) {
      dots[i].className = dots[i].className.replace(" active", "");
  }
  slides[slideIndex-1].style.display = "block";  
  dots[slideIndex-1].className  = " active";
} 
 html{
    font-family: Arial, Helvetica, sans-serif;
}
h1{
    text-align: center;
}
.topnav a {
    display: inline-block;
    color: black;
    background-color: rgb(233, 233, 233);
    text-align: center;
    padding: 5px;
    text-decoration: none;
    font-size: 17px;
    flex: 1;
    border: 3px solid black;
}

ul{
    display: flex;
    justify-content: center;
    border-left: 2px solid black;
    border-right: 2px solid black;
    border-top: 5px solid black;
    border-bottom: 5px solid black;
    padding: 0;
    background-color: black;
}
  
 
  


body{
    height: 100vh;
    background-image: linear-gradient( rgb(35, 166, 252), white);
   
  }

* {box-sizing: border-box}
body {font-family: Arial, Helvetica, sans-serif; margin:0}
.mySlides {display: none;
           
}
img {vertical-align: middle;}


#bigbigcontainer{
  display: flex;
  flex-direction: column;
  height: 100px;

  
}


/* Slideshow container */
.slideshow-container {
 position: relative;
 width: 50%;


  
}

/* Next amp; previous buttons */
.prev, .next {
  cursor: pointer;
  position: absolute;
  top: 50%;
  width: auto;
  padding: 16px;
  margin-top: -22px;
  color: white;
  font-weight: bold;
  font-size: 18px;
  transition: 0.6s ease;
  border-radius: 0 3px 3px 0;
  user-select: none;
 
}

/* Position the "next button" to the right */
.next {
  right: 0;
  border-radius: 3px 0 0 3px;
  
}

/* On hover, add a black background color with a little bit see-through */
.prev:hover, .next:hover {
  background-color: rgba(0,0,0,0.8);
  
}

/* Caption text */
.text {
  color: black;
  font-size: 25px;
  position: absolute;
  bottom: 0px;
  width: 100%;
  text-align: center;
  height: 80px;
  font-size: larger;
 
  
}


/* Number text (1/3 etc) */
.numbertext {
  color: #f2f2f2;
  font-size: 12px;
  padding: 8px 12px;
  position: absolute;
  top: 0;
 
}

/* The dots/bullets/indicators */
.dot {
  cursor: pointer;
  height: 15px;
  width: 15px;
  margin: 0 2px;
  background-color: #bbb;
  border-radius: 50%;
  display: inline-block;
  transition: background-color 0.6s ease;
  position: relative;
  right: 25%;

  
}

.active, .dot:hover {
  background-color: #717171;
}

/* Fading animation */
.fade {
  -webkit-animation-name: fade;
  -webkit-animation-duration: 1.5s;
  animation-name: fade;
  animation-duration: 1.5s;
}

@-webkit-keyframes fade {
  from {opacity: .4} 
  to {opacity: 1}
}

@keyframes fade {
  from {opacity: .4} 
  to {opacity: 1}
} 
 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link href="mypresent.css" rel="stylesheet">
    <script src="mypresent.js"></script>
    <h1>MY PRESENT</h1>
    <div class="topnav">
      <nav>
        <ul>
          <a href="aboutme.html">About Me</a>
          <a href="mypast.html">My Past</a>
          <a href="mypresent.html">My Present</a>
          <a href="myfuture.html">My Future</a>
          <a href="feedback.html">Feedback</a>
        </ul>
      </nav>
    </div>
</head>
<body>
  <div id="bigbigcontainer">
    <div class="slideshow-container">

      
      <div class="mySlides fade">
        <div class="numbertext">1 / 2</div>
        <img src="classphoto.jpg" style="width:100%">
        
      </div>
      
      <div class="mySlides fade">
        <div class="numbertext">2 / 2</div>
        <img src="Code.JPG" style="width:100%">
        
      </div>
      
      <a class="prev" onclick="plusSlides(-1)">amp;#10094;</a>
      <a class="next" onclick="plusSlides(1)">amp;#10095;</a>
      

      
      </div>
      <br>
      
      <div style="text-align:center">
        <span class="dot" onclick="currentSlide(1)"></span> 
        <span class="dot" onclick="currentSlide(2)"></span> 
        
      </div>
    
  </div>
  </body>

</html> 

Ответ №1:

На данный момент это выглядит так, как будто вы фиксируете ширину изображения на 100% (т. Е. половину всего изображения), и поэтому оно займет все пространство, необходимое для отображения высоты конкретного изображения, которое зависит от его соотношения сторон.

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

Это звучит так, как будто вы хотите, чтобы каждый img охватывал всю область, и в этом случае попробуйте object-fit: cover .

Если вы обеспокоены тем, что весь img всегда должен быть виден, независимо от того, заполняет ли он всю высоту или ширину или нет, object-fit: contain вместо этого исследуйте.

Если вы хотите, чтобы изображение имело 100% высоты, без обрезки верха и низа, затем установите height: 100% и width: auto и устраните возможное переполнение (которое приведет к обрезке).