Гибкий способ рендеринга миниатюрных пузырей с тенями в HTML - PullRequest
3 голосов
/ 15 сентября 2011

Цель: миниатюры, похожие на речевые пузыри, с тенью, как эта:

http://min.us/moStWhsGd http://k.minus.com/jbkSDvCUDvhYcj.jpg

Размер и тень могут быть изменены.

Моей первой идеей, конечно же, было наложение png, но ему не хватает гибкости и тоже не весело. Тем не менее, это всегда возможно как запасной вариант для старых ie-s.

Также подумал о рендеринге "tail" с повернутым div, но соответствующий фон в нем был бы пита.

Что может быть лучше? Холст или маска SVG? Есть мало, чтобы не эксп. с этими технологиями, поэтому несколько советов для начала будут очень благодарны.

ОБНОВЛЕНИЕ: Ну, вот что я придумал для svg после нескольких часов навигации по документам и несоответствиям браузера:

  1. Кажется невозможным применить как обтравочный контур, так и svg-фильтр для тени к html-элементу через css, поэтому мы должны отрисовать всю историю внутри <svg>.
  2. Я нашел два способа встраивания изображения в SVG: 1) Подгонщик с feImage элементом 2) foreignObject с img или div с фоном.

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

    <svg filter="url(#dropshadow)"> <rect x="0" y="0" width="120" height="120" filter="url(#imageFilter)" clip-path="url(#clipPath)"/> </svg>

    Это будет работать как в FF, так и в Chrome (я не смог заставить его работать в Opera и не пробовал ie9). Однако при использовании этого метода изображение в FF выглядит размытым, по крайней мере, при изменении размера, а в Chrome оно выглядит светлее (так!), Чем оригинал.

    Необходимость создания отдельного фильтра для каждого изображения делает его интересным только с исследовательской точки зрения.

    Второй метод может выглядеть следующим образом

    <svg filter="url(#dropshadow)"> <foreignObject width="140" height="140" clip-path="url(#clipPath)"> <img src="img/ourImage.png" height="140" /> </foreignObject> </svg>

    Он работает безупречно в FF, но ни Chrome, ни Opera не могут применить обтравочный контур к foreignObject (не пробовал ie9).

  3. Кажется, только FF поддерживает несколько элементов в clippingPath: если вы добавите туда более одного прямоугольника, Chrome и Opera выведут что-то странное. Поэтому, чтобы использовать первый метод в Chrome, мне пришлось создать path в InkScape, в то время как в FF мне удалось создать «пузырь» с двумя прямоугольниками, одним большим и одним маленьким и повернутым.

Итак, второй метод выглядит довольно неплохо, он довольно гибкий и простой в использовании. Если бы только другие браузеры, кроме FF, лучше поддерживали обтравочные контуры ...

Вот примеры jsFiddle: http://jsfiddle.net/B7593/11/ демонстрирует оба варианта с обтравочным контуром, объединенным из 2 прямоугольников, поэтому работает только в FF, http://jsfiddle.net/B7593/10/ использует элемент пути, созданный с помощью InkScape, и частично работает в Chrome.

UPDATE2: Что ж, позор, есть третий и самый подходящий способ встраивания изображений в svg: элемент изображения .

Ответы [ 2 ]

3 голосов
/ 15 сентября 2011

Если вы хотите сделать это как SVG, вот как я бы это сделал:

  • использовать растровое изображение для аватара
  • использовать путь-клип, который определяетформа пузыря с использованием элемента path
  • применение пути клипа к элементу изображения
  • применение фильтра SVG к элементу изображения для получения тени

Затем повторно используйте базовую настройку и просто замените URL-адрес аватара.Быстро создать прототип с помощью Inkscape или Illustrator должно быть довольно просто.

Обновление: Вот пример того, что я имел в виду.

0 голосов
/ 16 сентября 2011

Выполните поиск в Google для конвертера SVG в HTML 0,7 Используйте поиск на движке конвертера, чтобы открыть библиотеку клипартов и выполнить поиск на этом сайте в пузырьке. Найдите общий и измените его в Inkscape Преобразуйте это в JavaScript Есть более 3 вариантов. Теперь у вас есть речевой пузырь в чистом Рафаэле. Вы можете использовать пузырь и связанную тень в любом месте, динамически управляя его размером, используя шкалу Рафаэля (x, y)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...