Проблемы с выпадающим меню UL - PullRequest
0 голосов
/ 26 января 2012

У меня две проблемы с выпадающим меню, одна связана со ссылками, другая связана с проблемами IE7.Код следует за вопросами, и в обоих случаях я стараюсь избегать JavaScript (ключевая часть проекта)

  1. Я успешно выделяю текст ссылки, когда нахожу,в том числе некоторые пиксели выше, ниже и влево и вправо.Тем не менее, единственная часть выделения, на которую можно щелкнуть (то есть, где я могу получить доступ к гиперссылке), - это место, где находится текст, и я хочу, чтобы вся выделенная область, отступы и текст были доступны для нажатия.Я делал это раньше, но меня смущает текущий код о том, как это исправить.Кто-нибудь может мне помочь?

  2. Используя тот же выпадающий список, все работает нормально, кроме IE7.Некоторые пользователи IE7 жаловались на то, что, как только они выделяют пункт меню и выпадает выпадающий список, они переходят только ко 2-му пункту, прежде чем выпадающий список исчезает, и он делает это для каждого раскрывающегося списка.Я знаю, что это проблема с IE7, но мне нужно обойти это.Любая помощь вообще?

Мой код CSS:

ul                          { list-style: none; }
p                           { margin: 8px 0; }
ul.dropdown                 { list-style-type:none;height:24px; top:2px; padding:0px 0px 0px 0px;;margin:0px 0px 0 1px;vertical-align:bottom; color:#000000; position: relative; }
ul.dropdown a:hover         { color: #000; }
ul.dropdown a:active        { color: #ffa500; }
ul.dropdown li              { float: left; position:relative; vertical-align:middle; background-position:0 -40px; padding: 2px 4px 5px 2px; margin-right:6px;}
ul.dropdown li a            { display: block; padding: 0px 0px; color: #222; text-decoration:none; vertical-align:middle; width:100%;}
ul.dropdown li:last-child a { border-right: none; }
ul.dropdown li.hover,
ul.dropdown li:hover        { background: #F3D673; color: black; position: relative; }
ul.dropdown li.hover a      { color: black; }

ul.dropdown ul              { width: 152px; visibility: hidden; position: absolute; top: 100%; left: -40px; z-index:60;}
ul.dropdown ul li           { font-weight: normal; background: #ECEAD8; color: #000; width:100%;/*border-bottom: 1px solid #ccc;*/ float: none; }
ul.dropdown ul li.nohover   { color: black; background: #ECEAD8; position:relative; }

ul.dropdown ul li a         { border-right: none; width: 100%; display: inline-block; min-height:1.4em;} 

ul.dropdown ul ul           { left:72.7%;top: 0px; width:158px; z-index:50; display:inline-block;}
ul.dropdown li:hover > ul   { visibility: visible; display:block; }

#arrowRight                 { float:right; margin-top:-11px;}
a.moreItems {background: url(/images/menu/arrow_r.gif) no-repeat right;}

Вот код HTML:

<!DOCTYPE HTML>
<html>
<head>
<title></title>
<link rel=stylesheet type="text/css" href="menustylesheet.css">
</head>
<body>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
    <tr>
        <td height="25" class="topmenu" bgcolor="##ECEAD8" nowrap>
<ul class="dropdown">
    <li><a href=""><b>Item 1</b> <img src="/images/menu/arrow_d.gif" border="0" height="7" width="7"></a>
        <ul>
            <li><a class="moreItems" href="">Item 1-1</a>
                <ul>
                    <li><a href="">Item 1-1-1</a></li>
                </ul>
            </li>
            <li><a class="moreItems" href="">Item 1-2</a>
                <ul>
                    <li><a href="">Item 1-2-1</a></li>
                </ul>
            </li>

            <li>Item 1-3 <div style="vertical-align:middle;"><img src="/images/menu/arrow_r.gif" id="arrowRight" border="0"></div>
                <ul>
                    <li><a href="">Item 1-3-1</a></li>
                    <li><a href="">Item 1-3-2</a></li>
                </ul>
            </li>
            <li><a href="">Item 1-4</a></li>
            <li><a href="">Item 1-5</a></li>
    </ul>
    </li>
</ul>

        </td>
    </tr>
    <tr><td bgcolor="##c0c0c0" style="height:1px;"></td></tr>
</table>
</body>
</html>

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

Ответы [ 2 ]

2 голосов
/ 26 января 2012

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

http://www.albatrossfonts.com/stack/ulbuttons.html

Я объясню этот код ниже.Вот мой HTML:

<div id="wrapper">

    <ul class="dropdown">
        <li><a href="#">Button 1</a></li>
        <li><a href="#">Button 1</a></li>
        <li><a href="#">Button 1</a></li>
    </ul>

</div>

И CSS:

.dropdown 
{
    width: 200px;
    display:block;
    margin: 200px auto 0 auto;
    list-style-type: none;
    padding: 0;
}

.dropdown li
{
    width: 200px;
    height: 44px;
    display: block;
    float: left;
    margin: 1px 0 0 0;
    list-style-type: none;
    padding: 0;
}

.dropdown li a:link, .dropdown li a:visited 
{
    width: 200px;
    height: 44px;
    display: block;
    float: left;
    margin: 0;
    color: #ffffff;
    background-color: #666666;
    text-decoration: none;
    text-indent: 12px;
    line-height: 44px;
}

.dropdown li a:hover
{
    background-color: #333333;
}

Обратите внимание, что я объявил ссылку: вместо просто a.Я также объявил: посещения, так как я хочу, чтобы посещенное состояние было таким же, как исходное состояние.

В записи .dropdown я просто определил ширину для списка (ul) и заставил его отображаться правильно.

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

В .dropdown li a: link, .dropdown li a: посещенная запись мы по сути дела «заполняем» наши поля элементов списка ссылкой, и так получилось, чтомы также можем определить ссылку как поле.Поэтому я установил размеры ссылки точно такими же, как у нашего li (это то, что делает весь блок кликабельным).Затем установите отображение и плавание, а также цвет фона, а также цвет текста или просто «цвет».

Для того, чтобы поместить текст в центр, вы не должны использовать выравнивание по вертикали.Используйте line-height и установите для него ту же высоту, что и для вашего элемента li.Это отцентрирует ваш текст в поле вертикально.

Чтобы контролировать горизонтальное отображение текста, установите свойство отступа текста, используйте выравнивание текста.В этом примере я использовал text-indent.

Наконец, мы определяем наше состояние a: hover.Важно помнить, что единственное, что вам действительно нужно здесь определить, это любые свойства, которые действительно меняются.В этом случае цвет фона.

Если вы хотите объявить состояние для события нажатия мыши, вы можете сделать что-то вроде:

.dropdown li a:active
{
    background-color: #000000;
    text-indent: 20px;
}

/////////// Редактировать ////////////

Вот как вы можете использовать один стиль CSS для нескольких меню или дочерних меню.

html для 2-х отдельных ul:

<ul class="dropdown">
        <li><a href="#">Button 1</a></li>
        <li><a href="#">Button 1</a></li>
        <li><a href="#">Button 1</a></li>
</ul>

<ul class="dropdown">
        <li><a href="#">Button 1</a></li>
        <li><a href="#">Button 1</a></li>
        <li><a href="#">Button 1</a></li>
</ul>

CSS: (остается тем же, потому что вы назначаете их обоих для класса "выпадающий".

.dropdown 
    {
        width: 200px;
        display:block;
        margin: 200px auto 0 auto;
        list-style-type: none;
        padding: 0;
    }

.dropdown li
{
    width: 200px;
    height: 44px;
    display: block;
    float: left;
    margin: 1px 0 0 0;
    list-style-type: none;
    padding: 0;
}

.dropdown li a:link, .dropdown li a:visited 
{
    width: 200px;
    height: 44px;
    display: block;
    float: left;
    margin: 0;
    color: #ffffff;
    background-color: #666666;
    text-decoration: none;
    text-indent: 12px;
    line-height: 44px;
}

.dropdown li a:hover
{
    background-color: #333333;
}

Если вы хотите применить свои стили для дочернего ul, например:

<ul class="dropdown">
     <li><a href="#">Button 1</a>
          <ul>
               <li><a href="#">subButton 1</li>
               <li><a href="#">subButton 2</li>
               <li><a href="#">subButton 3</li>
          </ul>
     </li>
     <li><a href="#">Button 1</a></li>
     <li><a href="#">Button 1</a></li>
</ul>

Вы просто добавляете свои стили, чтобы включить дочерний ul и child ui li, как показано ниже, где .dropdown фактически представляет ваш первый ulSo. Dropdown (ul) -> li (элемент списка в неупорядоченном списке «выпадающий») -> ul (ul внутри выпадающего списка li) -> li (li внутри выпадающего списка ul li ul)

Извинитеесли это звучит запутанно, но, другими словами, если вы вообще не присваивали класс родительскому элементу ul, то был бы доступ к элементу списка внутри дочернего списка.

.dropdown, dropdown li ul
{
    width: 200px;
    display:block;
    margin: 200px auto 0 auto;
    list-style-type: none;
    padding: 0;
}

.dropdown li, .dropdown li ul li
{
    width: 200px;
    height: 44px;
    display: block;
    float: left;
    margin: 1px 0 0 0;
    list-style-type: none;
    padding: 0;
}

.dropdown li a:link, .dropdown li a:visited, .dropdown li ul li a:link, .dropdown li ul li a:visited
{
    width: 200px;
    height: 44px;
    display: block;
    float: left;
    margin: 0;
    color: #ffffff;
    background-color: #666666;
    text-decoration: none;
    text-indent: 12px;
    line-height: 44px;
}
0 голосов
/ 26 января 2012

http://www.webcredible.co.uk/user-friendly-resources/css/internet-explorer.shtml

^ Это помогло мне во многих случаях найти обходные пути для IE.

...