Веб-разработка

индекс
236,88

Поддержка стандартов в Opera Presto 2.2 и Opera 10 beta

Введение


Только что мы выпустили первую бету Opera 10, которая не только включает некоторые отличные новые возможности, но и просто потрясающе выглядит. Но что это значит для разработчиков? В эту бету включена новая версия движка Opera Presto 2.2, которая обеспечивает лучшую скорость, стабильность, поддержку веб-стандартов и многое другое. Эта публикация посвящена самым важным улучшениям в поддержке веб-стандартов, что были представлены в Opera Presto 2.2 (см. список предыдущих улучшений в Presto 2.1). Нам будет интересно посмотреть на то, что у вас получилось сделать с использованием этих новые возможностей, так что дайте знать в комментариях.

Обратите внимание, что для просмотра примеров вам потребуется последняя бета Opera 10 или предыдущая альфа.

Оглавление
  1. Внедрённые шрифты — веб-типографика становится проще
  2. Полупрозрачная прозрачность, RGBA и HSLA
  3. Выборка по селекторам (Selectors API)
  4. Улучшения в SVG
    1. Свойство FPS в SVG
    2. Внедрённые шрифты в SVG
  5. Развитие Opera Dragonfly
  6. Acid3 — 100/100!
  7. Заключение

Все примеры кода, используемые в статье, можно загрузить отдельно.

Благодарности: отдельные спасибо стоит сказать моим коллегам за отличные примеры к статье: Lachlan Hunt за пример выборки по селекторам, Andreas Bovens за пример использование внедрённых шрифтов и David Vest и Erik Dahlström за примеры SVG.

Внедрённые шрифты — веб-типографика становится проще


Уже много лет больным вопросом для веб-дизайнеров является отсутствие нормальных шрифтов, которые можно использовать на сайтах. Нет, вы конечно можете объявить любой шрифт через CSS, но никто не гарантирует того, что он установлен на машине пользователя. Более того, набор шрифтов, что гарантированно доступны на основных платформах, ничтожно мал и зачастую приходится перечислять специфические для платформ семейства шрифтов, а потом внимательно тестировать не поехал ли ваш дизайн.

К счастью, эта ситуация должна измениться в ближайшем будущем благодаря внедрённым шрифтам. Спецификация Web Fonts в составе модуля CSS 3 позволяет загрузить необходимый файл шрифта вместе со страницей, а затем свободно использовать его на сайте, не опасаясь, что он не установлен на машине пользователя. Для загрузки шрифта вместе со страницей нужно использовать следующий синтаксис:

@font-face {
    font-family: "My font gothic";
    src: url("http://www.myweb.com/fonts/myfont.ttf") format("truetype");
}

Вы описываете ваш специальный шрифт внутри блока @font-face (в самом начале таблицы стилей, прежде, чем объявляете шрифты), а затем обращаетесь к нему как обычно:

p {
    font-family: "My font gothic";  
    ...
}

Andreas сделал для нас пример использования внедрённых шрифтов, в котором используются шрифты Forgotten Futurist и Minya Nouvelle. Откройте пример в браузере, который поддерживает внедрённые шрифты и вы увидите что-то вроде рисунка 1.

Рисунок 1: пример использовния внедрённых шрифтов в бете Opera 10

Рисунок 1: пример использовния внедрённых шрифтов в бете Opera 10.

Другие бесплатные шрифты перечислены на странице Free Font Manifesto и на Larabie Fonts. Более сложные примеры можно найти здесь: Webfonts demo and test pages.

Полупрозрачная прозрачность, RGBA и HSLA


Opera Presto 2.1 уже поддерживает свойство opacity из CSS 3, которое позволяет легко задавать элементу уровень прозрачности — например: div { opacity: .7; }.

Помимо этого, Opera Presto 2.1 поддерживает указание цветов при помощи RGB и HSL значений. HSL-значения позволяют справиться с некоторыми проблемами RGB, вроде неочевидности при подборе цветов (при использовании HSL, если вам нужно получить более светлый тон того же цвета, просто увеличьте значение яркости) или вроде аппаратных сложностей. HSL-значения задаются следующим образом:

div { background-color: hsl(240, 100%, 50%); }

RGB-значения задаются так:

div { background-color: rgb(255, 0, 0); }

Комбинация прозрачности, RGB и HSL

Opera Presto 2.2 поддерживает более удачный способ задания прозрачности: дополнительное четвёртое значение для HSL и RGB — альфа-прозрачность. Это дополнительное значение можно использовать при указании цвета с помощью HSLA и RGBA. Как и хорошо знакомое нам свойство opacity, значение прозрачности в HSLA и RGBA задаётся в диапазоне от нуля до единицы, где 0 — полная прозрачность, а 1 — полная видимость.

div { background-color: hsla(240, 100%, 50%, 0.5); }

div { background-color: rgba(255, 0, 0, 0.5); }

Это просто фантастически удобно для создания анимированных элементов, которые появляются или исчезают при помощи простейшего Javascript-кода — вам нужно изменить всего одно свойство через DOM. Обратите внимание и на то, что opacity устанавливает прозрачность для самого элемента и всех его вложенных потомков, в то время, как использование HSLA и RGBA позволяет задавать прозрачность только самому элементу.

Кстати, Opera Presto 2.2 теперь также поддерживает значение color: transparent для задания прозрачного цвета для текста.

Давайте взглянем на примеры, демонстрирующие эти свойства и разницу между ними. Я создал простой двухколоночный новостной блог, который выглядит как на рисунке 2.

Рисунок 2: пример новостного блока с полупрозрачностью в бете Opera 10

Рисунок 2: пример новостного блока с полупрозрачностью в бете Opera 10.

Самое интересное в коде этого примера — это указание прозрачности для блоков новостей, а также использования свойства background-size для левой колонки, чтобы изображение земного шара аккуратно заполняло колонку по всей ширине (это свойство появилось ещё в Presto 2.1).

Прежде всего, взглянем на пример, где используется свойство opacity. Стили для блока новостей с простой прозрачностью выглядят примерно так:

.news-item {
    background-color: rgb(0, 255, 0);
    opacity: 0.4;
}

Обратите внимание, что я расположил CSS 3 свойства отдельно от более простых свойств для большей понятности кода. Взгляните на CSS-файл первого примера, чтобы стало понятнее о чём я говорю.

Попробуйте открыть пример с обычной прозрачностью и немного его повертеть. Думаю вы сразу заметите, что увиденное отличается от скриншота выше. Всё потому, что, как я уже говорил, значение меньше единицы для свойства opacity делает прозрачным не только сам элемент, но и всех его потомков. В некоторых случаях в этом нет ничего страшного, но в данном — это не самый удачный вариант, поскольку полупрозрачный текст довольно трудно читается.

Но вы можете сделать прозрачным только цвет фона, задав значение цвета RGBA вместо RGB и свойства opacity:

.news-item {
    background-color: rgba(0, 255, 0, 0.4);
}

Это CSS-правило по сути ничем не отличается от предыдущего, кроме того, что только цвет фона стал полупрозрачным. А текст остался полностью видим и отлично читабелен. Взгляните на пример с RGBA, чтобы понять как это работает.

Наконец, для полной отчётности, давайте взглянем на указание того же самого прозрачного фона, но на этот раз при помощи HSLA:

.news-item {
    background-color: hsla(120, 100%, 50%, 0.4);
}

И этот же HSLA-пример вживую.

Забегая вперёд, скажу, что те же форматы задания цвета при помощи RGBA и HSLA работают и в SVG, вне зависимости от прозрачности, заданной при помощи fill-opacity и stroke-opacity.

Выборка по селекторам


Спецификация Selectors API определяет DOM API для того, чтобы сделать выборку элементов гораздо проще.

Взглянем на пример — эта строка кода выбирает все элементы документа с атрибутом class со значением alert:

document.querySelectorAll(".alert");

Следующая строка выберет из документа первый элемент div:

document.querySelector("div");

Использование похожего на CSS синтаксиса в аргументах к функции, делает всё немного проще для тех, кто не слишком хорошо разбирается в Javascript.

Как понятно из предыдущего примера, в Presto 2.2 поддерживаются два новых метода: querySelector() и querySelectorAll(). Первый метод возвращает первый подходящий элемент дерева, тогда как второй возвращает коллекцию всех подходящих элементов в виде NodeList. Текущая спецификация определяет, что эти методы доступны для узлов типа Document, Element и DocumentFragment, однако, наша реализация пока поддерживает только типы Document и Element.

Метод querySelector() полезен в тех случаях, когда необходимо получить только первый элемент и создан для того, чтобы работать эффективнее, чем querySelectorAll() в подобных случаях.

Для того, чтобы сравнить насколько эти методы эффективнее традиционных, давайте рассмотрим следующий фрагмент HTML-кода:

<ul id="fruits">
    <li><input type="checkbox" name="fruit" value="apples"> Apples</li>
    <li><input type="checkbox" name="fruit" value="oranges"> Oranges</li>
    <li><input type="checkbox" name="fruit" value="bananas"> Bananas</li>
    <li><input type="checkbox" name="fruit" value="grapes"> Grapes</li>
</ul>

В ситуации, когда пользователь заполнил форму, содержащую эти чекбоксы, вероятно, что вы захотите получить список тех, что были отмечены. При использовании традиционных методов, потребуется сначала получить все чекбоксы, а потом рекурсивно пройтись по ним, проверяя какие из них отмечены.

var fruits = document.getElementById("fruits");
var checkboxes = fruits.getElementsByTagName("input");
var list = [];
for (var i = 0; i < checkboxes.length; i++)
{
    if (checkboxes[i].checked) {
        list.push(checkboxes[i]);
    }
}

При использовании нового API, весь код умещается в одну строку!

var list = document.querySelectorAll("#fruits input:checked");

Этот код возвращает список DOM-элементов, который содержит все чекбоксы, которые были отмечены пользователем. Дальше вы можете делать с этим списком всё, что пожелаете.

Улучшения в SVG


Есть пара улучшений в поддержке SVG в Opera Presto 2.2 и эта часть описывает оба.

Свойство FPS в SVG

Теперь вы можете управлять скоростью (кадры в секунду) своей SVG-анимации при помощи Javascript. Для любого самого корневого элемента svg вы можете задать ID, выбрать элемент при помощи getElementById, а потом увеличить или уменьшить его targetFps свойство. В примере, который подготовил для нас Eric, следующий код вставляет в документ две кнопки, которые позволяют увеличивать или уменьшать скорость текущей анимации.

function checkfps()
{
    svgElm = document.getElementById("o").contentDocument.documentElement;
    setInterval(update, 100); 
}
   
function update()
{
    cfps = svgElm.currentFps;
    tfps = svgElm.targetFps;
    document.getElementById("f").textContent = "currentFps: " + cfps + " targetFps: " + tfps;
}    
      
function incFps() {
    svgElm.targetFps++;
}
      
function decFps() {
    svgElm.targetFps--;
}

Вы также можете получить доступ к текущему значению свойства currentFps. Взгляните на пример Erik’а, демонстрирующий изменение FPS для SVG или ищите его же в архиве со всеми примерами к статье.

Свойство targetFps является не слишком точным, поскольку зависит как от железа, так и софта, но тем не менее, оно даёт некоторую возможность контролировать скорость вашей анимации. Стоит также понимать, что это свойство не отвечает за то, как часто происходит перерисовка при DOM-манипуляциях; это свойство влияет только на явно указанную анимацию.

Внедрённые шрифты в SVG

И если обычные внедрённые шрифты не достаточно круты для вас, то мы также добавили поддержку SVG-шрифтов. Это позволит вам использовать файлы шрифтов в формате SVG для оформления текста (как в HTML, так и в SVG-документах), прямо как обычные внедрённые шрифты. Например:

@font-face {
    font-family: "My SVG font";
    src: url("http://www.myweb.com/fonts/myfont.svg#myFont") format("svg"); 
    font-style: normal, italic;
    font-weight: 500;
}

Взгляните на пример Eric’а с использованием внедрённых шрифтов в SVG, а затем и на сам исходный код, чтобы понять как это работает — рисунок 3. Кстати, UbuntuTitleBold — это SVG-шрифт, тогда как остальные — TrueType-шрифты.

Рисунок 3: внедрённые SVG-шрифты!

Рисунок 3: внедрённые SVG-шрифты!

Чтобы убедиться в том, что всё это работает и в старом добром HTML, взгляните на мой модифицированный пример внедрённых шрифтов, в котором видно, что SVG-шрифт сначала упомянут в CSS, а потом используется для оформления HTML.

SVG-шрифты описаны в SVG-файлах с использованием элементов font или font-face, внутри которых каждый отдельный глиф привязан к элементу glyph. Это может показаться слишком сложным решением, но это совсем не так — особенно с учётом существования бесплатной программы FontForge, которая умеет конвертировать шрифты в самые различные форматы.

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

Ещё одна хорошая новость про SVG-шрифты состоит в том, что при помощи DOM можно модифицировать шрифты прямо на клиенте — это ведь, в конце концов, обычный корректный XML. Ничто не мешает кому-то написать веб-приложение, которое позволит вам отредактировать шрифт, а потом собрать из него на сервере ваш собственный TrueType шрифт.

Развитие Opera Dragonfly


  • Вкладка «Network»: работа над ней пока не закончена, но первый шаг в её развитии уже позволяет наблюдать за исходящим и входящим HTTP-трафиком, что очень полезно для отладки Ajax-приложений.
  • Редактирование DOM: одна из ключевых возможностей третьей альфы Opera Dragonfly — это поддержка редактирования DOM. Всего существует два режима редактирования: первый позволяет редактировать, добавляеть или удалять атрибуты и фрагменты текста в режиме реального времени. Он активируется двойным кликом на атрибуте, его значении или на фрагменте текста. Второй режим позволяет редактировать DOM в виде простого текста — например, добавлять в DOM новые элементы. Этот режим активируется двойным кликом по открывающему или закрывающему тегу элемента. После этого сам элемент и его потомки превращаются в простое текстовое поле. В данный момент существует известная проблема с первым типом редактирования, которая не позволяет выйти из режима редактирования после нажатия ввода. Эта проблема без лишнего шума будет поправлена в следующих обновлениях.
  • Общие интерфейсные улучшения: мы сделали множество интерфейсных улучшений в Opera Dragonfly, включая способ, при помощи которого выбирается страница для отладки. Теперь таб, выбранный в браузере, и является страницей для отладки.


Последние события в жизни Opera Dragonfly вы можете узнать в тематическом блоге.

Acid 3 — 100/100


Opera 10 beta набрала сто из ста возможных очков в тесте Acid 3 — рисунок 4. Все будущие сборки браузера будут проходить этот тест полностью.

Рисунок 4: тест Acid 3 показывает результат «сто из ста»

Рисунок 4: тест Acid 3 показывает результат «сто из ста».

Заключение


Надеюсь вам понравился тест-драйв беты Opera 10 с новым движком Opera Presto 2.2 внутри. Следите за новостями о новых улучшениях и, пожалуйста, не стесняйтесь делиться с нами вашими впечатлениями, чтобы помочь нам сделать следующий релиз настолько хорошим, насколько это вообще возможно.

Полезные ссылки



Chris Mills, Developer Relations Manager, Opera Software

Upd: Официальная версия перевода на Dev.Opera — Поддержка стандартов в Opera Presto 2.2 и Opera 10 beta
+46
4 июня 2009, 04:17
4

комментарии (41)

+4
Vas3K #
А не подскажете, планируется ли в ближайшее время реализовать вкусности CSS3, типа border-radius, box-shadow и др? Давно уже жду.
+2
Metallist #
Поддерживаю, вопрос насущный. В моём случае особенно жду border-radius, поскольку в очень многих проектах приходится использовать скруглённые углы элементов.
+1
kirsan_vlz #
Планируется. Был на семинаре в рамках «Университетского тура 2009», рассказывали о многом из этого и показывали. В примерах и HTML 5 и CSS 3 какими-то из сборок альфы поддерживались. Причём поддержку этих стандартов обещали полную, а не отдельными свойствами.
–1
Gero #
Еще нет таких стандартов, так что, кроме как отдельными свойствами, не получится.
+5
kirsan_vlz #
От Opera Software в W3C 25 человек. Как говорили, многие детали стандартов уже написаны, но проходят утверждение. Так что те части, которые уже утверждены будут, скорее всего, использоваться опрой на полную катушку.
p.s. Именно опера пытается продвинуть в стандарты SVG графику, т.к. компания категорически против flash'а.
+1
DmitryBaranovskiy #
По-моему SVG уже и так давно стандарт.
0
kirsan_vlz #
Немного не так выразился. Я имел в виду, что пытается популяризировать SVG дабы вытеснить flash.
+1
pepelsbey #
Насколько мне известно, эти фичи уже давно в работе и некоторые мои особо посвещённые коллеги уже видели border-radius в Опере ;)
–4
Tbird #
У меня одного все примеры в Лисе заработали?
–1
John_Minority #
Шрифты не те!
+3
b3nd3r #
А какая версия FF? Я попробовал FF 3.5 beta 4, прозрачность работает, а вот внедрённые шрифты, svg шрифты, fps — нет.
+1
dimap #
Пруфлинк?
+1
kavolorn #
Замечательно, сажусь пробовать :)) Спасибо, ребята!.. Надеюсь производители других браузеров тоже таких вкусностей принесут (хотябы ttf шрифты).
0
bolk #
fft-шрифты уже много где поддерживаются. Погуглите «web fonts».
0
Mithgol #
TTF-шрифты поддерживаются в Safari 3.1 (причём Safari дозволяет грузить шрифты из другого домена) и в Firefox 3.5 (но Firefox дозволяет шрифты только из того же домена, в котором страница, если только не заданы специальные заголовки Access Control в HTTP-отклике вебосервера, отдающего шрифт, как на www.w3.org/TR/access-control/ объясняется).
0
kavolorn #
Спасибо, за ответ. Я перестал следить за этой темой, когда в последний раз разочаровался в работе со шрифтами… :) Но будущее обещает быть хорошим уже скоро!
–1
Mithgol #
Раз перестали, так вот же ещё гиперссылка:

www.css3.info/preview/web-fonts-with-font-face/

Авось оттудова ещё что раскопать возможно станет.
–4
Newton #
Safari 3.2.1 — абсолютно все примеры работают))
+1
homm #
Safari 4 betta fps test и svg fonts не работают. Правда не сами шрифты не работают, а голубые лучи отображаются черными.
0
seleko #
помешательство на шрифтах нескако напрягает…
например я использую те шрифты, которые МНЕ гля глаз приятнее…
чем дизайнерские извраты аля «красивенько выколи себе глаз» (с)
0
muhas #
Специально для тебя есть возможность включить свои css и игнорить в них шрифты страницы. так что предусмотрели всё :)

кстати, любопытно послушать спецов по безопасности относительно загрузки левых шрифтов…
0
kichik #
То есть если очередной чудо-дизайнер вставил на своб страницу те шрифты, которые ему лично кажутся чудесными-расчудесными, а на деле изврат последней инстранции, обычный пользователь должно залезть и через user css переписать все шрифты на нормальные?
+1
Optik #
Если чудо-дизайнер, чудо-программист и чудо-верстальщик сделают «чудо», то что ж терь страницу переделывать полностью? Закройте сайт и всё. Не надо вешать кривизну рук одних на инструменты.
0
kichik #
О чем и речь: «включить свои css и игнорить в них шрифты страницы. так что предусмотрели всё :)» — плохой способ решения проблемы.
0
pepelsbey #
> кстати, любопытно послушать спецов по безопасности
> относительно загрузки левых шрифтов…

Вообще — да. Помнится были для Windows давным давно какие-то неприятности, связанные с исполнением TrueType в системе. Но, я так понимаю, IE сейчас поддерживает только специфический контейнер .eot, а остальные браузеры устанавливают шрифт не в систему, а только для себя.

Но тема волнительная, да.
0
Mithgol #
Не только для Windows, но и кросс-платформенные.

www.tinyurl.com/TrueType-Vulnerability

www.securityfocus.com/bid/29639
0
pepelsbey #
Да, значит и правда боязно.

В этом случае SVG-шрифты кажутся хорошим решением )
+7
l2k #
IE 4.0 — страницы все грузятся )))))
0
FuN_ViT #
Не могу скачать инсталл-файлик — 404 ошибка.
0
agsh #
выбери другой сервер
–2
c_project #
надо скачать посмотреть что там такого развилось в Dragonfly… ибо то что было в 9ке это ужас… лучшебы не показывали это убожество… нереально медленно, неудобно, менять чтото на лету нет возможности… кароче я не в восторге был…
попробую 10ю… посмотрю чем он стал лучше для девелоперов…
0
Optik #
Вроде симпатичней стало. Надо как раз в деле опробовать.
Не нравятся пока только две вещи: иконки кнопок (без хинта не могу понять что есть что) и то что открывается стрекоза сразу для всех страниц (ну вот зачем мне в гугле или яндексе оно? код тырить разве что). Ну и хотелось бы не так далеко чтобы стрекоза в меню была и хоткей для нее.
0
Metallist #
По умолчанию Dragonfly через CTRL+SHIFT+I вызывается (Opera 10.0b)
0
Optik #
Спасибо. Я правда уже кнопку для него на панели сделал.
0
ilis #
На большом компе опера давно основной браузер, а вот на нетбуке пока пользуюсь хромом, исключительно в виду экономии пространства по вертикали, он обьединяет панель табов и заголовок окна… вот бы такую фичу в оперу…
0
hannimed #
F11 очень удобно :)
Плюс масштабирование в Опере куда лучше чем в хроме — не маловажно для нетбуков.
Турбо — тоже важно.
Сравните занимаемую память :)
0
k_s #
operawiki.info/CustomButtons#fullscreen

четвертая кнопка снизу, фулскрин с табами и адресной строкой
0
hannimed #
Полезная ссылка :)
0
akzhan #
У меня тоже основной браузер Хром 3.

Просто более удобен.
0
abrwalk #
хром ещё не браузер
0
akzhan #
Забавно, но меня он полностью удовлетворяет именно как браузер :)

IE и Opera использую только для тестирования поведения в разных браузерах.
Firefox — ещё и как среду отладки.

Для всех остальных домашних и офисных применений мне хватает Google Chrome.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.