Идея — конечно верная. Давно уже нужна технология для отрисовки интерфейсных компонент. Использование картинок — не кашерно.
В вашем примере.
Если масштабировать в Хроме — у кнопок появляется прокрутка. При возвращении к нормальному масштабу, надпись у кнопок не на своем месте.
К сожалению, о возможностях CSS3 пока ещё слишком мало знаю я. SVG мне показался самым логичным решением, поэтому я начал разбираться именно с ним. Скорее всего, теперь буду копать именно в сторону CSS3.
+ градиент легко сымитировать однопиксельным растром. В CSS3 фоновую картинку можно масштабировать. Скругленные бордеры есть. К тому же размер кнопки можно через JS контролировать.
П.С.: а в Silverlight есть такое свойство «SnapsToDevicePixels» ;)
К сожалению, отмасштабированный растровый градиент всё равно не сравняется с векторным: при больших размерах он будет полосчатым из-за толстых, растянутых пикселей. В реальном применении, конечно, этого видно не будет — такие большие кнопки не используются, но останется некий внутренний дискомфорт из-за того, что сделано «некошерно». :-)
не всё так гладко с CSS3. мало-мальски сложные вещи часто рендерятся с отвратительным качеством
Например, кнопка со скруглёнными краями, градиентом, тенью и одно-пиксельным бордером получается вот такой
Возможно, есть трюки, но есть страничка с примерами разных способов внедрения SVG: вариант CSS background у меня отобразился только в Хроме. В Опере 10.63/11.00 и FF 3.6.13 не захотел (четвёрку не тестировал).
В моём случае основная проблема в том, что масштабирование должно выполняться непропорционально: в одном измерении сильнее, чем в другом. В результате вертикальные и горизонтальные линии получают разную толщину, что выглядит некрасиво.
Не знаю, по каким соображениям вы схлопотали первый минус. Идея игр на svg вполне имеет право на жизнь. Вот, например, кто-то уже балуется: пост, сама игра
Нет. SVG — слишком медленный для игр. Он просто поразительный тормозок! =))) И всё, что выходит за пределы статической картинки — ужасно медленно работает.
Если хотите писать на html5 игрушку — используйте Canvas — с ним реально сделать хоть что-то.
Вот игры на фреймворке LibCanvas:
Ну Canvas — растровый. И более глючный, чем Флеш, будем честными =)
LibCanvas — вносит много векторных примитивов. Например, Rectangle: libcanvas.com/ru/tutorial/shapes/rectangle
Документация пока сыроватая, но она в процессе и можно задавать вопросы лично разработчику по емейлу shocksilien@gmail.com
мои принципы
где есть градиент и цвета выходят за пределы безопасной палитры — нету места gif (разве что в самых простых случаях)
где есть текст — нету места jpg (в любом случае)
поэтому тут выход — только png
эту картинку (та что jpg) в gif я бы ещё пережил. но даже при -2 у комментария уже видно то зло которое случилось с текстом при jpeg сжатии.
Толщина линий 0.01 хороша в абстрактном представлении или когда требуется общая масштабируемость картинки для рассматривания деталей. В моём случае применение SVG оказалось довольно специфично: масштабирование применяется не для увеличения/уменьшения как такового, а для конкретной цели, изначально с масштабированием ничего общего не имеющей (растягивание кнопочного фона — и только фона, к тому же ещё и анизотропное).
Пиксели я здесь писал, чтобы дополнительно подчеркнуть, что часть размеров у нас меряется в процентах, а часть — в пикселях.
Естественно, разница видна. Ну задал я толщину 0.01 — граница, само собой, тут же исчезла: кто ж её отрисует-то в одну сотую пикселя? А в сто раз увеличивать кнопку, чтобы границу рассмотреть — это какой-то весьма нестандартный подход к работе с веб-интерфейсами.
Рисуем кнопку в SVG