Есть ли Gecko эквивалентный -webkit-mask или причудливый способ деградации для браузеров Gecko? - PullRequest
5 голосов
/ 04 мая 2011

Я ищу надежный ответ о том, есть ли эквивалентность -webkit-mask в браузерах Gecko / Firefox?

Если нет, есть ли способ унизить -webkit-mask вCSS для прямой сделки с фоновым изображением или я должен просто отказаться от использования Javascript?

Большое спасибо!

Ответы [ 4 ]

5 голосов
/ 04 мая 2011

Если вы нацелены на Firefox, у него есть отличная поддержка SVG, так что теперь вы можете использовать маски SVG вместо CSS. Вот документация Mozillas о том, как сделать маску в SVG. Маски Webkit не являются стандартом, поэтому у меня есть личное сомнение, что вы когда-нибудь увидите их кросс-браузерными.

3 голосов
/ 11 марта 2012

Поработав с этим в течение многих часов, я наконец смог применить сложный путь SVG в качестве маски для элемента div на моем сайте, и он работает в Firefox.Вот что я сделал:

Во-первых, для браузеров Webkit решение было идеальным, и мне просто нужно было создать сплющенный файл png того же размера (или действительно той же формы, который мог бы иметь другой масштаб), какdiv Я хочу замаскировать область, которую я хочу видеть черным, а части, которые я хочу, обрезать прозрачными.Затем я добавил следующую строку в CSS для элемента div, который я хочу замаскировать:

-webkit-mask-box-image: url(path/to/mask.png);

Это было легко!Теперь давайте перейдем к интересной части работы с Firefox.Чтобы этот метод работал, векторная форма должна быть точно такого же размера, что и область, которую вы хотите замаскировать.Итак, моя маска - это относительно сложный векторный путь, разработанный в Fireworks, и мне нужно преобразовать его в путь SVG, и, к счастью, у меня есть Illustrator.В противном случае, используйте ваш любимый редактор SVG, чтобы преобразовать ваш путь к фигуре в SVG.Если вы также используете Fireworks для рисования векторных фигур, вы можете щелкнуть правой кнопкой мыши векторную фигуру, которую хотите использовать, перейти в «Редактировать» -> «Копировать контуры контура», а затем вставить ее в достаточно большой размер.документ в Illustrator или любом другом редакторе SVG, который вы используете.

Далее необходимо экспортировать его в файл SVG.В Illustrator я использовал функцию «Экспорт для Интернета», выбрал формат SVG версии 1.0 и экспортировал его в файл SVG.Положение и размер документа на самом деле не имеют значения, так как мы следуем только после описания пути, а остальные отбрасываем.

Итак, теперь откройте тот SVG-файл, который вы только что создали, в текстовом редакторе, таком как «Редактирование текста» или «Блокнот».Вы увидите некоторый контент в формате XHTML, и один из элементов, в частности, выглядит примерно так:

<path fill-rule="evenodd" clip-rule="evenodd" d="M0,43v0.5V44v0.5v1V46v0.5v1V48v0..."/>

Часть d="...", вероятно, будет много строк длинной для сложной формы.Это единственная часть этого SVG-файла, которая нам небезразлична.

Далее мы должны встроить маску SVG, описывающую этот путь, в HTML нашего сайта.Во-первых, давайте добавим следующие элементы в наш HTML:

<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
    <defs>
        <mask id="maskid" maskUnits="userSpaceOnUse"> 
            <path fill="white" d=""/>
        </mask>
    </defs>
</svg>

Теперь мы просто скопируем содержимое свойства d="" элемента path из файла SVG, который мы сохранили ранее (то есть M0,43v0...) и вставьте в то же свойство d="" элемента path во встроенном элементе маски SVG.Затем мы можем добавить следующую запись в CSS для элемента, который мы хотим замаскировать:

mask: url("#maskid");

Вот и все.Теперь путь должен быть применен в качестве маски к указанному вами элементу.

1 голос
/ 23 ноября 2013

Вот трюк, вам нужно преобразовать все точки, сгенерированные в вашем SVG-файле, в отношение, равное пути к точке, деленному на размерность маски.

Для более простого объяснения я сделал быстрый инструмент, чтобы помочь дизайнерам конвертировать свои SVG в маску, совместимую с Firefox, вы можете увидеть живую демонстрацию на моем сайте (http://www.prollygeek.com), например, Facebook Логотип и твиттер логотип просто маски, и вот инструмент, который вы можете использовать, чтобы преобразовать свой SVG в маску: http://prollygeek.com/svg-mask/

например:

<mask id="fb"  maskUnits="objectBoundingBox" maskContentUnits="objectBoundingBox">
<path d="M236.626,120.827v27.295h-14.851c-4.416,0-7.225,1.204-8.63,3.612c-1.003,1.604-1.405,4.415-1.405,8.229v12.442h25.287l-3.01,27.494H211.74v79.273h-32.712v-79.273h-16.055v-27.494h16.055v-16.457c0-16.858,5.82-27.695,17.259-32.311
c5.619-2.208,10.436-2.811,15.453-2.811H236.626z"/>

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

<mask id="fb"  maskUnits="objectBoundingBox" maskContentUnits="objectBoundingBox">
<path d="M0.59,0.3v0.0675h-0.035c-0.01,0-0.0175,0.0025-0.02,0.0075c-0.0025,0.0025-0.0025,0.01-0.0025,0.02v0.03h0.0625l-0.0075,0.0675H0.5275v0.1975h-0.08v-0.1975h-0.04v-0.0675h0.04v-0.04c0-0.04,0.0125-0.0675,0.0425-0.08c0.0125-0.005,0.025-0.005,0.0375-0.005H0.59z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#ffffff;"/>

Пожалуйста, не забудьте добавить этот атрибут style = "fill-rule: evenodd; clip-rule: evenodd; fill: #ffffff;"

и заполните любым цветом, это не имеет значения.

Затем свяжите свою маску с желаемым элементом CSS:

например:

  mask:url(images/fb.svg#fb);

Калькулятор можно использовать бесплатно, но не копируйте и не публикуйте его где-либо еще.

0 голосов
/ 04 мая 2011

Вы можете применить svg фильтры с помощью css к содержимому HTML в Gecko. Здесь - пример парня, который любит возиться с кодом Mozilla.Это с 2008 года, так что это может быть немного устаревшим.

...