2012-01-16 3 views
3

Итак, я ищу фоновое изображение в CSS, используя лист спрайтов. И просто чтобы быть ясным, я не собираюсь за this effect. У меня есть полный лист спрайтов, и я хотел бы взять квадрат 16 пикселей на 16 пикселей на листе и установить его в качестве фона, который будет повторяться.Альтернатива URI для фрагментов медиа в CSS?

В какой-то момент в будущем, я надеюсь, что смогу это сделать через spacial dimensions using media fragments in the URL parameter, но так как это isn't supported yet Я ищу альтернативу. Есть ли способ получить такой же эффект с помощью современных методов или хаков CSS?

Некоторые примечания:

  • мне не нужно поддерживать старые браузеры, только последние FF или Chrome будет делать.
  • Я бы предпочел чистые решения CSS. Я могу и создам решение JS/Canvas с данными: URI, если мне нужно, но учитывая, сколько элементов мне может понадобиться, я бы предпочел не делать этого, если бы смог получить лучшие результаты с помощью чистого CSS.
  • нужно повторить в обоих x и y направлениях
  • В поисках решения, которое использует одно изображение в памяти/кэш, так что я не должен загрузить спрайт-лист для каждого спрайта Я хочу, чтобы вставить
+0

Вы упомянули URI данных, но только с точки зрения Javascript - вы можете использовать URI данных и иметь «чистое CSS» решение. http://jsfiddle.net/47CMr/ - это * должно * соответствовать большинству ваших целей. В частности, не было бы никаких дополнительных файлов для загрузки, и вы можете кэшировать их, поэтому им нужно только один раз загрузить файл. – SpoonNZ

+1

@SpoonNZ: Мои глаза! Очки, * они ничего не делают!* Но, по всей серьезности, URI данных не будут особенно полезны в CSS здесь, так как вы должны были бы генерировать их вручную в любом случае. – BoltClock

+0

@SpoonNZ Это не совсем то, что я ищу. У меня есть лист спрайта как PNG. Это увеличит размер файла любых стилей CSS (если только я не выполняю класс для * каждого * спрайта, который у меня есть, включая те, которые могут охватывать более одного места спрайта), и это означало бы, что мне нужно будет преобразовать каждый из спрайтов в данные URL-адрес. Моя цель состоит в том, чтобы иметь возможность, учитывая x и y, а также ширину и высоту, получить изображение динамически, что этот метод не очень хорош для. – Ktash

ответ

2

Вот чистое решение для CSS, которое работает только в Firefox, но, похоже, отвечает всем вашим требованиям.

body{ background-image: -moz-image-rect(
    url('http://placekitten.com/500/500'), 
    0,100,100,0 
); } 

Пример на http://jsfiddle.net/47CMr/2/

+0

Именно то, что я искал. И даже потенциал поддержки webkit. Хотя, похоже, он больше не находится в спецификации, поэтому мы посмотрим, продолжится ли оно. Признаю награду, когда смогу (я должен ждать ее). – Ktash

+0

Мой googling предположил, что в спецификациях для CSS в будущем есть что-то - я попробовал это в скрипке, но он не работал в FF или Chrome, поэтому сегодня не так много пользы ... – SpoonNZ

+0

Хм, вы имеете в виду нечто иное, чем спецификация URI медиафайла? Потому что я не видел ничего связанного фона, которое, казалось бы, поддерживало бы его ... – Ktash

1

Существует только один метод, который попадает под ваши условия (труднее всего является необходимость повторить): с помощью border-image.

dabblet с демо: http://dabblet.com/gist/1635890

Дело в том, вы можете отметить ту часть, которую вы хотите использовать, используя border-image-slice часть border-image собственности. Синтаксис немного сложный, но с его помощью вы можете создавать разные повторяющиеся патерны из пограничных изображений. Кроме того, когда нужные части не находятся на краю или когда вам нужно повторить изображение как на X, так и на Y, вам понадобится свойство clip, поэтому вам понадобится блок, который будет абсолютным. Все это работает даже в Opera.

Но есть одна плохая, плохая вещь: рендеринг центральной части пограничного изображения - это келли ад: есть разница не только между webkit и mozilla, но даже между Safari и Chrome, поэтому я добавил там много хаков.

В заключение: цель может быть достигнута, но с адскими хаками.

Итак, я бы посоветовал вам использовать данные: uri, потому что в webkits и Fx нет других способов сделать это (в Fx-only вы можете использовать -moz-image-rect, как упоминалось выше).

+0

Использование одного гигантского пограничного и пограничного изображения не является тем, что я рассматривал. И мне действительно нужно поддерживать только один браузер. Это для игры HTML5, и любой браузер будет работать. В основном я использую его для тестирования/демонстрации новых технологий, поэтому для некоторых вещей, чем больше вперед, тем лучше. Спасибо за предложения, хотя :) – Ktash

+0

Да, для новых технологий лучше использовать «образ-резец». Моя версия - просто хак :) – kizu