MS EDGE, MS IE не понимает размытие filter: blur

402
07 июня 2017, 03:12

Как мне им дать понять что блок нужно мылить? Или никак? Только канвас?

Забыл сказать, нужно чтобы background был с center fixed.

Answer 1

Вот метод грубого размытия, который работает во всех браузерах (включая IE 10/11) и не требует фильтров, canvas или JavaScript.

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

body { 
  font-family: Verdana; 
  font-size: 14px; 
  font-weight: bold; 
} 
 
.container { 
  height: 500px; 
  width: 500px; 
  position: relative; 
  overflow: hidden; 
} 
 
#image { 
  background-image: url('http://i.imgur.com/HoWL6o3.jpg'); 
  background-size: contain; 
  background-repeat: no-repeat; 
  height: 100%; 
  width: 100%; 
  position: absolute; 
} 
 
#image.blur { 
  transform: matrix3d(1, 0, 0, 0, 
                      0, 1, 0, 0, 
                      0, 0, 1, 0, 
                      0, 0, 0, 0.05); 
  background-size: 0 0; 
} 
 
#image.blur:before { 
  transform: scale(0.05); 
  position: absolute; 
  top: 0; 
  bottom: 0; 
  left: 0; 
  right: 0; 
  content: '';   
  background-image: inherit; 
  background-size: contain; 
  background-repeat: inherit; 
}
<div class="container"> 
  <div id="image" class="blur"></div> 
</div>

Answer 2

Ещё для себя открыл пример.

  1. Фон (bg.jpg).
  2. Размытый дубликат фона (bgblur.jpg).

Есть допустим body, и мой несчастный блок.

HTML:

<div class="blurred">TEXT</div>

CSS:

body {
    background: url('bg.jpg') no-repeat no-repeat center fixed;
}
.blurred {
    background: url('bgblur.jpg') no-repeat no-repeat center fixed;
    width: 100px;
    height: 100px;
}

Тем самым я замылил блок как мне нужно, но есть минус, 2 фона. Ну ничего.

Answer 3

Фильтр размытия SVG, применяемый к элементу изображения SVG IE 10+ http://jsfiddle.net/jamygolden/yUG5U/2/ (при наведении) Для более старых (<= IE 9) можно использовать

filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2);

MSDN

#svg-image-blur { 
  height: 220px; 
  width: 320px; 
  filter: url(#blur-effect-1); 
}
<svg id="svg-image-blur"> 
    <image id="svg-image"xlink:href="http://css-plus.com/examples/2012/03/gaussian-blur/i/fence.jpg" /> 
 
    <filter id="blur-effect-1"> 
        <feGaussianBlur stdDeviation="2" /> 
    </filter> 
</svg>

Answer 4

Метод размытия на cancas для IE 9+

https://jsfiddle.net/27tc5L5z/1/ - Смотреть тут, так как картинка должна быть доступна по CORS.

function detectIE() { 
  return navigator.userAgent.search(/MSIE|Trident|Edge/) >= 0; 
} 
 
let image = document.querySelector('#img-for-blur'); 
image.src = image.getAttribute('data-src'); 
if (detectIE()) { 
  image.onload = function() { 
    StackBlur.image('img-for-blur', 'ie-canvas', 4, false); 
  }; 
} else { 
  image.style.display = 'block'; 
}
img { 
  filter: blur(4px); 
  display: none; 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/stackblur-canvas/1.4.0/stackblur.js"></script> 
<img id="img-for-blur" data-src="https://i.stack.imgur.com/oURrw.png"> 
<canvas id="ie-canvas"></canvas>

1) Используйте уже упомянутый CSS, чтобы он работал на браузерах без IE без накладных расходов на использования canvas размытия для IE с помощью либы, которое описано ниже:

    filter: blur(1px);

2) Определите, используется ли Internet Explorer / Microsoft Edge с помощью этого JavaScript.

/** 
 * detect IE 
 * returns version of IE or false, if browser is not Internet Explorer 
 */ 
function detectIE() { 
    var ua = window.navigator.userAgent; 
 
    var msie = ua.indexOf('MSIE '); 
    if (msie > 0) { 
        // IE 10 or older => return version number 
        return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); 
    } 
 
    var trident = ua.indexOf('Trident/'); 
    if (trident > 0) { 
        // IE 11 => return version number 
        var rv = ua.indexOf('rv:'); 
        return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); 
    } 
 
    var edge = ua.indexOf('Edge/'); 
    if (edge > 0) { 
       // Edge (IE 12+) => return version number 
       return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); 
    } 
 
    // other browser 
    return false; 
}

3) Если обнаружен Internet Explorer / Microsoft Edge, загрузите изображение в скрытое поле «img» на странице. Вы должны сделать это, используя функцию «onload», чтобы убедиться, что изображение загружено, прежде чем работать с ним, иначе следующий шаг не удастся:

var img = new Image();
img.onload = function() { blurTheImage(); }
img.src = "http://path/to/image.jpg";

4) Используйте JavaScript библиотеку StackBlur, которая работает на IE и Edge:

HTML:

    <div id="ie-image-area" style="display: none;">
        <img id="ie-image"/>
        <canvas id="ie-canvas"></canvas>
    </div>

JavaScript:

function blurTheImage() {
    $("#ie-image").attr("src", "http://path/to/image.jpg");
    StackBlur.image('ie-image', 'ie-canvas', 1, false);
}
READ ALSO
Не добавляется сss свойство через jquery

Не добавляется сss свойство через jquery

Не могу понять почему не меняется свойство у ссылки, при нажатии, при этом класс добавляется

367
аналог background-attachment : fixed

аналог background-attachment : fixed

background-attachment : fixed каждый раз при прокрутке вызывает операцию перерисовки что вызывает очень сильные тормоза и лагиМне нужен аналог этого...

529
Авторизация в android приложении и веб-сокеты [требует правки]

Авторизация в android приложении и веб-сокеты [требует правки]

Краткое описание задачи При запуске клиента, есть поля для ввода логина и пароля и кнопка авторизацииПри нажатии на которую данные, должны...

332
java, расшифровка данных

java, расшифровка данных

Есть класс шифрования/дешифрования строки

363