Эта статья поможет вам сделать резиновые закладки с закругленными углами используя 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{
    display:block;
    float:left;
    height:30px;
    background:url(tab-round.png) no-repeat right -30px;
    color:#666;
    font-weight:bold;
    text-decoration:none;
    padding-right:14px;
}
.tab a span{
    display:block;
    float:left;
    height:30px;
    background:url(tab-round.png) no-repeat left -30px;
    padding-left:14px;
    line-height:30px;
    cursor:pointer
}
.tab a:hover{
    background:url(tab-round.png) no-repeat right -60px;
}
.tab a:hover span{
    background:url(tab-round.png) no-repeat left -60px;
}
.active a:link, .active a:visited, .active a:visited, .active a:hover{
    background:url(tab-round.png) no-repeat right 0;
}
.active a span, .active a:hover span{
    background:url(tab-round.png) no-repeat left 0;
}

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

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

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

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

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

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

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

  4. Anonymous:

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

  5. dnu:

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

  6. спасибо попробую

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

  8. wio:

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

  9. fael:

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

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

  11. Евгений:

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

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

  13. Спасибо большое за статью!.

  14. Владимир:

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

    border-bottom:solid 1px #DEDEDE;

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

  15. Alex:

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

  16. Дима:

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

  17. Alex:

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

  18. Дима:

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

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

  19. Алексей:

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

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

  21. Stranger:

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

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

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

Оставь комментарий: