Резиновые закладки с помощью одного изображения и CSS

Эта статья поможет вам сделать резиновые закладки с закругленными углами используя CSS и одно фоновое изображение для всех состояний закладки. Результат будет выглядеть примерно так:

Резиновые закладки с помощью одного изображения и CSS

Перед тем как рассматривать код, небольшое пояснение к нашим закладкам. Как видно на рисунке они имеют три состояния:

Резиновые закладки с помощью одного изображения и CSS

  • Активный элемент (Главная)
  • Обычная закладка (Сообщество, Сообщения, Контакты)
  • Закладка при наведении указателя (Блог)

Каждый элемент имеет закругленные уголки, а его ширина зависит от содержимого.

Теперь, если все это ясно, перейдем к HTML и CSS. Оптимальным вариантом является использование тега <span> внутри ссылки <a> и применение к обоим элементам фонового изображения.

Резиновые закладки с помощью одного изображения и CSS

Как уже было сказано ранее, нам понадобится всего лишь одно фоновое изображение:

Фоновое изображение для резиновой закладки

Чтобы фон изменялся мы будем использовать позиционирование фона для каждого состояния:

  • Активное
  • Обычное
  • При наведении указателя

Как видите, HTML код очень простой:

<ul class="tab">
    <li class="active"><a href="home.html"><span>Главная</span></a></li>
    <li><a href="community.html"><span>Сообщество</span></a></li>
    <li><a href="blog.html"><span>Блог</span></a></li>
    <li><a href="messages.html"><span>Сообщения</span></a></li>
    <li><a href="contact.html"><span>Контакты</span></a></li>
</ul>

Для того чтобы сделать закладку активной нужно добавить класс active элементу списка в котором находится закладка.

CSS:

ul, li{
    border:0;
    margin:0;
    padding:0;
    list-style:none
}
ul{
    border-bottom:solid 1px #DEDEDE;
    height:29px;
    padding-left:20px;
}
li{
    float:left;
    margin-right:2px;
}
.tab a:link, .tab a:visited{
    float:left;
    height:30px;
    background:url(tab-round.png) no-repeat right -30px;
    color:#666;
    font-weight:bold;
    text-decoration:none;
    padding:0 14px 0 0;
}
.tab a span{
    float:left;
    height:30px;
    background:url(tab-round.png) no-repeat left -30px;
    padding:0 0 0 14px;
    line-height:30px;
    cursor:pointer
}
.tab a:hover{
    background-position:right -60px;
}
.tab a:hover span{
    background-position:left -60px;
}
.active a:link, .active a:visited, .active a:visited, .active a:hover{
    background-position:right 0;
}
.active a span, .active a:hover span{
    background-postition:left 0;
}

На этом все. Можете использовать это в своих проектах.

Оригинал: Clean Tab Bar Digg-like using CSS

Обсуждение:

  1. Артём Курапов

    Я как раз эту тему изучаю.
    Минус такого подхода в том, что нельзя использовать прозрачность (в закруглённых уголках) — фоновые изображения наложатся и ничего не получится, жаль что в css нельзя задавать область показывания фона, только top/right а не до куда оно идёт.

    Поэтому я использую sliding doors..

  2. locomotive

    sliding doors оч хороший прием — никаких миганий, ничего такого

  3. UNCIA

    Артём Курапов, ну и рассказал бы что за sliding doors, или хоть подскажите, где хорошо описана тема.

  4. Anonymous

    Артём Курапов, а как же png alpha-канал или css opacity

  5. dnu

    Выглядит оригинально, осталось немного поработать над прозрачностью и готово!

  6. Ксюша

    И снова ваш блог мне помог в работе с CSS, у меня получилось сделать такие же закладочки, спасибо за подробное разъяснение, хороший маериал.

  7. wio

    просто и красиво. Использование списков интересное. «Нестандартное», что ли…

  8. fael

    Спасибо большое. Нашла много для себя интересного — и в этой статье, и в самом блоге.

  9. Мэри

    Здорого. Ничего сложного вроде, а смотрится очень симпатично.

  10. Евгений

    Большое спасибо. Просто, наглядно и красиво!!!

  11. Евгений aka 0x22b

    Спасибо за статью! Я здесь впервые и только начал изучать CSS, наверно я у вас еще на долго останусь. Спасибо!

  12. Владимир

    Да, очень удобный способ. Вот только если в css убрать фон для

    border-bottom:solid 1px #DEDEDE;

    , то нижестоящий не переносится на следующую строчку. Почему?

  13. Alex

    Владимир, не понял, что у вас не получается.

  14. Дима

    Ребята а в Експлорере такое чудо показыватеся((( а не закладки. Может кто то подскажет как CSS подправить что бы в Експлорере работало нормально? Буду благодарен. С ув. Дмитрий

  15. Alex

    Дима, спасибо что заставили обратить внимание. Как оказалось ошибку в IE вызывал плагин для корректировки полупрозрачных png. Теперь всё нормально должно быть. К тому же немного поправил код самого примера.

  16. Дима

    Благодарен. А я думал ошибка в позиционировании и пробывал, разбить одну на три «картинки-состояния» но это не давало результата. Как обычно Експлорер отличился. Еще раз спасибо.

    +1 к посетителю ;)

  17. Алексей

    Закладки понравились, очень круто! Вот только такой вопрос:
    Если используется одна страница, внутри фрейм, так вот: Как сделать что бы при нажатии на закладку, class=»active» пермещался на неё и соответственно снимался class=»active» с той что было до этого нажато…

  18. Exquisitor

    проблема в 6 эксплорере, если за закладками в тексте идет список, он наследует стиль и отталкивает все строки в право. если присваивать этим элементам в css дополнительный класс, например ul.zakladki, li.zakladki, то как раз в 6 версии оно всё лесенкой становится) т.к. видимо каждой новой закладке присваивается заново стиль… такой же эффект при присваивании id. как с этим бороться?

    • Alex

      Используйте уникальный класс для списка.

  19. Stranger

    Помогите разобраться с ИЕ6 и 7. Первая закладка активная, ушла немного вверх, вторая закладка не активная. стоит правее и ниже первой. Что не делал, никак не получается исправить.

    • Денис

      ul и li назвать отдельным названием класса (типа ul.zakladka , li.zakladka). Каскад из-за заранее объявленных в стиде стандартных классов для ul и li

  20. bidei.ru

    Пасибо за совет. Как раз искал резиновые закладки, хотел кое-что подправить и нашел. =)

  21. Денис

    Атстойная менюшка. Часть таба слева непрорисовывает, избыточный код css

  22. Кеша

    Проблема с левым табом из-за того, что неправильно последний стиль прописан — синтаксическая ошибка в «background-postition:left 0;»

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*