Как заставить изображение расширяться / сжиматься до доступного места с сохранением соотношения сторон

#html #css #twitter-bootstrap

#HTML #css #twitter-bootstrap

Вопрос:

Как нам сделать так, чтобы изображение «помещалось» во второй столбец ниже? Это Bootstrap 4, и я хочу, чтобы правый столбец занимал ту же высоту, что и левый столбец, а затем изображение помещалось внутри него с сохранением соотношения сторон. Я также хочу, чтобы оно было центрировано по горизонтали и вертикали.

введите описание изображения здесь

HTML в настоящее время выглядит следующим образом:

 <div class="form-row">
    <div class="col">
        <div class="form-group">
            <!-- Upload Image option -->
        </div>
        <div class="form-group">
            <!-- Image URL option -->
        </div>
    </div>

    <div class="col-md-4">
        <img src="leg.jpg" height="70px" />
    </div>
</div>
  

Я просто не хочу указывать этот height="70px" атрибут. Изображение должно расширяться / сжиматься, чтобы покрыть доступную высоту (определяется левой колонкой). Затем ширину изображения следует отрегулировать, чтобы сохранить соотношение сторон неизменным. Изображение, наконец, должно быть центрировано по горизонтали или вертикали.

Ответ №1:

Судя по скриншоту, здесь есть CSS из других классов и больше HTML-макета, чем предусмотрено. Вот следующие стили, относящиеся к img, с <figure> обернутым вокруг него.

 <figure class='figure'> <img class='figure-img fluid-img'...> </figure>

 img {
   object-fit:contain; 
   max-width:100%; 
   height:auto
 }
 .col {
   display:flex; 
   flex-flow:column nowrap; 
   justify-content: center;
   align-items:center
 }
  

 .form-row {
  max-width: 540px;
}

img {
  object-fit: contain;
  max-width: 100%;
  height: auto
}

.column {
  display: flex;
  flex-flow: column nowrap;
  justify-content: center;
  align-items: center
}  
 <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet">

<main class='container'>
  <section class="form-row">

    <section class="column col-8">
      <div class="form-group">

        <div class="input-group mb-3">
          <div class="input-group-prepend">
            <div class="input-group-text">
              <input type="radio">
            </div>
          </div>
          <div class="custom-file">
            <input type="file" class="custom-file-input form-control">
            <label class="custom-file-label">Choose file</label>
          </div>
        </div>
      </div>

      <div class="input-group mb-3">
        <div class="input-group-prepend">
          <div class="input-group-text">
            <input type="radio">
          </div>
        </div>
        <input type="url" class="custom-url-input form-control">

      </div>
    </section>

    <section class="column col-4">
      <figure class='figure'>
        <img src="https://oehawkseye.org/wp-content/uploads/2017/01/chicken-leg.png" class='figure-img img-fluid'>
      </figure>
    </section>

  </section>
</main>  

Комментарии:

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

2. Я догадался о том, как определяется высота строки, используя макет и классы, которые создают стили и макет предоставленного скриншота. Если бы вы предоставили реальный код, я, вероятно, мог бы опубликовать более точный ответ. Каждый столбец равен 50%, а изображение имеет автоматическую высоту, поэтому ширина изображения фактически является определяющим фактором высоты изображения. Если правый столбец равен 33%, а левый 67%, изображение должно уменьшиться.

3. @dotNET Неважно, обновление выглядит примерно так, пожалуйста, просмотрите в удобное для вас время.