#php #html #css
#php #HTML #css
Вопрос:
У меня есть следующий код:
<div>
<img src="../images/curry.jpg" height="242" width="300"
alt="Can't find image (http://localhost/images/curry.jpg)">
</div>
Я пытаюсь точно расположить страницу так, чтобы, даже если изображение не найдено, я хотел бы, чтобы текст Alt занимал заданную высоту и ширину.
1) так ли теперь работает HTML / CSS?
2) если нет, то поскольку я генерирую HTML из PHP, могу ли я что-нибудь сделать для достижения того, чего я хочу? Например, сработает ли это, если я проверю несуществование и вместо изображения сгенерирую набор полей нужного размера, содержащий мой альтернативный текст?
Ответ №1:
Ответ на ваш первый вопрос — да. Атрибут Alt предназначен для целей SEO и ведет себя так, как вы его видели.
Это возможно, хотя я должен предупредить вас о дополнительных накладных расходах, существует функция file_exists() для проверки, существует ли изображение.
Если эта функция возвращает false вместо эхо-отображения изображения, просто повторите « <p>Can't find image (http://localhost/images/curry.jpg)</p>
» и добавьте атрибут стиля в обтекающий div, который указывает желаемую ширину и высоту
<div style='height: 242px;width: 300px'>
Комментарии:
1. Как бы то ни было, вы можете легко придать своему стилю
<img>
бытьdisplay:block
илиdisplay:inline-block
и применить к нему ширину и высоту. Просто по умолчанию отображаетсяinline
, поэтому ширина / высота игнорируются, когда он возвращается к тому, чтобы быть не заменяемым элементом.
Ответ №2:
Если вы создаете страницу с помощью PHP, вы можете просто исправить ширину / высоту div.
Что касается «альтернативного текста», не могли бы вы показать небольшой скриншот того, что вы хотите? Я не совсем понимаю, что вы имеете в виду, занимая заданный размер.
Комментарии:
1. 1 за ответ. Спасибо. Я имею в виду, что я хотел альтернативный текст «Не удается найти изображение ( localhost/images/curry.jpg )», чтобы занимать площадь 242 X 300 пикселей.
Ответ №3:
Что происходит, когда браузер не может найти изображение, зависит от браузера. Просто взгляните на это в нескольких браузерах и посмотрите, что произойдет:
Safari использует указанные размеры, но отображает значок «поврежденное изображение» в этом пространстве.
Firefox 4 использует alt
текст, но игнорирует размеры.
Opera и Chrome используют указанные размеры и отображают alt
текст в этом пространстве.
Я не стал проверять IE, потому что эти машины спрятаны в шкафу моих тестовых лабораторий 🙂
Если вам нужно определенное поведение, вам придется сделать это самостоятельно с помощью обертки <div>
с display:inline-block
желаемыми размерами. Упорядочить соответствующий контент будет сложнее, если вы хотите охватить все браузеры.
alt
Атрибут предназначен для пользовательских агентов, которые не могут отображать изображения (например, программы чтения с экрана и устройства, использующие только текст):
Для пользовательских агентов, которые не могут отображать изображения, формы или апплеты, этот атрибут указывает альтернативный текст.
Комментарии:
1. Как бы то ни было, поведение Firefox также зависит от режима quirks vs standards и нескольких других факторов…
2. @Boris: Я был немного удивлен, что Firefox не ведет себя более разумно; OTOH, я проверял вещи с помощью jsfiddle. net таким образом, у меня не было полного контроля над типами документов. Я бы назвал поведение Opera и Chrome наиболее разумным, но реальность имеет мало общего со смыслом.
3. О, Firefox ведет себя совершенно разумно. В стандартном режиме, если изображение не может быть загружено, оно обрабатывается точно так же, как a
<span>
с текстом alt внутри. Тогда макет просто зависит от стилей, которые к нему применяются; это дает автору страницы полный контроль над тем, что именно они хотят, чтобы произошло. Если ваш<img>
естьdisplay:inline
, то, конечно, он будет игнорировать ширину / высоту. Если этоdisplay:inline-block
, то он будет использовать заданный размер. Какой из них вы хотите, полностью зависит от вас; есть варианты использования для обоих.4. @Boris: У вас есть официальная ссылка на
display
значение по умолчанию для<img>
? Я думал, что это былоinline-block
, а неinline
но я ошибался раньше, и я был бы рад, если бы меня исправили, если я ошибаюсь на этот раз.5. w3.org/TR/CSS21/visuren.html#display-prop говорит
Initial: inline
. Таким образом, все отображаетсяinline
, если какая-либо таблица стилей (автор, пользователь или user-agent) не оформлена иначе. Таблицы стилей по умолчанию для типичных пользовательских интерфейсов не изменяют отображаемое значение<img>
. На самом деле вы можете проверить это в любом браузере, просто создав страницу с<img>
на ней и посмотрев, чтоgetComputedStyle
возвращает дляdisplay
.