Как создать выпадающее меню, как в теме двадцать одиннадцать?


Мне очень нравится решение выпадающего меню темы двадцать одиннадцать:

Http://twentyelevendemo.wordpress.com/

И хотел бы создать аналогичный, но я не могу понять, как он работает, или он основан на каком-то существующем коде для выпадающих меню?

Есть ли какой-либо исходный код, который можно использовать, или кто-нибудь может объяснить принцип, лежащий в его основе?

Я знаю, что в Интернете полно как js, так и не-js решений, я даже сделал некоторые сам, но IMO ничто не приближается к этому меню, поэтому помощь приветствуется:)

Author: Baudesign, 2011-09-14

2 answers

Я как раз недавно делал именно это. Не уверен, насколько вы продвинуты, так что, возможно, вы уже знаете кое-что из этого.

Я нашел это видео очень хорошим (+это вторая часть)

Я думаю, что одним из оригинальных исследований, проведенных, было это

Я думаю, что Twenty Eleven также использует плагин jquery superfish

Как упоминалось в другом плакате, вы можете найти сам код twenty eleven где-то среди файлов тем

 1
Author: byronyasgur, 2011-09-14 13:06:06

Вот краткий фрагмент, который я использую, чтобы начать работу над своими проектами:

Первым шагом является добавление некоторого кода в functions.php файл. Это то, что позволит использовать пользовательскую навигацию WordPress. Элементы управления появятся во внешнем виде>Меню, как только вы закончите. Код для functions.php:

<?php
add_action( 'init', 'register_my_menus' );
function register_my_menus() {
register_nav_menus(
array(
    'main' => __( 'main' ),
    'secondary-menu' => __( 'Secondary Menu' ),
    ));
}
?>

Приведенный выше код допускает два меню. Я покажу вам, как добавить один, и если вы хотите, вы можете использовать тот же метод, чтобы добавить второй, где пожелаете.

Следующий шаг состоит в том, чтобы добавьте код в header.php файл. Обратите внимание выше, что первое меню в массиве помечено как главное. Это то, что мы будем использовать для размещения меню в header.php .

Вот код для header.php:

<div id="menu" class="menu-center">
    <?php wp_nav_menu( array( 'theme_location' => 'main' ) ); ?>
</div>

Это должно быть помещено в ваши <div id="header"> div (это не обязательно, но является наиболее распространенным местом для кода.

Последний шаг - добавить немного CSS для оформления меню и фактически сделать его "выпадающим", а не кучей многоуровневых связи.

Код CSS:

ul.menu,ul.menu ul,ul.menu li,ul.menu a {
display:block;
margin:0;
padding:0;
}

ul.menu ul {
display:none;
}
ul.menu li:hover {
z-index:999;
}
ul.menu li:hover > ul {
display:block;
position:absolute;
float:left;
}
ul.menu li {
float:left;
width:auto;
}
ul.menu ul li {
float:left;
width:190px;
}
ul.menu ul li ul {
float:left;
width:190px;
position:absolute;
left:100%;
top:0;
}
ul.menu-ver,ul.menu-ver ul {
width:14em;
}

div.menu-center ul.menu {
float:left;
position:relative;
left:50%;
}

div.menu-center ul.menu li {
position:relative;
left:-50%;
}

div.menu-center ul.menu li li {
left:auto;
}


ul.menu li a {
border-bottom:1px outset ghostwhite;
}

ul.menu li a {
padding:8px 12px 10px;
}

ul.menu li a:link,ul.menu li a:hover,ul.menu li a:visited,ul.menu li a:active {
text-decoration:none;
border-bottom:1px outset black;
}


ul.menu li {
background: #45484d;
background: -moz-linear-gradient(top, #45484d 0%, #000000 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#45484d), color-stop(100%,#000000));
background: -webkit-linear-gradient(top, #45484d 0%,#000000 100%);
background: -o-linear-gradient(top, #45484d 0%,#000000 100%);
background: -ms-linear-gradient(top, #45484d 0%,#000000 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#45484d', endColorstr='#000000',GradientType=0 );
background: linear-gradient(top, #45484d 0%,#000000 100%);
}
.menu-center {
float:right;
margin-right:95px;
}

ul.menu li a{
color:ghostwhite;
}
ul.menu li a:hover {
background: #efefef;
background: -moz-linear-gradient(top, #efefef 0%, #ffffff 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#efefef), color-stop(100%,#ffffff));
background: -webkit-linear-gradient(top, #efefef 0%,#ffffff 100%);
background: -o-linear-gradient(top, #efefef 0%,#ffffff 100%);
background: -ms-linear-gradient(top, #efefef 0%,#ffffff 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#efefef', endColorstr='#ffffff',GradientType=0 );
background: linear-gradient(top, #efefef 0%,#ffffff 100%);
color:black;
}

Вы можете поиграть с css, чтобы настроить его по своему вкусу, но это должно помочь вам начать.

Отредактировано Для Совместимости С WordPress 3.3:

После обновления до последней версии WordPress (v3.3) кажется, что меню не будет работать, если ваша тема использует крючок after_setup_theme, и вы используете крючок "инициализация" для регистрации меню.

Исправление:

В этом примере я буду использовать имя yourtheme в качестве имя_функции.

Образец functions.php файл:

<?php
if ( ! isset( $content_width ) )
$content_width = 610;
add_action( 'after_setup_theme', 'yourtheme_setup' );
if ( ! function_exists( 'yourtheme_setup' ) ):
function yourtheme_setup() {
  // Adds styles the visual editor (editor-style.css)
  add_editor_style();
  add_theme_support( 'automatic-feed-links' );
  //Register Custom Menu's
    register_nav_menus(
      array(
        'main' => 'main',
        'secondary' => 'secondary',
        )
      );  
  // Add Post Thumbs and Custom Image Sizes
  add_theme_support( 'post-thumbnails', array( 'post' ) );
  // Add support for a variety of post formats
  add_theme_support( 'post-formats', array( 'aside', 'link', 'gallery', 'status', 'quote', 'image' ));
  }
endif; // yourtheme_setup
/**
 * Start the rest of your functions.php file code...
 * 
 */
?>

Посмотрите на двадцатилетние темы functions.php файл, чтобы увидеть другие функции для включения в крючок after_theme_setup.

 4
Author: Jeremy Jared, 2011-12-17 19:47:17