Могу ли я использовать переменные CSS в списке шрифтов и заставить его работать в устаревших браузерах?

Я хотел бы использовать переменную CSS для хранения шрифта на случай, если у пользователя не установлен указанный шрифт.

Пример:

:root {
     --common-font: Comic Sans MS;
}

.header1 {
     font-family: CoolFont1, var(--common-font);
}

Не сломаются ли устаревшие браузеры, если я добавлю ссылку на переменную в названиях шрифтов?

https://caniuse.com/#feat=css-variables


person 1.21 gigawatts    schedule 19.12.2018    source источник
comment
Я не знал об этой функции css, поэтому спасибо за ее представление. :-)   -  person johey    schedule 19.12.2018
comment
В любом случае, я думаю, вам лучше использовать меньше или дерзко. Тогда вы можете без проблем использовать переменные; ваш less / sass будет преобразован в css и будет работать во всех браузерах. Его очень легко изучить (это как css с переменными и функциями).   -  person johey    schedule 19.12.2018
comment
@johey LESS / SASS не заменяет переменную CSS, они не имеют той же цели   -  person Temani Afif    schedule 19.12.2018
comment
@ temani-afif Переменные поддержки Less / sass (см. lesscss.org/features/#variables-feature / sass-lang.com/guide). Это служит той же цели, что и переменные css, не так ли?   -  person johey    schedule 19.12.2018
comment
@johey LESS / SASS - это препроцессор для генерации кода CSS, поэтому используемые там переменные не находятся на уровне CSS, в отличие от переменных CSS, которые доступны в коде CSS и которыми мы можем манипулировать с помощью JS и других CSS и т. д. . так что нет, они не такие   -  person Temani Afif    schedule 19.12.2018
comment
@ temani-afif Может быть, переменные css действительно предлагают некоторые дополнительные функции (например, внешние манипуляции - хотя мне интересно, в чем может быть польза от этого), но в данном случае они не нужны. В этом случае препроцессор css действительно подходит. Подробнее об этой дискуссии здесь: css-tricks.com/difference-between -типы-css-переменных   -  person johey    schedule 19.12.2018
comment
@johey Я не спорю, полезны они в данном случае или нет, или что лучше. Я просто подчеркиваю тот факт, что переменные LESS / SASS не совпадают с переменными CSS. Какой из них лучше, остается основанным на мнении. А если вам нужны варианты использования, вот такие: stackoverflow.com/a/49750566/8620333 / stackoverflow.com/q/53239880/8620333 / stackoverflow .com / a / 49618941/8620333 / stackoverflow.com/a/52851246/8620333 (и многие другие )   -  person Temani Afif    schedule 19.12.2018
comment
@ temani-afif Вау, это действительно выглядит очень мощно. Спасибо за информацию. :-)   -  person johey    schedule 19.12.2018
comment
@johey, пожалуйста, не голосуйте последовательно :), это может быть плохо для вас. Система определит это как подозрительное и удалит их.   -  person Temani Afif    schedule 19.12.2018


Ответы (2)


Да, он сломается, вы должны использовать резервный шрифт для устаревшего браузера без использования переменных CSS.

Например:

   .header {
       font-family: sans-serif; /* This is fallback font for old browsers */
       font-family: var(--common-font);
    }

Также вы можете использовать условие @supports с фиктивной функцией. запрос:

.header {
    @supports ( (--a: 0)) {
      /* supported */
      font-family: var(--common-font);
    }

    @supports ( not (--a: 0)) {
      /* not supported */
      font-family: sans-serif; /* This is fallback font for old browsers */
    }
}
person dreyhiflden    schedule 19.12.2018
comment
Я бы, наверное, добавил, как использовать запасной вариант, чтобы дать полный ответ - person Temani Afif; 19.12.2018
comment
Почему это не ответ? Вопрос был в том, сломаются ли устаревшие браузеры, если я добавлю ссылку на переменную в названиях шрифтов ?. Ответ здесь: Да, будет. Если ОП хочет лучшего ответа, я думаю, ему следует переформулировать свой вопрос. :-) - person johey; 19.12.2018

Определенно, он сломается в устаревшем браузере. Однако я думаю, что для преобразования можно использовать плагин postcss-css-variables. Так что вы можете продолжать использовать функцию переменных CSS, но не слишком беспокоиться о устаревшем браузере. Когда устаревшие браузеры исчезнут, вы можете просто удалить плагин.

Оформить заказ https://www.npmjs.com/package/postcss-css-variables для подробностей.

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

Например,

    :root {
        --color-background: #ffaaaa;
        --font-color: #2222ff;
    }

    @media (prefers-color-scheme: dark) {
        :root {
            --color-background: #aaaaff;
            --font-color: #ffFF22;
        }
    }

    body {
        background-color: var(--color-background);
    }
    
    p {
        color: var(--font-color);
    }

будет преобразован в

    body {
        background-color: #ffaaaa;
    }

    @media (prefers-color-scheme: dark) {

        body {
            background-color: #aaaaff;
        }
    }
    
    p {
        color: #2222ff;
    }
    
    @media (prefers-color-scheme: dark) {

        p {
            color: #ffFF22;
        }
    }
person CHANist    schedule 26.01.2021