CSS calc не работает в Safari и резервном

У меня есть этот макет, над которым я работаю. Это сильно зависит от CSS calc для выполнения необходимых вычислений.

width: -webkit-calc(50% - 20px);
width: -moz-calc(50% - 20px);
width: calc(50% - 20px);

теперь я не могу заставить это работать в Safari. Я что-то делаю не так?

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



спасибо.

2 ответов


то, как я решил эту проблему, представляет собой чистый CSS-откат, что старые браузеры, которые не поддерживают CSS calc, будут только читать.

figure.left {
    width: 48%;
    width: -webkit-calc(50% - 20px);
    width: -moz-calc(50% - 20px);
    width: calc(50% - 20px);
}

левая и правая панели получают ширину 48%, Если браузер не может прочитать значения calc.

figure.logo {   
    min-width: 40px;
    width: 4%;
    width: -webkit-calc(40px);
    width: -moz-calc(40px);
    width: calc(40px);
}

и логотип, который сидит между двумя панелями, получает шириной 4%. А также минимальная ширина 40px. И если значения calc могут быть прочитаны браузером, то они 40px.


Вы код выглядит нормально, поэтому я думаю, что проблема в совместимости браузера. Согласно Документация Mozilla, эта функция работает в Chrome, Firefox и IE (более новые версии), но отсутствует в Opera и глючит в Safari. этот вопрос для получения дополнительной информации о совместимости. Гораздо более безопасным резервным вариантом / альтернативой было бы выполнить ваши вычисления в Javascript:

if ($(document).width() >= 750){
  $("#yourElementsID").css("width",$("#yourElementsID").width()*0.5-20)
} else if ($(document).width() >= 400){
  // do something here for smaller values
}

можно использовать jQuery .width() функция обнаружения ширина документа, затем установите ширину ваших элементов соответственно. Но просто предупреждаю вас, старайтесь держать как можно больше стилей вне ваших сценариев и внутри ваших таблиц стилей, потому что иначе это будет недостижимо.

если он все еще не работает в некоторых браузерах, используйте Modernizr чтобы обнаружить браузер / версию / ОС, а затем перенаправить их на другую версию страницы.

Edit 1: добавил отзывчивость
изменить 2: Удалены Интервал
Edit 3: добавлено упоминание о модернизации