#javascript #iphone #css #image #rounded-corners
#javascript #iPhone #css #изображение #закругленные углы
Вопрос:
Следующий код работает в все настольные браузеры Chrome и Safari на рабочем столе, а также на последних iPhone и всех устройствах Android, которые я тестировал. Однако в iPhone первого поколения и iPhone 3G верхний левый угол <img>
не закруглен.
Другой CSS, который у меня есть для закругления углов (на <h1>
элементах) на iPhone, похоже, отлично работает на этих старых устройствах. Это просто округление для <img>
элемента, который не работает.
Соответствующий Javascript:
var profilePhoto = document.createElement("img");
profilePhoto.setAttribute("src","http://example.com/photo.jpg");
profilePhoto.setAttribute("alt","");
profilePhoto.setAttribute("class","menu-first");
profilePhoto.setAttribute("style","float:left; border:0; padding:0!important; margin-top:0!important; -webkit-border-top-right-radius:0; -webkit-border-top-left-radius:.5em;");
document.getElementById('menu-container').appendChild(profilePhoto);
Соответствующий HTML:
<div id="menu-container"></div>
Я знаю о проблеме «закругленные углы не отображаются, если радиус превышает половину высоты или ширины изображения», и это не то, что здесь происходит. Радиус составляет крошечную долю от размера изображения.
JSFiddle: http://jsfiddle.net/RaK3T /
(Вау, JSFiddle действительно работает на iPhone 3G, это потрясающе!)
ОБНОВЛЕНИЕ: я полагаю, что вполне может быть версия iOS, которая имеет большее значение, чем модель телефона. Похоже, он отлично работает в iOS версии 4.3.2, но не в iOS версии 3.
Комментарии:
1. «Следующий код работает во всех настольных браузерах, в которых я его тестировал» ?? Во всех браузерах WebKit, вы имеете в виду?
2. Да! Код, который у меня есть в моем реальном приложении, также работает для Firefox, но код, который я сократил здесь, работает только в браузерах WebKit. Я обновлю вопрос. Хороший улов.
Ответ №1:
Похоже, вы столкнулись с проблемами в некоторых старых браузерах, при которых граница рисуется как логический слой под изображением переднего плана.
Эффект заключается в том, что закругленные границы действительно нарисованы, но изображение переднего плана затем помещается поверх них и не обрезается. Очевидно, что это влияет только на <img>
тег, поскольку это единственный тег, который содержит изображения переднего плана.
Эта проблема была серьезной несколько лет назад. Это затронуло некоторые браузеры, но не другие, но, безусловно, для более старых версий Firefox и большинства браузеров Webkit это было проблемой.
Проблема была быстро обнаружена и исправлена (несколько быстрее с помощью Webkit, чем Firefox, если мне не изменяет память), и мы все двинулись дальше.
Но это все еще проблема для веб-разработчиков, которым необходимо поддерживать более старые версии этих браузеров.
Есть три приемлемых решения:
- Используйте
background-image
стиль вместо переднего<img>
плана . - Игнорируйте проблему и позвольте старым браузерам жить с квадратными углами (о ужас!).
- Используйте любой из старых хаков с закругленными углами, которые рисуют углы вручную.
Лично я предпочитаю вариант 2, я ценю, что он на самом деле не отвечает на вопрос, но у меня нет с этим проблем: это косметическая деталь в старых браузерах; вы бы не пытались заставить это работать на IE6, не так ли? (не могли бы вы ??).
Если этого недостаточно для вас, то вариант 1 — это типичное решение, с которым в то время работало большинство людей. Но не подходит семантически и имеет проблемы, если вам нужно масштабировать изображение и т. Д.
И чем меньше сказано о варианте 3, тем лучше.