Seditio.by

Устанавливаем ширину абсолютно позиционированного блока относительно его родителя

Seditio.by » Наш блог » HTML и CSS » Устанавливаем ширину абсолютно позиционированного блока относительно его родителя

Устанавливаем ширину абсолютно позиционированного блока относительно его родителя

HTML верстка часто требует использования вложенных элементов с абсолютным позиционированием. Такое, например, часто приходится делать при верстке навигации с выпадающими элементами.

Приведем простой пример:

<ul id="mainNav">
  <li>
    <a href="#">Nav2</a>
    <ul class="hide">
      <li><a href="#">Subnav1</a></li>
      <li><a href="#">Subnav2</a></li>
      <li><a href="#">Subnav3</a></li>
    </ul>
  </li>
  <li><a href="#">Nav3</a></li>
</ul>

Стили для такого фрагмента могут выглядеть примерно так:

#mainNav         {  }
  #mainNav>li    { position:relative; }
  #mainNav>li>ul { display:none; position:absolute; top:30px; left:0; }

Однако, как видно из примера разметки, вложенный и абсолютно спозиционированный список должен будет унаследовать от своего родителя ширину. Результатом этого станет неэстетичный перенос строк в выпадающем меню, нарушающий юзабилити сайта.

Решить эту проблему можно, очевидно, несколькими путями. Самым простым мне кажется способ с использованием атрибута white-space. Для этого добавим этот атрибут в стиль элементов вложенного списка:

#mainNav            {  }
  #mainNav>li       { position:relative; }
  #mainNav>li>ul    { display:none; position:absolute; top:30px; left:0; }
  #mainNav>li>ul>li { white-space:nowrap; }

Если вложенные элементы окажутся у вас слишком короткими, добавьте:

min-width:100%;

для всего списка. Трюк с white-space работает во всех современных браузерах, а также в IE7 и выше.

 

Комментарии


1. Krimpy
09:37 09.11.2011

Спасибо за разъяснение. А как же inline-block? Не проще ли использовать его?


Всего : 1, на странице: 1

Имя (E-mail):
* Ваш комментарий будет доступен для редактирования в течение 10 Минут

Похожие страницы

    Нет записей

    Поиск: