Изображение загрузочной карты искажено в Internet Explorer

Я использую карты bootstrap v4 в своем макете, и, к сожалению, изображения в Internet Explorer 11 искажаются. Кажется, что IE полностью игнорирует атрибут height: auto, заданный классом img-fluid. Нужно ли применять пользовательскую высоту к изображениям карточек? Тем не менее, карты отлично отображаются в Chrome и Firefox. Интересно, если я поменяю движок на IE 10 (в консоли F12), проблема исчезнет.

Поскольку изображения с классом img-fluid, которые не обернуты картами, отображаются с соблюдением их исходного соотношения, я думаю, что проблема связана с расположением карт.

   <div class="container">
      <div class="row">
        <div class="col-md-4">
          <div class="card">
            <img class="card-img-top img-fluid" src="img/1.jpg" alt="Step 1" width="600" height="400" />
            <div class="card-block">
              <h3 class="card-title">Step 1</h3>
              <p class="card-text">Text 1</p>
            </div>
          </div>
        </div>
        <div class="col-md-4">
          <div class="card">
            <img class="card-img-top img-fluid" src="img/2.jpg" alt="Step 2" width="600" height="400" />
            <div class="card-block">
              <h3 class="card-title">Step 2</h3>
              <p class="card-text">Text 2</p>
            </div>
          </div>
        </div>
        <div class="col-md-4">
          <div class="card">
            <img class="card-img-top img-fluid" src="img/3.jpg" alt="Step 3" width="600" height="400" />
            <div class="card-block">
              <h3 class="card-title">Step 3</h3>
              <p class="card-text">Text 3</p>
            </div>
          </div>
        </div>
      </div>
    </div>

person ddzone    schedule 07.02.2017    source источник


Ответы (10)


Bootstrap 4 все еще находится в альфа-версии, поэтому вы должны ожидать различных проблем.

Проблема с высотой изображения в IE 11 уже выявлена, и вы можете отследить ее здесь:

https://github.com/twbs/bootstrap/issues/21885

person Zim    schedule 08.02.2017

У меня была та же проблема, но когда я завернул содержимое карты в тег <a>, чтобы сделать его кликабельным, и он исправился, но высота карты была неправильной в IE11, я исправил это, добавив height: 100% к тегу <a>:

<div class="col-md-4">
    <div class="card h-100">
        <a href="/document" style="height:100%;">
            <img class="card-img-top img-fluid" src="foo.jpg">
            <div class="card-block">
                <h4>doc number 4</h4>
                <p class="card-text">yada yada</p>
            </div>
        </a>
    </div>
</div>

Если вы не хотите, чтобы ваша карточка была кликабельной, вы можете заменить <a> на <div> (я не проверял).

person Christophe Le Besnerais    schedule 10.03.2017
comment
Да, замена <a> на <div class="h-100"> тоже работает. - person Spri; 16.06.2017
comment
Добавление h-100 к ‹a› сработало для меня как по волшебству. Спасибо, Кристоф. - person Melissa Freeman; 18.01.2019
comment
Имейте в виду: это нарушает выравнивание card-footers в card-decks. Что это (и решение div от Spri) эффективно делает, так это убивает flexbox. Вы могли бы добиться того же самого, напрямую установив отображение карты на block. Основная проблема заключается в том, что IE11 неправильно поддерживает изображения в качестве элементов flexbox: stackoverflow.com/questions/36822370/ - person Oliver Schimmer; 25.08.2020

Добавление высоты: 100%; также можно сделать, чтобы:

.card img{
  height:100%;
}

если вы не хотите добавлять еще один класс и т. д., чтобы исправить проблемы в проводнике.

person Maximus    schedule 21.02.2019

решение состоит в том, чтобы добавить d-block (display: block) к родительскому div:

<div class="card d-block">
    <img class="card-img-top" src="someimage.jpg">
</div>
person Jonathan Laliberte    schedule 28.04.2019

использовать overflow: hidden для внешнего контейнера

person Mihon    schedule 27.10.2017

Встроенные стили творят чудеса...

eg.: style="height: 100%; overflow: hidden;"

person Ras C-kay sKatle    schedule 24.01.2019

Это известная проблема. Это можно исправить, добавив width: 100%;

Согласно документам:

Изображения SVG и IE 10 В Internet Explorer 10 изображения SVG с .img-fluid имеют непропорционально большой размер. Чтобы исправить это, добавьте width: 100% \9; где необходимо. Это исправление неправильно определяет размеры других форматов изображений, поэтому Bootstrap не применяет его автоматически.

Вы можете проверить документы по этой ссылке: https://getbootstrap.com/docs/4.3/content/images/

person Manuel Abascal    schedule 14.02.2019

Основываясь на комментариях в системе отслеживания ошибок, единственное, что сработало для меня в IE11, это добавление height: 0.01px к изображению карты.

Чтобы сделать его специфичным для IE, я добавил следующее правило:

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
    /* IE10, IE11 */
    .card-img-top {
        min-height: 0.01px;
    }
}

В моем случае у меня также есть .card-footer, который не смог правильно отобразиться в IE11 со всеми предыдущими ответами. Я использую Bootstrap 4.1.3.

person Tim Vermaelen    schedule 07.01.2020

Лучшим решением для меня было изменить только IE.

Выяснилось, что больше всего проблем вызывал текст card-body, потому что он не переносился должным образом.

Элемент card также нуждался в display:block;, но опять же, только в IE.

Нет необходимости добавлять блок для других браузеров, так как это может повлиять на использование класса mt-auto или других утилит.

Вот полное решение:

<div class="card ie-block">
    <img src="https://picsum.photos/500/300" class="card-img-top" />
    <div class="card-body">
        <div class="ie-wrapper"><h5 class="card-title ie-inner">Card title</h5></div>
        <div class="ie-wrapper"><p class="card-text ie-inner">Some quick example text to build on the card title and make up the bulk of the card's content.</p></div>
        <a href="#" class="btn btn-primary">Go somewhere</a>
   </div>
</div>

Затем добавьте следующий CSS только для IE10+:

/* IE10+ specific styles go here */  
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
    .ie-block {
        display: block;
    }
    .ie-wrapper {
        display: flex;
    }
    .ie-inner {
        flex-basis: 100%;
    }
}
person Dario Zadro    schedule 25.01.2020

Я была такая же проблема. Только что добавил обычный класс старой школы «img-responsive» и, кажется, теперь отлично работает в Chrome.

<img class="card-img-top img-responsive" src="images/your-image.jpg" alt="Description">

Обновление BS версии 4:

img-responsive 

сейчас

img-fluid
person Kerry7777    schedule 04.04.2017