Каков предпочтительный способ выполнения CSS-ролловера?



При настройке эффекта ролловера в HTML, есть ли какие-либо преимущества (или подводные камни), чтобы сделать это в CSS против JavaScript? Есть ли какие-либо проблемы с производительностью или ремонтопригодностью кода, о которых я должен знать при любом подходе?

485   7  

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. Раньше это делалось на Javascript, просто потому, что мы не могли сделать это с помощью CSS (старые браузеры отстой, и я не думаю :hover был даже добавлен до CSS 2).

Реализация ролловера с CSS использует псевдокласс: hover для определения стиля целевого элемента при наведении на него. Это отлично работает во многих браузерах, но не в IE6, где он хорошо работает только с тегом якоря (например, a: hover). Я использовал CSS hover для реализации панели навигации с вкладками, но мне пришлось использовать поведение IE, чтобы заставить его работать в IE6.

Да, лучший способ сделать это - css спрайты . Досадная проблема возникает в IE6, когда браузер делает запрос каждый раз, когда элемент завис. Чтобы исправить это, посмотрите здесь.

Я бы остался на CSS стороне дома, но я сделал очень мало Javascript.

CSS, по-видимому, легче стандартизировать в разных браузерах, чем Javascript, хотя это может измениться с появлением V8 от Chrome и предстоящего нового инструмента рендеринга Firefox.

Разве нет мнемоники для запоминания последовательности объявлений в CSS?

Comments

    Ничего не найдено.