Использование тэга HTML5 picture для адаптивных изображений. Обязательные, необязательные и недопустимые элементы

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

Типы бизнеса и фидов

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

Тип фида Тип бизнеса Для чего
Фид Яндекс.Маркета (XML) Розничная торговля Продажа электроники и аксессуаров, бытовой техники, промышленного оборудования, одежды, мебели, товаров для сада и огорода, спортивных товаров, строительных материалов, детских товаров, шин и дисков, косметики, парфюмерии и т. д.
Фид «Отели и аренда жилья» Google Рекламы (CSV) Отели Бронирование отелей
Фид Авто.ру (XML) Автомобили Продажа новых и подержанных автомобилей
Фид Яндекс.Недвижимости (XML) Недвижимость Продажа жилой недвижимости
Фид «Авиабилеты» Google Рекламы (CSV) Авиабилеты Продажа авиабилетов
Универсальный фид (CSV) Другой бизнес Товары и услуги, не подходящие другим типам бизнеса
Фид Яндекс.Маркета (XML)
Фид «Специальный» Google Рекламы (CSV)
Фид «Путешествия» Google Рекламы (CSV) Продажа туров, билетов на поезда, паромы и т. д.

Товарные предложения, описанные не в соответствии со своим типом, отклоняются.

Требования к фиду

Любой XML-документ может содержать только один корневой элемент. Формат YML в качестве корневого использует элемент . Атрибут date элемента должен соответствовать дате и времени генерации YML-файла на стороне рекламодателя. Дата должна иметь формат YYYY-MM-DD hh:mm.

  • Упрощенный тип описания
  • Произвольный тип описания (vendor.model)

Базовый, более простой тип описания.

Пример: \n \n 1620.00\n 1800.00\n RUB\n 19\n \n false\n true\n false\n Антивирус ESET NOD32 Platinum Edition\n Eset\n NOD32-ENA-NS(BOX)-2-1\n Антивирус ESET NOD32 Platinum Edition - лицензия на 2 года NOD32-ENA-NS(BOX)-2-1\n Оплата: Наличные, Б/Н, пластиковые карты, кредит\n true\n Россия\n 18\n

Атрибуты элемента

Элементы, входящие в

Элемент Описание
name

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

Обязательный элемент.

url

URL страницы товара.

Обязательный элемент.

picture
price
currencyId
model
vendor

Производитель.

vendorCode
description
categoryId

.

market_category
store
pickup
delivery
oldprice
sales_notes

Информация о заказе:

manufacturer_warranty

Наличие гарантии:

country_of_origin

Страна производства товара.

adult
age
downloadable

Возможность скачать товар:

    true - товар можно скачать;

    false - товар нельзя скачать.

Этот тип описания является наиболее удобным и универсальным, он рекомендован для описания товаров из большинства категорий.

Пример: \nhttp://www.надежнаятехника.рф/catalog/element/index.php?from=ya_market&utm_source=ya_market&utm_medium=cpc& \n889.00 \n17000.00 \nRUR \n1111 \nhttp://89.123.45.678/catalog/photo/19/6.JPG \nfalse \nfalse \ntrue \nПринтер \nНP \nDeskjet D2663 \nСерия принтеров для людей, которым нужен надежный, простой в использовании цветной принтер для повседневной печати... \nНеобходима предоплата. \ntrue \nЯпония \n

Атрибуты элемента

Атрибут Описание
id

Идентификатор товара.

Обязательный атрибут.

type

Обязательный атрибут.

available

Возможность купить товар:

  • true - товар есть в наличии;
  • false - товара нет в наличии.
Атрибут Описание
id

Идентификатор товара.

Обязательный атрибут.

type

Тип описания предложения. Значение должно быть vendor.model .

Обязательный атрибут.

available

Возможность купить товар:

  • true - товар есть в наличии;
  • false - товара нет в наличии.

Элементы, входящие в

Элемент Описание
url

URL страницы товара.

Обязательный элемент.

picture

Обязательный элемент для смарт-баннеров.

price

Цена, по которой данный товар можно приобрести.

currencyId

Код валюты (RUB , USD , UAH , KZT).

Обязательный элемент, если есть элемент price .

model

Обязательный элемент.

vendor

Производитель.

Обязательный элемент.

vendorCode

Код товара (указывается код производителя).

description

Описание товарного предложения.

typePrefix
categoryId

Обязательный элемент. Элемент может содержать только один элемент .

market_category
store

Возможность купить товар в розничном магазине:

    true - товар можно купить в розничном магазине;

    false - возможность покупки в розничном магазине отсутствует.

pickup

Возможность самовывоза из пунктов выдачи:

    true - товар можно забрать самостоятельно;

    false - возможность самовывоза отсутствует.

delivery

Возможность курьерской доставки товара:

oldprice

Старая цена на товар, которая обязательно должна быть выше новой цены (price).

sales_notes

Информация о заказе:

    минимальной сумме заказа, минимальной партии товара, необходимости предоплаты;

    вариантах оплаты, описания акций и распродаж.

manufacturer_warranty

Наличие гарантии:

country_of_origin

Страна производства товара.

adult
age
downloadable

Возможность скачать товар:

    true - товар можно скачать;

    false - товар нельзя скачать.

Отели: фид «Отели и аренда жилья» Google Рекламы

Фид «Отели и аренда жилья» Google Рекламы в формате CSV должен использоваться для типа бизнеса «Отели» . Первая строка содержит названия столбцов, а следующие строки ― сами данные. Содержимое столбцов отделяется друг от друга запятой. Данные в фиде должны быть в кодировке UTF-8.

Элемент Описание

Идентификатор отеля.

Обязательный элемент.

Название отеля.

Обязательный элемент.

URL страницы предложения.

Обязательный элемент.

Destination name

Обязательный элемент.

Обязательный элемент для смарт-баннеров.

Price
Элемент Описание

Идентификатор отеля.

Обязательный элемент.

Название отеля.

Обязательный элемент.

URL страницы предложения.

Обязательный элемент.

Destination name

Местоположение отеля (не более 25 символов).

Обязательный элемент.

Обязательный элемент для смарт-баннеров.

Price

Цена предложения. Число и код валюты (RUB , USD , UAH , KZT). Используйте точку (.) в качестве десятичного разделителя.

Количество звезд. Целое число от 1 до 5.

Пользовательская оценка, число. Используйте точку (.) в качестве десятичного разделителя.

Максимально возможная оценка, целое число. По умолчанию 5.

Услуги отеля. Укажите значения через точку с запятой: бар;бассейн;бесплатный Wi-Fi

Примечание. Значения, содержащие запятую, нужно заключить в кавычки (\"\"). Например, \"Москва , центр\".

Автомобили: фид Авто.ру

Фид Авто.ру в формате XML должен использоваться для типа бизнеса «Автомобили» . Данные в фиде должны быть в кодировке UTF-8.

Список предложений о продаже недвижимости рекламодателя содержится в элементе . Каждое товарное предложение (квартира) описывается отдельным элементом .

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

Внимание.

Мы не принимаем фиды с предложениями об аренде недвижимости.

Пример: \n продажа\n жилая\n квартира\n http://www.developer.ru/search18\n 2015-04-02T19:00:06+03:00\n \n Санкт-Петербург\n о. Васильевский\n 18-я линия В.О., 32\n \n Василеостровская\n 10\n 5\n \n \n \n 4780000\n RUR\n \n \n ЗАО \"Застройщик\" \n \n 13\n 15\n \n 63.00\n кв. м\n \n Северная фантазия\n http://www.developer.ru/images/plans/000001289.jpg\n

Атрибуты элемента

Элементы, входящие в

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

Элемент Описание
type

Тип сделки.

Значение - только продажа.

Обязательный элемент.

location

\n \n \n \n …\n

Обязательный элемент.

locality-name

Название населенного пункта.

Обязательный элемент.

sub-locality-name
address
metro

Ближайшая станция метро.

\n \n \n \n

name
time-on-transport
time-on-foot
url

Обязательный элемент.

image

Обязательный элемент для смарт-баннеров.

building-name

Обязательный элемент.

sales-agent

\n \n

Обязательный элемент.

organization

Обязательный элемент.

price

\n \n \n

value
currency

Код валюты (RUB , USD , UAH , KZT).

area

Общая площадь.

\n \n \n

value
unit

Единица площади помещения.

floor
Элемент Описание
type

Тип сделки.

Значение - только продажа.

Обязательный элемент.

location

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

\n \n \n \n …\n

Обязательный элемент.

locality-name

Название населенного пункта.

Обязательный элемент.

sub-locality-name
address
metro

Ближайшая станция метро.

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

\n \n \n \n

name
time-on-transport

Время до метро в минутах на транспорте.

time-on-foot
url

Обязательный элемент.

image

Обязательный элемент для смарт-баннеров.

building-name

Название жилого комплекса. По этому элементу квартиры объединяют в ЖК.

Если название ЖК неизвестно, укажите улицу и номер дома (Ленина, 25)

Обязательный элемент.

sales-agent

Информация о застройщике. Во вложенных тегах указывается подробная информация:

\n \n

Обязательный элемент.

organization

Наименование юридического лица застройщика.

Обязательный элемент.

price

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

\n \n \n

value
currency

Код валюты (RUB , USD , UAH , KZT).

Обязательный элемент, если есть элемент value .

area

Общая площадь.

Значение и единица измерения площади передаются во вложенных тэгах:

\n \n \n

value
unit

Единица площади помещения.

Элемент используется, если цена указана за единицу площади.

Возможные значения: кв. м / sq. m .

floor

Авиабилеты: фид «Авиабилеты» Google Рекламы

Фид «Авиабилеты» Google Рекламы в формате CSV должен использоваться для типа бизнеса «Авиабилеты» . Первая строка содержит названия столбцов, а следующие строки ― сами данные. Содержимое столбцов отделяется друг от друга запятой. Данные в фиде должны быть в кодировке UTF-8.

Пример: Элементы, входящие в CSV

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

Элемент Описание

Обязательный элемент.

Destination name

Название пункта назначения.

Обязательный элемент.

электронную коммерцию

Название пункта отправления.

URL страницы предложения.

Обязательный элемент.

Обязательный элемент для смарт-баннеров.

Flight price

Цена предложения. Число и код валюты (RUB , USD , UAH , KZT). Используйте точку (.) в качестве десятичного разделителя.

Элемент Описание

Идентификатор пункта назначения.

Обязательный элемент.

Destination name

Название пункта назначения.

Обязательный элемент.

Идентификатор пункта отправления.

Если вы указываете в фиде Origin ID и подключили электронную коммерцию в Яндекс.Метрике, используйте в качестве идентификатора предложения в Ecommerce-объекте Origin ID и Destination ID через дефис. Например, \"id\": \"VKO-LHR\" .

Название пункта отправления.

URL страницы предложения.

Обязательный элемент.

Обязательный элемент для смарт-баннеров.

Flight price

Цена предложения. Число и код валюты (RUB , USD , UAH , KZT). Используйте точку (.) в качестве десятичного разделителя.

Другой бизнес: универсальный фид

Универсальный фид в формате CSV может использоваться в типе «Другой бизнес» . Первая строка содержит названия столбцов, а следующие строки - сами данные. Содержимое столбцов отделяется друг от друга запятой. Данные в фиде должны быть в кодировке UTF-8.

Элементы, входящие в CSV

Элемент Описание Описание

Идентификатор предложения.

Обязательный элемент.

электронную коммерцию

URL страницы предложения.

Обязательный элемент.

Обязательный элемент для смарт-баннеров.

Title Название предложения.
Description

Описание предложения.

Currency Идентификатор предложения.

Обязательный элемент.

Второй идентификатор предложения.

Если вы указываете в фиде ID2 и подключили электронную коммерцию в Яндекс.Метрике, используйте в качестве идентификатора предложения в Ecommerce-объекте ID и ID2 через дефис. Например, \"id\": \"VKO-LHR\" .

URL страницы предложения.

Обязательный элемент.

Обязательный элемент для смарт-баннеров.

Title Название предложения.
Description

Описание предложения.

Цена предложения без валюты. Используйте точку (.) в качестве десятичного разделителя.

Currency

Код валюты (RUB , USD , UAH , KZT).

Обязательный элемент, если есть элемент Price .

Старая цена предложения, которая обязательно должна быть выше новой цены (Price).

Идентификатор предложения.

Обязательный элемент.

Второй идентификатор предложения.

Если вы указываете в фиде ID2 и подключили электронную коммерцию в Яндекс.Метрике, используйте в качестве идентификатора предложения в Ecommerce-объекте ID и ID2 через дефис. Например, \"id\": \"VKO-LHR\" .

URL страницы предложения.

Обязательный элемент.

Обязательный элемент для смарт-баннеров.

Item title

Название предложения.

Item description

Описание предложения.

В Яндекс.Метрике, используйте в качестве идентификатора предложения в Ecommerce-объекте ID и ID2 через дефис. Например, \"id\": \"VKO-LHR\" .

URL страницы предложения.

Обязательный элемент.

Обязательный элемент для смарт-баннеров.

Item title

Название предложения.

Item description

Описание предложения.

Цена предложения с кодом валюты в кодировке ISO 4217 (RUB, USD, UAH, KZT). Используйте точку (.) в качестве десятичного разделителя.

Новая цена предложения, которая обязательно должна быть ниже старой цены (Price).

Другой бизнес: фид «Путешествия» Google Рекламы

Фид «Путешествия» Google Рекламы в формате CSV может использоваться в типе «Другой бизнес» . Первая строка содержит названия столбцов, а следующие строки - сами данные. Содержимое столбцов отделяется друг от друга запятой. Данные в фиде должны быть в кодировке UTF-8.

Элементы, входящие в CSV

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

Элемент Описание

Идентификатор пункта назначения.

Обязательный элемент.

Destination name

Название пункта назначения.

Идентификатор пункта отправления.

Если вы указываете в фиде Origin ID и подключили электронную коммерцию

Название пункта отправления.

URL страницы предложения.

Обязательный элемент.

Обязательный элемент для смарт-баннеров.

Название предложения.

Идентификатор пункта назначения.

Обязательный элемент.

Destination name

Название пункта назначения.

Идентификатор пункта отправления.

Если вы указываете в фиде Origin ID и подключили электронную коммерцию в Яндекс.Метрике, используйте в качестве идентификатора предложения в Ecommerce-объекта Origin ID и Destination ID через дефис. Например, \"id\": \"MOS-AMS\" .

Название пункта отправления.

URL страницы предложения.

Обязательный элемент.

Обязательный элемент для смарт-баннеров.

Название предложения.

Цена предложения с кодом валюты в кодировке ISO 4217 (RUB , USD , UAH , KZT). Используйте точку (.) в качестве десятичного разделителя.

Новая цена предложения, которая обязательно должна быть ниже старой цены (Price).

Добавление фида

Чтобы добавить фид, на странице со списком кампаний перейдите по ссылке Фиды . На странице Управление фидами нажмите кнопку +Добавить фид и выберите тип вашего бизнеса.

  • Ссылка на файл
  • Загрузить файл

Выберите необходимый для загрузки файл. Размер загруженного файла не должен превышать 512 Мб. При обновлении файл скачивается роботом, и новые данные импортируются в Директ.

Вы можете разместить фид в архиве, созданном с помощью алгоритма сжатия ZIP (расширение.zip) или GNU ZIP (расширение.gz).

Если произошла ошибка при добавлении фида (например, размер, формат фида или ссылка на него не соответствуют требованиям), вы увидите статус «Ошибка загрузки» и ссылку на отчет об ошибках.

Валидация файла

При чтении файла проверяются следующие условия:

  • присутствуют все обязательные элементы;
  • все названия элементов являются корректными;
  • каждый элемент присутствует не более одного раза.

При невыполнении любого из этих условий файл отклоняется.

  • Не найдено описание для элемента "yml_catalog". Возможно неверно указан корневой элемент.
  • Ошибка видимо из-за того, что XML совсем не формируется, либо вы сообщили Яндексу неверную ссылку на YML. Для поиска причин ошибки откройте ссылку на ваш YML в браузере.

  • Фатальная ошибка: Ошибка парсинга XML: Error parsing XML feed: Unknown tag: XML tag "b" (строка...
  • В процессе формирования YML, произошла какая-то ошибка. PHP выкинул сообщение об ошибке, а он это делает в тэге "b". Откройте исходный код YML, по номеру строки вы легко найдете текст PHP ошибки. Если не знаете, что она значит - поищите в Google. Уверен, вы найдете и рекомендации по устранению этой ошибки.

  • Отсутствует обязательный элемент picture
  • По правилам Яндекс.Маркета, у товара в экспорте должна быть картинка, хотя бы одна. Товары без картинок не экспортируются. Проверьте, что в настройках модуля в поле "Кол-во картинок товара" присутствует число больше нуля. И проверьте, чтобы у товаров в магазине базе были картинки.

  • Ошибка спецификации XML. Приведите прайс-лист в соответствие с техническими требованиями выбранного формата...
  • Ошибка вызвана тем, что в YML-экспорте присутствуют посторонние тэги. Это происходит, если вы экспортируете что-то в тэг keywords. Яндексу этот тэг не нужен. Укажите в настройках модуля "Брать тэг keywords из поля" = "Не выгружать"

  • No required offers"s parameter
  • Ошибка сообщает, что в YML не найден обязательный параметр товарного предложения. Для одежды, обуви и аксессуаров цвет и размер товара должен присутствовать в YML. По строке, где возникла ошибка, вы можете узнать, у какого именно товаре не указан цвет и/или размер. Для этого товара в OpenCart надо указать атрибут или опцию, которая будет экспортирована модулем в YML. Этот атрибут или опцию отметьте галкой в настройках модуля.

Ошибки, которые показываются в браузере
  • При открытии YML в браузере ошибка 500 или 502 "Bad Gateway", или просто белый экран.
  • Скрипт, формирующий YML был завершен с ошибкой. Настройки вашего сайта таковы, что ошибки не показываются. Вам необходимо включить отображение ошибок. Включить ошибки в настройках магазина в админке OpenCart скорее всего будет недостаточно. Отображение ошибок надо включать в файлах.htaccess и php.ini . Но и этого может быть недостаточно. Хостинг сайта может быть так настроен, что файлы эти могут не влиять на вывод ошибок. Правильнее всего - обратиться с технической поддержке хостинга.

  • Ошибка синтаксического анализа XML: корневой элемент не найден
  • Скрипт, формирующий YML был завершен с ошибкой. При этом YML был сформирован не полностью - нет закрывающих тэгов. Загляните в исходный код YML. Если в конце есть сообщение об ошибке - ищите текст ошибки в Яндексе или Гугле. Если сообщения об ошибке нет - смотрите предыдущий пункт.

  • Ошибка "Maximum execution time of 30 seconds exceeded"
  • PHP-скрипту по-умолчанию отводится 30 секунд на выполнение. Если за 30 секунд скрипт не сформировал YML, то скрипт был принудительно завершен. Разумеется, YML при этом не сформировался, либо сформировался не полностью.
    Дело в том, что экспорт всей товарной базы - довольно ресурсоемкая операция. Особенно много времени занимает масштабирование картинок для Яндекса, ведь Яндекс принимает картинки размером не менее, чем 600x600 пикселей. К счастью, OpenCart сохраняет масштабированные картинки в кэш изображений. При повторном экспорте картинки будут быстро браться уже из кэша. Пока кэш изображений не сформирован полностью, скрипт экспорта в YML может работать долго. Попробуйте позапускать скрипт несколько раз, сформируется кэш, скрипт будет работать быстрее, попадая в лимит времени.
    Если это не помогло, время формирования YML по-прежнему велико (из-за того, что у вас очень много товаров), то можно попробовать увеличить параметр max_execution_time в файле настроек PHP php.ini.
    Если и этого мало (ваш хостинг слабоват для Интернет-магазина с такой товарной базой), то можно попытаться формировать YML-экспорт, запуская скрипт через php-cli .

    Вопросы по содержимому YML
    • В экспорте присутствуют не все товары.
    • Может быть несколько причин, по которым не все товары присутвуют в YML-экспорте. Общая причина - настройки модуля и содержимое товарной базы.

  • У товаров не указан производитель, а во вкладке настроек модуля "Что экспортировать" производители выбраны.
  • У товаров не проставлены главные категории, но стоит галка "У товаров есть главные категории" во вкладке "Общие".
  • Товар в черном списке или не в белом списке, который задан на вкладке "Что экспортировать" настроек модуля.
  • Поля "Выгружать только если товар дороже", "Не выгружать, если товар дороже" или галка "Не выгружать товары без картинок" во вкладке "Что экспортировать" исключают товар из иэкспортируемых.
  • Товара нет на складе, а статус его "Остутствие на складе" такой, что товар не экспортируется. Чтобы экспортировать закончившийся товар, во вкладке "Склад и доставка" настроек модуля, не выбирайте ни одного статуса в поле "Статус Нет в наличии".
  • В экспорте присутствуют не все категории.
  • В OpenCart один товар может показываться в нескольких категориях, а в формате YML товар может принадлежать лишь к одной категории. Модуль экспорта привязывает товар к первой попавшейся категории. Поэтому может оказаться, что в некоторых категориях товаров нет, и эти категории не будут присутствовать в экспорте, хотя товары присутствовать будут, правда в других категориях.
    В ocStore есть главные категории , и можно привязывать товары только к главным категориям. Для этого в настройках модуля поставьте галку "У товаров есть главные категории". В этом случае вы получите более детальную классификацию товаров в YML-экспорте, но товары, у которых главная категория не проставлена, вобще не будут экспортированы.

    Как сделать, чтобы...?
    • Как не экспортировать товар, у которого количество нулевое?
    • В настройках модуля во вкладке "Склад и доставка" ищите поле «Статус "Нет в наличии"». В этом поле отметьте Все статусы товара. Чтобы отметить несколько элементов списка, при клике мышью держите клавишу Ctrl.

    Разработка на языках : PHP, JavaScript, node.js. Базы данных : MySQL, PostgreSQL, MongoDB.
    Доработка CMS : OpenCart, PrestaShop, Wordpress. Интеграция с : платежными системами, ВКонтакте, Facebook, Яндекс.

    Особенностью гибких документов является непостоянный состав полей на различных изображениях. Поэтому при создании элемента следует иметь в виду, что объект(ы), описываемый данным элементом может отсутствовать на некотором изображении, поэтому найти его не удастся. Также возможно повреждение изображения при сканировании, такое как зачернение или, наоборот, осветление отдельных участков изображения, приводящее к утере информации. В таком случае объект, соответствующий элементу, также не будет найден. Программа FlexiLayout Studio позволяет при отсутствии элемента на изображении продолжить поиск других элементов. Для того, чтобы разрешить наложение описания на изображение в случае, если некоторый объект не найден, нужно сделать его необязательным.

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

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

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

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

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

    Замечание. В отличие от простых элементов все групповые элементы по умолчанию обязательны.

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

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

    Выбор варианта использования элемента осуществляется в диалоге свойств элемента (вкладка General ).

    Изображения обязательных и недопустимых элементов выделяются следующим образом.

    Изображения заведомо являются одним из самых сложных аспектов адаптивного веб дизайна. Сегодня мы рассмотрим как элемент Являющийся решением проблемы адаптивных изображений, можно использовать прямо сейчас .

    Вначале о проблеме

    Времена попиксельного (pixel perfect) и дизайна фиксированной ширины (fixed-width) ушли в прошлое. Теперь во времена широкоформатных мониторов, интернет телевидения, планшетов и смартфонов различных размеров наши дизайны должны удовлетворять любому устройству шириной от 320px до потенциальных 7680px.

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

    Так что же нам делать?

    Текущее общепринятое решение

    Как правило, вы найдете этот код на любом сайте с адаптивные дизайном:

    Img { max-width: 100%; height: auto; }

    Здесь используется max-width: 100%; для гарантии того, что изображение никогда не выйдет за пределы ширины родительского контейнера. Если родительский контейнер сжимается до ширины, меньшей чем ширина изображения - последнее сжимается вместе с контейнером. Установка height: auto; нужна для сохранения пропорций.

    Одно "жидкое" изображение под все случаи

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

    Новое решение:

    Это новый элемент, который является частью HTML5.

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

    Это позволит загружать разные изображения в зависимости от:

    • Результатов media выражений, например высоты, ширины или ориентации видимой области
    • Плотности пикселей

    Это в свою очередь означает, что вы можете:

    • Загружать файлы изображений соответствующего размера, эффективно используя пропускную способность.
    • Загружать по-разному ориентированные изображения в разных пропорциях для того, чтобы соответствовать изменениям в макете при разных ширинах.
    • Загружать изображения с высоким разрешением для дисплеев с повышенной плотностью пикселей.
    Использование разных изображений в зависимости от условий Как работает ?

    Основные шаги при работе с

  • Создайте открывающий и закрывающий теги .
  • Внутри создайте элемент для каждого выражения, что хотите обработать.
  • Добавьте атрибут media , содержащий выражения для таких вещей как высота и ширина области просмотра, ориентация и т.д.
  • Добавьте атрибут srcset с соответствующим именем файла изображения для загрузки.
  • Добавьте дополнительные имена файлов к атрибуту srcset , если нужно поддерживать разную плотность пикселей, например для Retina дисплеев.
  • Добавьте резервный (fallback) элемент .
  • Вот простой пример, где для случая, когда ширина видимой области меньше 768px - загружается уменьшенное (smaller) изображение:

    Можно заметить, что синтаксис, используемый в атрибуте media является таким же, как и при использовании в CSS media queries. Вы можете использовать те же самые проверки, т.е. проверять max-width , min-width , max-height , min-height , orientation и т.д.

    Эти проверки можно использовать для того, чтобы например загружать альбомную (landscape) или книжную (portrait) версию изображения в зависимости от ориентации устройства, к тому же можно одновременно проверять размеры в этих выражениях. Например:

    Этот код загружает уменьшенную альбомную (landscape) версию изображения для устройств с малым экраном и соответствующей ориентацией. И увеличенную версию того же изображения для устройств с большим экраном.

    Если устройство имеет книжную (portrait) ориентацию - загружается книжная версия изображения, уменьшенная для устройств с малым и увеличенная для устройств с большим экраном.

    Если вы хотите предоставлять изображения в другом разрешении для дисплеев с повышенной плотностью пикселей, это можно сделать, указав дополнительные имена файлов в атрибуте srcset . Давайте к примеру посмотрим на наш первый кусок кода с добавлением обработки для Retina 2x дисплеев:

    Т.к. сначала обрабатывается media query, вы можете управлять размерами изображения, с которыми оно будет показано на экране. Затем будет проверяться плотность пикселей: если дисплей поддерживает повышенную плотность и в пользовательских настройках есть на это разрешение - будут загружены соответствующие версии изображений.

    Использование Сегодня

    Прямо сейчас встроенная поддержка Реализована в Chrome, Firefox и Opera. В будущем, вполне вероятно, мы увидим широкую поддержку и другими браузерами. Но до этого момента еще надо дожить.

    Тем временем вам не нужно ждать, если хотите использовать Прямо сейчас. Просто воспользуйтесь Picturefill 2.0 ; polyfill от умных людей из Filament Group .

    После скачивания файла picturefill.js в свой проект просто подключите его в шапке:

    Есть также опция для асинхронной загрузки скрипта, о которой можно прочитать в документации Picturefill .

    При использовании этого скрипта элемент Будет работать так, как я и объяснял, но с несколькими ограничениями.

    Ограничения Picturefill IE9

    Picturefill отлично работает с разными версиями IE, однако IE9 не поддерживает элементы, которые используются внутри . Чтобы обойти это, оберните source элементы в теги с помощью условных комментариев; это сделает их видимыми для IE9, например:

    Android 2.3

    Как и IE9, Android 2.3 не показывает элементы внутри Однако он понимает атрибут srcset при использовании в обычных тегах. Убедитесь в том, что всегда включаете резервный с именем файла по умолчанию в атрибут srcset для Android 2.3 и других браузеров, которые могут иметь такую же проблему.

    Требуется JavaScript и встроенная поддержка Media Query

    Соответственно требуется, чтобы JavaScript был включен в браузере. Picturefill 2.0 не предоставляет «no-js» решения, ведь если это будет сделано, то когда браузер выкатит нативную поддержку Будет показываться уже несколько изображений. Однако, вы можете использовать Picturefill 1.2, если параметр «no-js» является для вас обязательным.

    Другим требованием Picturefill является встроенная поддержка media query, чтобы позволить обрабатывать выражения в атрибуте media . Все современные браузеры поддерживают media-выражения, лишь IE8 и ниже не имеют их поддержки, что соответствует лишь малой части пользователей .

    Возможны дополнительные HTTP-запросы

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

    Это лишь временная проблема, и она пропадет как только выкатят встроенную поддержку Дополнительная информация

    • Прочитайте подробнее о Picturefill 2.0 и скачайте его для своего проекта с этой страницы .
    • Ознакомьтесь с полной информацией по элементу На сайте responsiveimages.org .

    Пробуйте использовать В своем проекте уже сегодня!

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

    Во-первых, сама проблема

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

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

    Так что же делать?

    Нынешнее, самое распространенное решение

    Как правило, вы найдете следующее в CSS коде практически любого адаптивного сайта:

    img { max-width: 100%; height: auto;}

    img { max - width : 100 % ; height : auto ; }

    Этот код использует настройку max-width: 100%; для того, чтобы убедиться в том, что изображение не будет выдаваться за пределы родительского контейнера. Если родительский контейнер станет меньше ширины изображения, изображение будет уменьшаться вместе с ним. Настройка height: auto; присутствует для того, чтобы при уменьшении сохранялись пропорции изображения.

    Одно «резиновое» изображение для всех устройств

    Это решает проблему в одном ключе, позволяя нам показывать одно изображение при разных обстоятельствах. Но, оно не позволяет нам показывать разные изображения для различных обстоятельств.

    Новое решение: тэг picture

    picture — это новый элемент, который должен стать частью HTML5. Он значительно ускорит процесс размещения адаптивных изображений аналогично принципам работы элементов audio и video. Он позволит задавать несколько элементов source, каждый из которых будет указывать на различные файлы изображений вместе с условиями, при которых они должны загружаться.

    Он позволит вам загружать различные изображения в зависимости от:

    Результатов медиа-запроса, например, высота окна просмотра, ширина, ориентация

    Плотность пикселей

    Что означает, что вы можете:

    Загружать изображения соответствующих размеров, с максимальной отдачей используя имеющуюся ширину канала.

    Загружать изображения с различной обрезкой и пропорциями в соответствии с изменением разметки для экранов разной ширины.

    Загружать изображения с высоким разрешением для экранов с высокой плотностью пикселей.

    Разные изображения загружаются в зависимости от обстоятельств

    Как работает элемент picture?

    Основные шаги для работы с элементом picture это:

    Создание открывающих и закрывающих тэгов picture.

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

    Добавьте атрибут media вашему запросу для таких вещей как высота окна просмотра, ширина, ориентация, и т.д.

    Добавьте атрибут srcset с соответствующим именем файла изображения для загрузки.

    Добавьте дополнительные имена файлов вашему srcset атрибуту, если вы хотите поддерживать экраны с высокой плотностью пикселей, например Ретина.

    Добавьте элемент img в качестве запасного варианта.

    Вот несложный пример, который проверяет, если окно просмотра меньше 768 пикселей, и в случае соответствия загружает изображение меньшего размера:

    < picture > < source srcset = "smaller.jpg" media = "(max-width: 768px)" > < source srcset = "default.jpg" > < img srcset = "default.jpg" alt = "My default image" > < / picture >

    Вы заметите, что синтаксис, использованный в атрибуте media точно такой же, как и тот, к которому вы привыкли, составляя медиа запросы на CSS. Вы можете использовать такие же проверки, значит, вы можете создать запросы для max-width, min-width, max-height, min-height, orientationи так далее.

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

    < picture > < source srcset = "smaller_landscape.jpg" media = "(max-width: 40em) and (orientation: landscape)" > < source srcset = "smaller_portrait.jpg" media = "(max-width: 40em) and (orientation: portrait)" > < source srcset = "default_landscape.jpg" media = "(min-width: 40em) and (orientation: landscape)" > < source srcset = "default_portrait.jpg" media = "(min-width: 40em) and (orientation: portrait)" > < img srcset = "default_landscape.jpg" alt = "My default image" > < / picture >

    Код выше загружает уменьшенную, обрезанную для альбомной ориентации версию изображения для устройства с соответствующей ориентацией. Он загружает увеличенную версию того же изображения для устройств с большим экраном.

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

    Если вы хотите предоставлять версии изображений с различным разрешением для экранов с более высокой плотность, вы можете это сделать с помощью добавления дополнительных имен файлов атрибуту srcset. Например, давайте посмотрим на первый пример кода выше с добавлением поддержки разрешения экрана «Ретина 2х»:

    < picture > < source srcset = "smaller.jpg, smaller_retina.jpg 2x" media = "(max-width: 768px)" > < source srcset = > < img srcset = "default.jpg, default_retina.jpg 2x" alt = "My default image" > < / picture >

    Медиа запрос обрабатывается в первую очередь, таким образом, вы можете контролировать размеры изображения на экране. Затем, проверяется плотность пикселей экрана и если высокая плотность поддерживается и разрешена настройками пользователя, будет загружена версия изображения с более высоким разрешением.

    Использование picture сегодняшний день

    Сейчас родная имплементация picture находится в разработке для браузеров Chrome, Firefox и Opera.В будущем, мы скорее всего, увидим более широкую поддержку и в остальных браузерах. Но, на сегодняшний день поддержка только ожидается.

    Пока что, вам не нужно ждать, если вы хотите начать использовать picture прямо сейчас. Вам всего лишь нужно использовать Picturefill 2.0 — полизаполнение предоставляемое разработчиками из Filament Group .

    После того, как вы скачаете файл picturefill.js в свой проект, он может применяться всего лишь загрузкой его в секцию head вашего сайта:

    Также есть возможность загружать скрипт асинхронно для большей эффективности, о чем вы можете прочитать в документации Picturefill . Вместе с загрузкой этого скрипта, элемент picture будет работать так, как я описал, с небольшими ограничениями. ] -- > < source srcset = "smaller.jpg" media = "(max-width: 768px)" > < source srcset = "default.jpg" > < ! -- [ if IE 9 ] > < / video > < ! [ endif ] -- > < img srcset = "default.jpg" alt = "My default image" > < / picture >

    Android 2.3

    Также как IE9, Android 2.3 не видит элементы source внутри тэгов picture. Однако, он распознает атрибут srcset, когда тот присваивается обычному тэгу img. Убедитесь в том, что вы включаете запасной элемент img с дефолтным именем файла в атрибуте srcset для Android 2.3 или любого другого браузера со схожей проблемой.

    Требуется JavaScript и родная поддержка медиа запросов

    Так как это решение реализовано на JavaScript, соответственно, оно нуждается в JavaScript для корректной работы в браузере. Picturefill 2.0 не предоставляет решений для “no-js”, потому что в противном случае, множество изображений стало бы появляться на страницах, когда родная поддержка будет реализована. Однако, вы можете использовать Picturefill 1.2 если возможность “no-js” важна для вас.

    Следующим требованием Picturefill является родная поддержка медиа запросов, для того чтобы запросы в атрибуте media работали. Все современные браузеры поддерживают медиа запросы, в то время как IE8 и ниже является единственным не поддерживающим браузером с небольшой остаточной базой пользователей .

    Возможны дополнительные HTTP запросы

    Для браузеров, имеющих родную поддержку srcset, но не поддерживающих picture, возможно заданное имя файла в запасном элементе img может быть запрошено до того, как более подходящее изображение будет определено в элементе img. Эта проблема временная и она решится тогда, когда родная поддержка picture будет реализована.