Не так это страшно как кажется. Нужно только помнить где-какая картинка стоит :-)
А выйгрыш в скорости даёт приличный. Особенно в IE. Сотня иконок грузятся около минуты, а карта - несколько секунд.
выигрыш есть, я не сомневаюсь, я о том что путь не слишком "правильный" :-)
мне видится, правильнее было бы ненавязчиво проинструктировать браузер о том что серию картинок можно загрузить одним блоком (внутри одной коннекции), и всё потом сделать "по-тихому", через TCP/IP с HTTPой
Ну неужели нельзя добиться того же эффекта ... если, положим, все ссылки с одной страницы грузить в рамках одного соединения с сервером?! Хотя, возможно это и неэффективно - но тогда можно по 20 запрсов объединять. С другой стороны, что-то здесь не так, иначе давно бы уже решение было :-)
А могли бы вы описать подробно для тех кто это не знает, например для меня, если не сложно? Если немного описывать - можно и в комментариях, если много - то отличный пост может получится, ну а если лень, я лично был бы рад и ссылкам. Спасибо.
Prior to persistent connections, a separate TCP connection was established to fetch each URL, increasing the load on HTTP servers and causing congestion on the Internet. The use of inline images and other associated data often require a client to make multiple requests of the same server in a short amount of time. Analysis of these performance problems and results from a prototype implementation are available. Implementation experience and measurements of actual HTTP/1.1 (RFC 2068) implementations show good results.
исходя из идеологии w3c, тег img предназначен для разметки изображений
спрайты же используются для хранения оформительских штук, тоесть не контента, поэтому должны быть вынесены из html в css
ну и в большинстве случаев, лично для меня, спрайты просто более удобны чем набор отдельных картинок, меньше кода - меньше головной боли
самостоятельно когда то пытался сделать, получился только вертикальный набор, на горизонтальном в ие черт знает что - при наведении какой-то непонятный эффект - картинки убегали влево, причем на разное расстояние 8).
никаких вложенных элементов.
я делал - ссылка-блок с фиксированными размерами, text-indent - чтобы текст ссылки остался, но не был виден, фон - картинкой с position - top при наведении - center, при переходе на пункт - ссылка становится >b< с тем же фоном background-position:bottom
background(url(i/1.jpg) no-repeat top center) и т.п.
Использую данный метод во всех своих разработках. Но!
Очень мешает отсутствие background-position-x: и background-position-y: которые присутствуют только в IE. С этими свойствами можно описать сложную карту при помощи 3 строк, в противном случае нужно писать стили для каждого элемента. Для закладок это ещё куда ни шло, а когда элементов становится достаточно много, например, более 50 и вы планируете использовать не фиксированный размер иконок (более того, не фиксированное их количество), а меняющийся в зависимости от настроек (в котором разная ширина полей изображений), то такое использование становится проблематичным.
Только по этой причине пришлось использовать всё тот же JS, о чём жалею.
С этим хорошо справляется JS. Но даже генерация на сервере мне кажется менее разумным, чем добавление в CSS свойств: background-position-x и y.
Согласен, выход всегда можно найти. Тут скорее речь об удобстве.
написано-то написано, только почти никто нигде не использует. В основном, из-за того, что не знают, что так вообще можно, и в частности, из-за того, что не знают, КАК это можно сделать.
не знаю... я почему-то не очень этот приём пользую... скорее всего мне просто лень с фотошопом возиться, копируя-вставляя-склеивая кнопки. чтобы не было задержек при rollover делаю просто
a {background: url('i/button-hover.jpg'; background: url('i/button.jpg'; )
a:hover {background: url( background: url('i/button-hover.jpg'; )
и никаких задержек и интерактивность наглядная - мигнут кнопки при загрузке, показывая бестолковому юзеру, что туда можно ткнуть мышкой.
Первый раз напоролась, разглядывая эппловскоеменю на сайте. Сначала была в ахуе, потом прониклась)
Спасибо за обзор, один из самых интересных и увлекательных %) матералов на хабре за последнее время.
Хех, у нас обычно наоборот — у программиста не хватает мозгов, а точней банального запаса знаний, осознать что я там с ксс наверстал и почему не таблицами %)
Если использовать эту технику на ссылках-картинках, то какой аналог существует для img alt?
Т.е. как в данном случае быть с аксесабилити при выключенной загрузке картинок?
для начала стоит определиться, зачем эта самая accessibility нужна.
Если дать пользователю понять, что на этом месте какая-то картина, которая несет смысловую нагрузку, то ее и нужно делать картинкой. Если же это другой функциональный элемент (например, ссылка меню или кнопка отправки формы), то при отключенных картинках он должен выглядеть максимально к этому приближенно. Обычно для этого используют title'ы.
В общем, при отключенных картинках пользователь должен понимать, что он на этой странице делает :)
CSS Sprites: все, что вы знали, но боялись спросить