Выпадающий неупорядоченный список для мобильного просмотра

#html #css

#HTML #css

Вопрос:

я никогда раньше не создавал веб-сайт, поэтому я вроде как его использую. я использую html css java, и до сих пор у меня не было проблем, и я в некотором роде в тупике.

у меня есть это меню для моего рабочего стола (http://puu.sh/H6daI/f9c757571f.png ), который функционирует именно так, как я хочу. однако в мобильном представлении (http://puu.sh/H6dba/27b97bc952.png ), я бы хотел, чтобы все в разделе «категории» свернулось и использовало указатель для расширения содержимого.

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

вот мой html и css, если это поможет

 <div class="sidemenu">
    <ul>
        <li class="init" > <embed src="images/pointer.svg" style="width: 100%;" ></embed></li>
        <li><a  style="font-weight: 500; pointer-events:none; font-size: 16px">Categories</a></li>
        <span class="line"></span>
        <li><a  href="shop.html" >All Sets</a></li>
        <li><a  href="featured.html" >Featured Sets</a></li>
        <li><a  href="popular.html" >Popular Sets</a></li>
        
       </li>
    </ul>
</div>
 
 .init {
    width: 2.5%;
   
}

  .sidemenu ul li.active a, .sidemenu ul li a:hover {
    text-decoration:none;
    color:rgb(82, 82, 82);
    background:#ffcccc no-repeat center top;
}

  .sidemenu a {
    text-decoration:none;
    color:rgb(0, 0, 0);
    margin: 48px;
    line-height: 48px;
    font-weight: 400;
    cursor: pointer;
    font-size: 14px;
}
 
 @media only screen and (min-width: 950px) {

.line {
        border-bottom: 1.5px solid rgb(58, 58, 58);
        display: block;
        
        width: 140px;
        margin-left: 46px;
        margin-bottom: 12px;
    }

    .sidemenu a {
        text-decoration:none;
        color:rgb(0, 0, 0);
        margin: 48px;
        line-height: 48px;
        font-weight: 400;
        cursor: pointer;
    }
}
 

Ответ №1:

вы можете добавить свойство «display: none» ко всему, что вы хотите свернуть в медиа-запросе css. я рекомендую поместить список меню в тег div. Таким образом, вам нужно будет только скрыть тег div.

Затем в javascript вы можете использовать событие щелчка по категориям. Когда пользователь нажимает на категории, свойство «отображать: блокировать» добавляется в список меню.

Вот некоторые javascript, которые вы можете использовать:

 // First get the categories element from html
const categories = document.getElementById('categories');

// Keep track if the menu is opened or not
let menuOpen = false;

// Also get the menu list that you should put in a div tag
const menuList = document.getElementById('menuList');

// Add event to th categories
categories.addEventListener('click', () => {
    // check is the menu is open or not

    if(!menuOpen) {
        // Its not opened than add display block to menu list
        menuList.style.display = 'block'

        // Change menuOpen to true
        menuOpen = true

    } else {
        // Menu is already open

        menuList.style.display = 'none'

        // Change menuOpen to false
        menuOpen = false
    }

});
 

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

Комментарии:

1. итак, список меню в теге div выглядит следующим образом? <ul> <li class="init" > <embed src="images/pointer.svg" style="width: 100%;" ></embed></li> <li><a style="font-weight: 500; pointer-events:none; font-size: 16px">Categories</a></li> <span class="line"></span> <div class="menulist" id="menulist"> <li><a href="shop.html" >All Sets</a></li> <li><a href="featured.html" >Featured Sets</a></li> <li><a href="popular.html" >Popular Sets</a></li> </li> </div> </ul> куда идет id=»categories»?

2. да, использование такого div упростит выбор списка в css и javascript. Вы должны указать идентификатор следующим образом: < li id="categories" ><a style="font-weight: 500; pointer-events:none; font-size: 16px">Categories</a></li> поскольку в теге a у вас есть «pointer-events: none», то в теге li произойдет щелчок.

3. хорошо, это то, что я подумал. список свернут, и все, что видно, это текст «категории» и стрелка. в css установлен «курсор: указатель» на стрелку, но ничего не происходит, когда я нажимаю на нее, и больше ничего не отображается. возможно, я что-то упускаю? пока что спасибо за помощь, я хоть куда-то добираюсь. редактировать: я убрал «события указателя: нет», и текст категорий становится интерактивным для расширения списка, но я хочу, чтобы это делала стрелка.

4. хорошо, теперь он работает на мобильных устройствах! но когда я переключаюсь на просмотр рабочего стола, все содержимое class=menuList исчезает. есть ли что-нибудь в js, что я могу настроить так, чтобы он просто отображал содержимое списка независимо от вида рабочего стола? я только хочу, чтобы он мог переключаться на мобильном устройстве.

5. Хорошо, если вы хотите, чтобы для этого использовалась только стрелка, добавьте id=»categories» в тег arrows Li. Сделайте запрос на добавление pointer-events:"none" в тег embed. Таким образом, щелчок произойдет только по тегу Li. Если вы хотите, чтобы список сворачивался как для стрелки, так и для текста категорий. Затем поместите их оба в тег div и добавьте идентификатор в этот контейнер div. вы можете изменить имя идентификатора, если хотите, в соответствии с тегом, но также изменить его в javascript.