Каков предпочтительный способ выполнения CSS-ролловера?
При настройке эффекта ролловера в HTML, есть ли какие-либо преимущества (или подводные камни), чтобы сделать это в CSS против JavaScript? Есть ли какие-либо проблемы с производительностью или ремонтопригодностью кода, о которых я должен знать при любом подходе?
7 ответов:
CSS подходит для ролловеров. Они реализуются в основном с помощью псевдоселектора
:hover. Вот очень простая реализация:Однако есть несколько вещей, о которых вам нужно знать:a{ background-image: url(non-hovered-state.png); } a:hover{ background-image: url(hovered-state.png); }
- IE6 поддерживает только
:hoverна<a>тегах- изображения, указанные в CSS, но не используемые на странице, не будут загружены сразу (это означает, что состояние ролловера может занять секунду, чтобы появиться в первый раз)
Ограничение
Это довольно просто, основной принцип заключается в том, что вы создаете изображение больше, чем элемент, устанавливаете изображение в качестве фонового изображения и размещаете его с помощью<a>-tags-only обычно не является проблемой, так как вы, как правило, хотите, чтобы ролловеры были кликабельными. Последнее, однако, является немного более сложной проблемой. Существует метод под названием CSS Sprites , который может предотвратить эту проблему, вы можете найти пример метода, используемого для выполнения без предварительной загрузки ролловеров.background-position, так что виден только тот бит, который вы хотите. Это значит, что показать завис состояние, вам просто нужно изменить положение фона - никаких дополнительных файлов не нужно загружать вообще. Вот быстрый и грязный пример (в этом примере предполагается, что у вас есть элемент высотой 20 пикселей и фоновое изображение, содержащее как зависшие, так и не зависшие состояния-одно поверх другого (таким образом, изображение высотой 40 пикселей)):a{ background-image: url(rollover-sprites.png); background-position: 0 0; /* Added for clarity */ height: 20px; } a:hover{ background-position: 0 -20px; /* move the image up 20px to show the hovered state below */ }Обратите внимание, что использование этой техники "спрайтов" означает, что вы не сможете использовать Альфа-прозрачные PNGs с IE6 (поскольку единственный способ IE6 должен отображать Альфа-прозрачные PNGs правильно использует специальный фильтр изображений, который не поддерживает
background-position)
Поскольку это аспект презентации, я бы сказал, что это больше основано на стандартах, чтобы сделать это с CSS. Раньше это делалось на Javascript, просто потому, что мы не могли сделать это с помощью CSS (старые браузеры отстой, и я не думаю :hover был даже добавлен до CSS 2).
Реализация ролловера с CSS использует псевдокласс: hover для определения стиля целевого элемента при наведении на него. Это отлично работает во многих браузерах, но не в IE6, где он хорошо работает только с тегом якоря (например, a: hover). Я использовал CSS hover для реализации панели навигации с вкладками, но мне пришлось использовать поведение IE, чтобы заставить его работать в IE6.
Да, лучший способ сделать это - css спрайты . Досадная проблема возникает в IE6, когда браузер делает запрос каждый раз, когда элемент завис. Чтобы исправить это, посмотрите здесь.
Я бы остался на CSS стороне дома, но я сделал очень мало Javascript.
CSS, по-видимому, легче стандартизировать в разных браузерах, чем Javascript, хотя это может измениться с появлением V8 от Chrome и предстоящего нового инструмента рендеринга Firefox.
Comments