CSS - одноуровневое выпадающее меню - PullRequest
0 голосов
/ 22 октября 2011

Я разрабатываю темы Wordpress, единственная и всегда возникающая проблема - это выпадающие меню. стилизация этих селекторов ul и li со свойствами display и .... Даже читая учебники и просматривая CSS других сайтов (Firebug), я все равно не могу создать их! Есть ли какая-то конкретная процедура или хороший источник, которым я могу научиться? Предположим, я хочу создать одноуровневое выпадающее меню. Спасибо

Ответы [ 3 ]

2 голосов
/ 23 октября 2011

Mahdi,

Создать выпадающее меню, совместимое с несколькими браузерами, довольно просто, если вы не слишком усложняете его и имеете приличное понимание типов элементов и модели позиционирования в CSS.Есть несколько стандартных примеров, которые могут сделать это довольно легко для вас.Я постараюсь дать как можно более простой ответ, чтобы вы могли его понять (поскольку мой мозг слишком усложнял его, пока я не провел небольшое исследование).

Ваше меню верхнего уровня

Рекомендуется, чтобы все ваши меню , включая подменю, были элементом ul.Есть несколько причин для этого.

  1. Естественно, он имеет большинство стилей, которые вам нужны.
  2. В любом случае, меню - это список опций, поэтому его нельзя растягивать.
  3. Помогает людям с ограниченными возможностями
  4. Допускает вложение.

Проблема с ul элементами в том, что у них эти неприятные пули.Кроме того, дети li естественно не текут вместе.Все они появляются в отдельных строках.Итак, у нас есть два варианта исправления li.Мы можем float их, но это может быть довольно неловко.Я не рекомендую это.Или мы можем изменить его тип.Ну, в нем есть еще один блок, так что inline-block идеально подходит для этого.

<!-- the HTML for the menu -->
<ul class="menu">
    <li class="submenu"><a href="url">link</a></li>
    <li class="submenu"><a href="url">link</a></li>
    <li class="submenu"><a href="url">link</a></li>
</ul>

/* The CSS for the menu */
ul.menu { 
    list-style-type:none; /* Gets rid of the bullets. */
}
li.submenu {
    display:inline-block; /* Makes the listitems appear on the same row. */
}

** Ваши подменю **

Теперь, вложенный ul элементы должны быть в элементе списка.Браузеры всегда будут правильно его интерпретировать, если вы поместите выпадающий список ul в li.Теперь нам не нужно объявлять ничего смешного.Просто назовите ваш новый ul так же, как ваше оригинальное меню, например:

<!-- Your new HTML -->
<ul class="menu">
    <li class="submenu"><a href="url">link</a>
        <ul class="menu">
            <li><a href="url">link</a>
            <li><a href="url">link</a>
            <li><a href="url">link</a>
        </ul>
    </li>
    <li class="submenu"><a href="url">link</a>
        <ul class="menu">
            <li><a href="url">link</a>
            <li><a href="url">link</a>
            <li><a href="url">link</a>
        </ul>
    </li>
    <li class="submenu"><a href="url">link</a>
        <ul class="menu">
            <li><a href="url">link</a>
            <li><a href="url">link</a>
            <li><a href="url">link</a>
        </ul>
    </li>
</ul>

/* Your new CSS. Notice nothing has changed. */
ul.menu { 
    list-style-type:none; /* Gets rid of the bullets. */
}
ul.menu li {
    display:inline-block; /* Makes the listitems appear on the same row. */
}

Следующий шаг.Получение выпадающего списка.

Теперь у нас есть кросс-браузерная структура, нам просто нужно настроить пару вещей.Нам нужно сначала заставить меню появляться и исчезать.Поскольку мы хотим, чтобы это происходило только с подменю, мы получаем более конкретное значение:

/* Add this to your CSS. */
li.submenu ul.menu {
    display:none; /* Makes the submenu disappear. */
}
li.submenu:hover ul.menu {
    display:block; /* Makes the submenu appear. */
}

Теперь, если вы посмотрите, ваше меню появится и исчезнет соответствующим образом.Нет стиля, просто списки для вас.Работает одинаково во всех браузерах ... о, подождите!IE делает это больше.Ну, это простая проблема.Видите ли, IE интерпретирует отступы по-другому, чем другие.Давайте сделаем это без проблем:

/* Add this to your CSS. */
menu * {
    padding:0; /* Width problem solved. */
}

Теперь, еще одна проблема ... ваши подменю горизонтальны.Причина в том, что мы сказали, что это должно быть в нашем оригинале.

ul.menu li {
    display:inline-block; /* Makes the listitems appear on the same row. */
}

Мы можем исправить это, если быть более конкретным.

/* Add this to your CSS. */
li.submenu ul.menu li {
    display:block;
}

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

Окончательный HTML-код для меню

<ul class="menu">
    <li class="submenu"><a href="url">link</a>
        <ul class="menu">
            <li><a href="url">link</a>
            <li><a href="url">link</a>
            <li><a href="url">link</a>
        </ul>
    </li>
    <li class="submenu"><a href="url">link</a>
        <ul class="menu">
            <li><a href="url">link</a>
            <li><a href="url">link</a>
            <li><a href="url">link</a>
        </ul>
    </li>
    <li class="submenu"><a href="url">link</a>
        <ul class="menu">
            <li><a href="url">link</a>
            <li><a href="url">link</a>
            <li><a href="url">link</a>
        </ul>
    </li>
</ul>

Окончательный CSS для меню

menu * {
    padding:0; /* Width problem solved. */
}

ul.menu { 
    list-style-type:none; /* Gets rid of the bullets. */
}
li.submenu {
    display:inline-block; /* Makes the listitems appear on the same row. */
}

li.submenu ul.menu {
    display:none; /* Makes the submenu disappear. */
}
li.submenu:hover ul.menu {
    display:block; /* Makes the submenu appear. */
}

li.submenu ul.menu li {
    display:block;
}

Это решение не требует забавных объявлений позиционирования или ширины.

Надеюсь, это поможет!

FuzzicalLogic

0 голосов
/ 24 октября 2011

Если вы хотите просто создать простое одноуровневое меню.Это как бы объяснено выше с помощью Fuzzical Logic, но вы можете использовать псевдокласс :hover, чтобы показать и скрыть выпадающее меню.Это объясняется в этой статье простыми словами.

Надеюсь, это поможет

0 голосов
/ 22 октября 2011

Один хороший источник для меня был http://lwis.net/free-css-drop-down-menu/ Вы можете увидеть используемую базовую структуру.

...