LINUX.ORG.RU

Встраивание SVG в HTML


1

1

Поддскажите пожалуйста как правильно встраивать SVG в HTML, чтобы работало масштабирование изображения, тоесть если я укажу размеры в <object> чтобы изображение принимало из значения.
Проблема в том что в FF вроде с этим нормально, но в Chromium и Konqueror у изображения появляются полосы прокрутки и изображение не масштабировано.
Вот пример.

Правильный способ пользоваться IMG или CSS background-image (в зависимости от необходимости), вот только не все это умеют.

Deleted
()
Ответ на: комментарий от simple_best_world_web_master

Не считая того, что он решето, да. Но ТС об этом не спрашивал.

Deleted
()
Ответ на: комментарий от simple_best_world_web_master

Ну вообще я хотел svg использовать для декорации сайта, лого например.
Похоже svg ещё рано использовать для этого, придётся использовать png. А жаль.

firestarter ★★★☆
() автор топика
Ответ на: комментарий от simple_best_world_web_master

Намякиваю

<svg
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   version="1.1"
   width="690.02417"                  <==
   height="274.90796"                 <==
   viewBox="0 0 690.02417 274.90796"  <==

wfrr ★★☆
()
Ответ на: Намякиваю от wfrr

Глянул код моего svg файла, там почти так.

<svg
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   version="1.1"
   width="690.02417"
   height="274.90796"
   viewBox="0 0 690.02417 274.90796"
   xml:space="preserve"
   id="svg2">
  <defs
     id="defs4" />

firestarter ★★★☆
() автор топика
Ответ на: комментарий от stevejobs

>К object приписываешь height=275px и всё работает

Так а если мне нужно чтобы изображение отображалось пропорционально уменьшенное?

firestarter ★★★☆
() автор топика
Ответ на: комментарий от firestarter

Там три параметра: размеры картинки, вьюбокс, и размер объекта. Инфа не 100%, но здравый смысл подсказывает для уменьшения размера картинки использовать... уменьшение размера картинки. Поддерживает ли оно проценты - проверь сам :)

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

Не-не, это не то. Размеры должны указываться в параметрах контейнера <object>, изображение должно масштабироваться до этих размеров, так как это делают Firefox и Opera. Таким же образом это происходит с растровыми изображениями в тегах <img>.

firestarter ★★★☆
() автор топика
Ответ на: комментарий от firestarter

Соответственно это их (Chrome/whatever) баги — репорть :)

Deleted
()
Ответ на: комментарий от firestarter

> Размеры должны указываться в параметрах контейнера <object>, изображение должно масштабироваться до этих размеров

где это написано? пруфлинк на стандарт!

когда указаны реальные размеры, будут реальные размеры, безо всякого масштабирования. Поставь на их место 100% - будет тебе масштабирование по размеру объекта.

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

>Поставь на их место 100% - будет тебе масштабирование по размеру объекта.

Так там же у <path> везде размеры тогда тоже надо в проценты переводить?

firestarter ★★★☆
() автор топика
Ответ на: комментарий от firestarter

> Так там же у <path> везде размеры тогда тоже надо в проценты переводить?

в общем, я не вытерпел (с) пытки мысленными экспериментами, открыл твой пример :)

Сделал «ispect element» на твой объект.
Выставил object'у фиксированную высоту (чисто для примера) 300px;
Потом в свойствах объекта грохнул ширину SVG'шки совсем, а вместо высоты поставил 100%.
В результате отображается (на глазок) именно то, что нужно: трехсотпиксельная по высоте SVG'шка.

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

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

SVG векторный, ему всё равно, какого он размера. Этот размер используется (должен использоваться) только когда нет размеров во включающем документе, т.е. дефолт.

Deleted
()
Ответ на: комментарий от stevejobs

Ессесно

http://www.w3.org/TR/html401/struct/objects.html#visual

13.7 Visual presentation of images, objects, and applets
All IMG and OBJECT attributes that concern visual alignment and presentation have been deprecated in favor of style sheets.
13.7.1 Width and height

Attribute definitions
width = length [CN]
Image and object width override.
height = length [CN]
Image and object height override.

When specified, the width and height attributes tell user agents to override the natural image or object size in favor of these values.

When the object is an image, it is scaled. User agents should do their best to scale an object or image to match the width and height specified by the author. Note that lengths expressed as percentages are based on the horizontal or vertical space currently available, not on the natural size of the image, object, or applet.

The height and width attributes give user agents an idea of the size of an image or object so that they may reserve space for it and continue rendering the document while waiting for the image data.

Deleted
()
Ответ на: комментарий от stevejobs

>попробуй в файрбаге провести такой же эксперимент, будет ли выглядеть одинаково. Мне лениво ;)

Причём тут файрбаг? В FF и опере всё нормально с svg, проблемы у Хромиума и Конкверора, тоесть у вебкит браузеров. Просто я думал что делаю что-то не так, видимо их баги...

firestarter ★★★☆
() автор топика
Ответ на: Ессесно от Deleted

1. У ТСа не указан DOCTYPE, поэтому Хром в принципе может рендерить любым стандартом, каким душа пожелает. Хоть HTML5 :) Верно?

2. Ни одного слова про SVG.

«When the object is an image, it is scaled.» - что именно надо шкалить: сами векторы, или вьюпорт, или «белое пространство подкладки»? Не написано.

«not on the natural size of the image» - что именно для SVG является «natural size», как оно вычисляется?

3. «When the object is an image, it is scaled.»
Здесь написано таки про IMG или SVG тоже? Не вижу ни одного упоминания SVG. Судя по строчке «All IMG and OBJECT attributes that concern visual alignment» под словом Images здесь прежде всего имеется в виду объекты IMG.


Если поведение SVG определяется реализацией, то как разработчики хрома/WebKit захотят отображать SVG, так и будет. С какой стати бы им брать за пример для подражания Firefox?

stevejobs ★★★★☆
()
Ответ на: комментарий от wfrr

> по ходу топикстартер ослеп, бо я ему на это намекал еще в 19часов

ты говорил: «я хотел сказать что ты задал картинке размеры и ожидаешь что она будет их игнорировать 8)»

А в том документе, который процитировл Mystra, какбы косвенно утверждается прямо обратное: «lengths expressed as percentages are based on the horizontal or vertical space currently available, not on the natural size of the image».

То есть да, даже если он задал картинке размеры, они должны игнорироваться. Но это только если считать SVG «картинкой»...

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

ты говорил: «я хотел сказать что ты задал картинке размеры и ожидаешь что она будет их игнорировать 8)»

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

Стиви, не буквоедствуй, твои рабы тя не поймут, просто пошевели своими москами и прикинь что ежели внутрях svg не задвать размер то его и не надо будет игнорировать, и даже браузеры (о боже) перестануть бажить

wfrr ★★☆
()
Ответ на: комментарий от wfrr

> Стиви, не буквоедствуй, твои рабы тя не поймут, просто пошевели своими москами и прикинь что ежели внутрях svg не задвать размер то его и не надо будет игнорировать, и даже браузеры (о боже) перестануть бажить

в любом случае, мы пришли к взаимопониманию %) Осталось теперь чтобы еще и ТСа озарило.


... и, ТС, пропиши уже доктайп, глаза кровоточат :)

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

>Осталось теперь чтобы еще и ТСа озарило.

Вы тут понаписали непонятной фигни, скажите толком.


... и, ТС, пропиши уже доктайп, глаза кровоточат :)


Не пофиг? Страница тестовая.

firestarter ★★★☆
() автор топика
Ответ на: комментарий от firestarter

> Вы тут понаписали непонятной фигни, скажите толком.

в самой SVGшке сотри ее размеры, получится именно то, что ты хочешь.

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

>1. У ТСа не указан DOCTYPE, поэтому Хром в принципе может рендерить любым стандартом, каким душа пожелает. Хоть HTML5 :) Верно?

Нет. Отсутствие DOCTYPE означает Quirks mode (для HTML) и не более того. (Для XHTML не значит ничего)

2. Ни одного слова про SVG.

«When the object is an ___image___



Читать в школе не учили?

что именно надо шкалить: сами векторы, или вьюпорт, или „белое пространство подкладки“? Не написано.


LOLWUT? Понимаешь ли, SVG это картинка. Её можно масштабировать. Есть только один способ это делать. Есть даже атрибут у svg элемента (корневой который), который указывает как картинку масштабировать (учитывать пропорции, например). Открой для себя SVG спеку и логику.

3. „When the object is an image, it is scaled.“

Здесь написано таки про IMG или SVG тоже? Не вижу ни одного упоминания SVG.



facepalm.bmp Ты это серьёзно? Какой IMG, этот раздел относится к OBJECT в том числе. Image это image. Any image, dude.

Судя по строчке „All IMG and OBJECT attributes that concern visual alignment“ под словом Images здесь прежде всего имеется в виду объекты IMG.


Facepalm... Сравни IMG и image. И перечитай то предложение, о чём оно говорит?

Если поведение SVG определяется реализацией


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

Deleted
()
Ответ на: комментарий от firestarter

Вы тут понаписали непонятной фигни, скажите толком.

Ох ё, я думал что пишу на русском.

wfrr ★★☆
()
Ответ на: комментарий от Deleted

> Any image, dude.

мой парсер в голове не умеет парсить фразу «any image» =) Если бы я писал анализатор исходника в браузере, то при фразе «object is an image» мгновенно бы затребовал список всего, что может так или иначе являться «image», и стандарты отображения для каждого элемента этого списка. Пока я не увижу где нибудь, что type(SVG)==«Image» - не поверю на слово :)

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

Как хорошо, что браузеры пишут не такие, как ты. Image это изображение. IMG это HTML элемент. Если ты не видишь разницы… OHMY

Deleted
()
Ответ на: комментарий от Deleted

Это ты ещё, видимо, SVG в background-image не видел. В мире нового много тебя ожидает, падаван юный мой.

Deleted
()
Ответ на: комментарий от stevejobs

>> Вы тут понаписали непонятной фигни, скажите толком.

в самой SVGшке сотри ее размеры, получится именно то, что ты хочешь.


Во! Спасибо! Сразу бы так. :D

firestarter ★★★☆
() автор топика
Ответ на: комментарий от stevejobs

>в самой SVGшке сотри ее размеры, получится именно то, что ты хочешь.

viewBox пришлось оставить, иначе содержимое svg обрезается. А как разрешить нарушать пропорции?

firestarter ★★★☆
() автор топика
Ответ на: комментарий от firestarter

viewBox нельзя удалять, это не размер дефолтный, это «полотно», скажем так :)

А как разрешить нарушать пропорции?


<svg preserveAspectRatio=«none» …

Deleted
()
Ответ на: комментарий от Deleted

> Как хорошо, что браузеры пишут не такие, как ты. Image это изображение. IMG это HTML элемент. Если ты не видишь разницы… OHMY

Как хорошо что браузеры не пишут и такие как ты =) Если бы ты писал трансляторы, то понимал бы, что мысл у выражения есть только в контексте. При составлении транслятора HTML контекстом являются базовые объекты языка. Пока слово «Image» не определено в базовых понятиях(X)HTML, оно не имеет никакого смысла. Пока не написано, нечто вроде

«Image = (SVG_declaration,JPEG_declaration,GIF_declaration), SVG_declaration = »<svg source=«SVG_url»>plist</svg>",SVG_url = URL(@see RFC 123) to SVG (@see RFC 5678)",

употребление слова Image в стандарте - неуместно. Человек (типа меня) в этом месте впадает в недоумение, а компилятор должен было бы сказать «Image - undeclared identifier» или что-то типа того.

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

>употребление слова Image в стандарте - неуместно

Стиви, это тебе не C, и даже не ObjC. В контексте HTML стандарта Image это любой тип изображения, поддерживаемое браузером. Будь то BMP, PNG, GIF, MNG или SVG.

Deleted
()
Ответ на: комментарий от Deleted

> В контексте HTML стандарта Image это любой тип изображения

Мысленный эксперимент.

Допустим, я имеется формат изображения, очень простой: бинарный заголовок «Жывотоне чочо упячка, шачло попячтса попятчса, это формат ИНВЕРТИРОВАННЫЙ БМП v1.0, убейте меня кто-нибудь!» плюс инвертированная последовательность байтов изображения в формате BMP (например, человечка с главной страницы сайта upyachka.ru).

Изображение ли это? Определенно.

Теперь делаем что-то вроде: <img src=«upyachka.iBMP />

Если ты прав, и слово Image в стандарте действительно означает ЛЮБОЕ изображение, то этот код должен выводить на странице веселого человечка.

Как думаешь, появится ли человечек? Ставки принимаются. Пошел запасаться попкорном.

stevejobs ★★★★☆
()
Ответ на: комментарий от wfrr

Потому что SWF не поддерживается браузером. Если ты хочешь, что б оно было как image, то соответственно плагин должен всё это уметь сам и браузер должен ему предоставлять возможность быть в IMG, background-image и т.д.

Deleted
()
Ответ на: комментарий от stevejobs

>поддерживаемое браузером

Чтение это не твоя сильная сторона, я вижу.

Изображение ли это? Определенно.


С точки зрения браузера, всё, что он не поддерживает — не изображение.

Купи себе логику лучше, попкорн у него есть, ага.

Deleted
()
Ответ на: комментарий от Deleted

svg тоже не поддерживается самым популярным бравзером, и нигде в стандарте html4 нет требования этого 8)

wfrr ★★☆
()
Ответ на: комментарий от Deleted

«поддерживаемое браузером»

Поддерживает-не поддерживает... вот сам всё и доказал.
То есть, логика работы этого мифического элемента Image зависит не от стандарта, а от браузера. То есть, от реализации. Что и требовалось доказать. Никакого отношения к стандарту слово Image не имеет, и присутствовать там (без объяснений) не должно.

В этом моменте нужно было бы тебя попросить распарсить довольно нелегкое для осмысливания выражение «поддерживается браузером»... но сейчас я хочу выдохнуть, а то беседа совсем забавная получается ;)

stevejobs ★★★★☆
()
Ответ на: комментарий от wfrr

И чо? Там, где поддерживается — изображение, там где нет — браузер строит печальное лицо и _ничего не показывает_. Это что-то меняет в плане растягивания изображения?

Фу, тролль.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.