Bootstrap 4 IE не принимает col-sm-12 на карту-img-оверлей - PullRequest
0 голосов
/ 16 января 2019

Я создал cta с наложением изображений и текста с помощью класса bootstrap card-img-overlay. Также добавлен div с темной низкой непрозрачностью, чтобы сделать текст ярче. Все работает хорошо во всех браузерах, кроме IE 11.

1: где ширина столбца ломается в IE, я не думаю, что это мой CSS это вызывая эту часть. это известная проблема с начальной загрузкой 4

Q2: как исправить наложение div для отображения поверх изображения, как в Chrome и других браузерах. Есть ли лучший подход, который работает для обоих?

сломал IE IMAGE enter image description here

Chome и другие браузеры, которые работают хорошо enter image description here

.dnow-regionsContent .overlay-div {
    height: 100%;
    width: 100%;
    position: absolute;
    background-color: #000;
    opacity: 0.3;
}
.dnow-regionsContent img {
    max-height: 40rem;
}
<!DOCTYPE html>
<html lang="en">

<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <meta http-equiv="X-UA-Compatible" content="ie=edge">
   <title>slick slider</title>
   <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
      crossorigin="anonymous">


   <link rel="stylesheet" href="css/style.css">
</head>

<body>
   <section class="dnow-regionsWrap">
      <div class="dnow-regionsContent">
         <div class="card bg-dark text-white">
            <img src="https://www.dropbox.com/s/9fvw247x7ml90mf/canadaN.jpg?dl=1" alt="">
            <div class="overlay-div"></div>
            <div class="card-img-overlay d-flex align-items-center container">
               <div class="row  mb-5">
                  <div class=" col-sm-12 text-content">
                     <h2 class="card-title ">
                        Canada
                     </h2>
                     <p class="">
                        Viewl all Location Viewl all Location
                     </p>
                  </div>
               </div>
            </div>
         </div>
      </div>
   </section>

   <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
      crossorigin="anonymous"></script>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
      crossorigin="anonymous"></script>
   <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
      crossorigin="anonymous"></script>

</body>

</html>

Ответы [ 4 ]

0 голосов
/ 19 января 2019

У вас здесь много ненужного.

Вот фрагмент, который работает в IE.

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

<!DOCTYPE html>
<html lang="en">

<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <meta http-equiv="X-UA-Compatible" content="ie=edge">
   <title>slick slider</title>
   <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
      crossorigin="anonymous">


   <link rel="stylesheet" href="css/style.css">
</head>

<body>
   <section class="dnow-regionsWrap">
      <div class="dnow-regionsContent">    
         <div class="card bg-dark text-white">
          <img src="https://cdn2.outdoorphotographer.com/2018/04/DShow_Echoconfl-824x548.jpg" alt="">
            <div class="card-img-overlay align-items-center d-flex">
              <div class="card-body ">
                <h2 class="card-title">
                 Canada
                </h2>
                <p class="card-text">
                  Viewl all Location Viewl all Location
                </p>
              </div>
            </div>
         </div>
      </div>
   </section>
               
   <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
      crossorigin="anonymous"></script>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
      crossorigin="anonymous"></script>
   <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
      crossorigin="anonymous"></script>

</body>

</html>
0 голосов
/ 19 января 2019

У меня нет возможности проверить IE.

Но я воспользовался вашим примером и довел его до низов Bootstrap 4 .

Я изменил ваши CSS и HTML, чтобы использовать :before для наложения изображения на ваш черный непрозрачный стиль. Я применяю это к .card-img-overlay, и любые дочерние элементы естественным образом появятся над псевдо-стилем :before.

HTML

<div class="card bg-dark text-white">
  <img src="https://www.dropbox.com/s/9fvw247x7ml90mf/canadaN.jpg?dl=1" class="card-img" alt="...">
  <div class="card-img-overlay">
    <div class="container h-100">
      <div class="row h-100">
        <div class="col align-self-center">
          <h5 class="card-title">Card title</h5>
          <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
          <p class="card-text">Last updated 3 mins ago</p>
        </div>
      </div>  
    </div>  
  </div>
</div>

SASS / CSS

.card-img-overlay {
  overflow: hidden;

  &:before {
    content: '';
    position: absolute;
    top: 0; right: 0; bottom: 0; left: 0;
    background-color: #000;
    opacity: 0.3;
  }

}

Попробуйте эту скрипку в IE ... https://jsfiddle.net/joshmoto/xm4ude0L/

Если это все еще не работает в IE, тогда вы должны быть старой школы и найти работу. Если бы это был я, я бы вывел класс тела браузера и управлял проблемой для пользователей IE, используя css. Вы не упомянули, как вы генерируете html, поэтому я не могу посоветовать вам функцию класса тела браузера.

Или просто используйте browser happy , чтобы продвигать лучшие способы просмотра веб-страниц, чтобы заставить посетителей посещать их игры и идти в ногу со временем:)

0 голосов
/ 19 января 2019

Фактическая причина:

Это не col-sm-12, а d-flex на card-img-overlay, что делает ваш дизайн не правильным в IE.

Почему?

Когда к элементу применяется display:flex, непосредственному дочернему элементу (т.е. элементам flex) потребуется указать некоторую ширину, иначе они не будут расширяться или занимать достаточно места, как нам требуется, если только содержимого недостаточно.

В вашем случае у нас есть d-flex вдоль card-img-overlay, поэтому непосредственный дочерний элемент (т.е. элемент flex) этого .row не будет иметь ширину 100%. Теперь для столбца col-sm-12, 100% будет полным горизонтальным пространством с его родителем (.row), которое само по себе недостаточно широко. Это реальная проблема здесь.

Решение:

  1. Дайте 100% ширину .row, вы можете использовать класс Bootstrap 4 w-100.
    • Это могло бы быть реальным решением вашей проблемы / запроса, но для того, чтобы получить желаемый вид, все еще требуется немного, как в других браузерах.
  2. Предоставление position: absolute не работает в одиночку, умные браузеры будут знать, что делать, но для других потребуется смещение, например top & left. В вашем случае со значением 0.
  3. Наконец, изображение с фактическими размерами атрибутов width и height тега <img>, здесь в вашем случае это будет width="1200" & height="800".

Таким образом, в основном bootstrap не имеет ничего общего с этой проблемой, это всего лишь поток разметки и свойств CSS.

Примечание:

Я надеюсь, что вышеописанные шаги помогли вам решить проблему или понять ее. Я бы посоветовал всегда иметь атрибуты width и height для тега <img>, чтобы браузеры (старые) знали, как создать конкретный размер блока на странице.

.dnow-regionsContent .overlay-div {
    height: 100%;
    width: 100%;
    position: absolute;
    background-color: #000;
    opacity: 0.3;
    /*Added*/
    top:0;
    left:0;
}
.dnow-regionsContent img {
    max-height: 40rem;
}
<!DOCTYPE html>
<html lang="en">

<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <meta http-equiv="X-UA-Compatible" content="ie=edge">
   <title>slick slider</title>
   <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
      crossorigin="anonymous">


   <link rel="stylesheet" href="css/style.css">
</head>

<body>
   <section class="dnow-regionsWrap">
      <div class="dnow-regionsContent">
         <div class="card bg-dark text-white">
            <img src="https://www.dropbox.com/s/9fvw247x7ml90mf/canadaN.jpg?dl=1" width="1200" height="800" alt="">
            <div class="overlay-div"></div>
            <div class="card-img-overlay d-flex align-items-center container">
               <div class="row mb-5 w-100">
                  <div class=" col-sm-12 text-content">
                     <h2 class="card-title ">
                        Canada
                     </h2>
                     <p class="">
                        Viewl all Location Viewl all Location
                     </p>
                  </div>
               </div>
            </div>
         </div>
      </div>
   </section>

   <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
      crossorigin="anonymous"></script>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
      crossorigin="anonymous"></script>
   <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
      crossorigin="anonymous"></script>

</body>

</html>

Это был не ты, это был IE.

Надеюсь, это вам поможет!

0 голосов
/ 16 января 2019

Bootstrap 4 использует свойство flex для столбца.Это свойство, насколько я знаю, не полностью совместимо с IE.Также IE был прекращен Microsoft, я не стал бы беспокоиться о поддержке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...