Ошибка функции css calc в IE
РЕДАКТИРОВАТЬ
Как отметил @Joe в своем ответе, проблема с IE не имеет ничего общего с медиа-запросами.
Поэтому я обновил старый заголовок: ("медиа-запросы GLITCH в IE") с текущим. (спасибо также за некоторые мета-советы)
Просто чтобы быть уверенным, я создал новый FIDDLE, содержащий только функцию calc, и low - и вот - я вижу такое же (плохое) поведение в IE, как и в своей оригинальной скрипке с медиа-запросами.
Кроме того, одно интересное наблюдение, которое я заметил, состояло в том, что это происходит только тогда, когда я использую деление в операции calc, но если я использую что-то более простое, например calc(100% - x px)
- IE справляется, все в порядке.
я использую media queries
обосновать список ящиков.
По сути, я настроил медиа-запрос для каждого состояния #columns, где я затем использую calc()
отрабатывать поля справа на каждом из элементов (кроме тех, что в последнем столбце).
Вот скрипка
Теперь это работает нормально в Chrome и Firefox - но когда я запускаю это в IE9+
Я вижу сбой между состояниями медиазапроса (в том числе мерцание и неподчинение медиазапросам).
Вот скриншот того, о чем я говорю
[снимок экрана при ширине окна браузера 710 пикселей]:
Это ошибка IE или я сделал что-то не так?
1 ответ
FIX:
вот плавно работающий jsfiddle моего решения
При дальнейшем изучении математики у меня был подозрение, что у интернет-исследователя возникли проблемы с попыткой сделать что-то глупое (что еще нового), и это должно было разрешить десятичные значения, то есть margin-left:250.123px; таким образом вызывая ОЧЕНЬ мелкие несоответствия и разрушая ваш макет.
Чтобы исправить эту проблему, я временно вычел 1px из всех ваших вычислений, и все выглядит гладко, как может быть
@media (max-width: 350px) {
.container > div {
margin-left: calc(((100% - 150px)/2) - 1px);
margin-right: calc(((100% - 150px)/2) - 1px);
background:black;
}
}
@media (min-width: 350px) and (max-width: 550px) {
.container > div {
margin-right: calc((100% - 300px) - 1px);
background:red;
}
.container > div:nth-child(2n) {
margin-right: 0;
}
}
@media (min-width: 550px) and (max-width: 750px) {
.container > div {
margin-right: calc(((100% - 450px) / 2) - 1px);
background:purple;
}
.container > div:nth-child(3n) {
margin-right: 0;
}
}
@media (min-width: 750px){
.container > div {
margin-right: calc(((100% - 600px) / 3) - 1px);
}
.container > div:nth-child(4n) {
margin-right: 0;
}
}
РЕДАКТИРОВАТЬ:
Я добавил цвета в медиа-запросы, чтобы помочь устранить причину проблемы и исключил их как проблему. Я также исключил режим совместимости как причину этой проблемы, и ваше форматирование calc выглядит просто отлично.
взгляните на обновленную скрипку
если бы медийные запросы прерывались, мы бы также увидели несоответствия в мерцании цвета... это заставляет меня поверить, что это математическая ошибка вычисления, специфичная для наших определений полей / интервалов... дальнейшее расследование скоро будет
я столкнулся с несколькими проблемами с медиа-запросами в т.е... несколько ошибок, которые стоит упомянуть
Режим совместимости - убедитесь, что это отключено, может вызвать непредвиденное поведение или просто нарушить медиа-запросы все вместе
doctype - отсутствие объявления или отсутствие типа документа html5 может привести к еще большему количеству несоответствий в медиа-запросах
<!DOCTYPE html>
я заметил, что вы используете calc(), моей первой реакцией было убедиться, что все математические операторы окружены пробелами... это еще одна проблема, с которой я столкнулся, где
calc(2px+5px)
имеет тенденцию терпеть неудачу там, где должен быть правильный синтаксис
calc(2px + 5px)