Фоновые изображения исчезают в iOS Safari - PullRequest
3 голосов
/ 28 сентября 2011

Я работаю над мобильной версией сайта и эмулирую интерфейс iOS. На сайте есть несколько мест, где поддерживаются спрайты фоновых изображений (шеврон превращается в значок загрузки GIF / значок в градациях серого превращается в цветной значок).

Он работает безупречно в настольном Safari и не очень удобен в мобильном Safari. Изображения будут загружаться иногда, а не другие; иконки будут загружаться, а шевроны - нет; они загружаются на мой iPhone, но не на iPad, и наоборот.

Я не получаю ошибок в консоли отладки. Вот HTML и CSS:

CSS:

footer li a i {display:block; height:24px; width:24px; margin:0 auto;}    
footer li a i.foo {background:url(../images/sprite-jobs.png) 0px 0px no-repeat;}
footer li a:hover i.foo {background:url(../images/sprite-jobs.png) 0px -24px no-repeat;}

HTML:

<li><a href="#link"><i class="foo"></i>Text</a></li>

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

Ответы [ 2 ]

3 голосов
/ 30 сентября 2011

Вчера я столкнулся с похожей проблемой - у меня есть вертикальное меню, в котором слева от элемента меню на выбранной в данный момент странице есть фоновый рисунок «blob». Это прекрасно работает во всех браузерах. Затем я добавил в меню то же фоновое изображение, что и ролловер, используя «a: hover». Это прекрасно работает во всех браузерах, кроме мобильных / iOS Safari. Когда я использую меню на iPad, блоб-графика полностью исчезает через некоторый, казалось бы, случайный интервал и никогда не возвращается, пока я не обновлю изображение и HTML-файлы на сервере. (Очистка кэша Safari не имеет никакого эффекта).

Это мое предположение о том, почему это происходит и как я это решил ...

Поведение: hover на устройствах с сенсорным экраном, таких как iPad / iPhone, нарушено (потому что вы не можете на самом деле зависать на сенсорном экране). Таким образом, эффект от наведения, по-видимому, заключается в том, что браузер полагает, что изображение, связанное с наведением, является избыточным и поэтому не кэширует его. Однако при следующей загрузке страницы с изображением-наведением запрос к серверу обнаружит, что файл изображения не был изменен, и, таким образом, сочтет ненужным его извлечение (с сервера), и, следовательно, попытается использовать локальная кэшированная копия, которая, как я полагаю, не существует (или, по крайней мере, не правильно). Это приводит к исчезновению изображения (все его копии на странице исчезают).

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

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

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

0 голосов
/ 30 июля 2012

Вероятно, он не исчезает сам по себе, а вдвое опускает изображение по сравнению с тем, что вы хотели на дисплеях Retina, а именно: повышение качества изображения для iphone 4 с 72ppi до 326ppi

Простойtest: удвоить изображение по вертикали и повторить попыткуСкорее всего, вы увидите там версию 1/2, которую вы намеревались показать, из-за раздражающего способа обработки фоновых изображений в iPhone 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...