Создайте раскрывающееся меню с полем поиска в CSS3 и HTML

Тема: CSS3
Сложность: средняя
Предполагаемое время выполнения: 45 мин.

В этом руководстве мы создадим навигацию в плоском стиле с полем поиска и раскрывающимся меню из пользовательского интерфейса Square .

Плоский раскрывающийся список




HTML код

Навигация состоит из неупорядоченного списка ( .nav ), содержащего внутри себя различные типы элементов:

  • Элементы списка (LI), которые содержат обычные ссылки, не имеют идентификатора / класса.
  • #settings содержит ссылку на изображение.
  • #search содержит поле поиска вместе с кнопкой отправки.
  • #options содержит ссылку, а также неупорядоченный список ( .subnav ), который действует как раскрывающийся список.

В конце мы включаем prefixfree, что позволяет нам везде использовать только свойства CSS без префиксов .

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 год
22
23
24
25
26
27
28
<ul class="nav">
    <li id="settings">
        <a href="#"><img src="settings.png" /></a>
    </li>
    <li>
        <a href="#">Application</a>
    </li>
    <li>
        <a href="#">Board</a>
    </li>
    <li id="search">
        <form action="" method="get">
            <input type="text" name="search_text" id="search_text" placeholder="Search"/>
            <input type="button" name="search_button" id="search_button"></a>
        </form>
    </li>
    <li id="options">
        <a href="#">Options</a>
        <ul class="subnav">
            <li><a href="#">Settings</a></li>
            <li><a href="#">Application</a></li>
            <li><a href="#">Board</a></li>
            <li><a href="#">Options</a></li>
        </ul>
    </li>
</ul>
<script src="prefixfree-1.0.7.js" type="text/javascript"></script>

 

CSS

1. Основные стили

1
2
3
4
5
6
@import url(https://fonts.googleapis.com/css?family=Montserrat);
* {
    margin: 0;
    padding: 0;
}

Начнем с базового сброса CSS и импортируем собственный шрифт Montserrat из Google Fonts .




2. Элементы навигации и списка

1
2
3
4
5
6
7
8
9
10
11
.nav {
    background: #232323;
    height: 60px;
    display: inline-block;
}
.nav li {
    float: left;
    list-style-type: none;
    position: relative;
}

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

3. Ссылки

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 год
.nav li a {
    font-size: 16px;
    color: white;
    display: block;
    line-height: 60px;
    padding: 0 26px;
    text-decoration: none;
    border-left: 1px solid #2e2e2e;
    font-family: Montserrat, sans-serif;
    text-shadow: 0 0 1px rgba(255, 255, 255, 0.5);
}
.nav li a:hover {
    background-color: #2e2e2e;
}
#settings a {
    padding: 18px;
    height: 24px;
    font-size: 10px;
    line-height: 24px;
}

Ссылки имеют базовый стиль. Они используют шрифт Montserrat, который мы импортировали ранее из Google Fonts. Добавляется легкое белое свечение, чтобы сделать текст гладким и жирным. Ссылки имеют высоту строки 60 пикселей, что соответствует высоте строки  .nav .




Ссылки также имеют эффект наведения, когда фон меняется на более светлый вариант серого фона.

#settings содержит ссылку на изображение, поэтому его макет изменен таким образом, чтобы значок настроек отображался в центре.

4. Поле поиска

Плоский поиск

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 год
22
23
24
25
26
27
28
29
30
31 год
32
33
34
35 год
36
37
38
39
40
41 год
42
43 год
44
#search {
    width: 357px;
    margin: 4px;
}
#search_text{
    width: 297px;
    padding: 15px 0 15px 20px;
    font-size: 16px;
    font-family: Montserrat, sans-serif;
    border: 0 none;
    height: 52px;
    margin-right: 0;
    color: white;
    outline: none;
    background: #1f7f5c;
    float: left;
    box-sizing: border-box;
    transition: all 0.15s;
}
::-webkit-input-placeholder { /* WebKit browsers */
    color: white;
}
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
    color: white;
}
::-moz-placeholder { /* Mozilla Firefox 19+ */
    color: white;
}
:-ms-input-placeholder { /* Internet Explorer 10+ */
    color: white;
}
#search_text:focus {
    background: rgb(64, 151, 119);
}
#search_button {
    border: 0 none;
    background: #1f7f5c url(search.png) center no-repeat;
    width: 60px;
    float: left;
    padding: 0;
    text-align: center;
    height: 52px;
    cursor: pointer;
}

#search имеет фиксированную ширину и небольшой отступ или 4 пикселя вокруг него.

#search_text перемещается влево и имеет зеленый фон, который при наведении курсора становится более светлым.

#search_button также перемещается влево, чтобы выровнять его с #search_text по горизонтали. Он использует значок поиска в качестве фона, который располагается в центре.

Стилизация заполнителя – непростая задача. В некоторых браузерах он отображается серым. Здесь вы можете найти полное описание, как решить эту проблему.

5. Раскрывающийся список

Плоский раскрывающийся список

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 год
22
23
24
25
26
27
28
29
30
31 год
#options a{
    border-left: 0 none;
}
#options&gt;a {
    background-image: url(triangle.png);
    background-position: 85% center;
    background-repeat: no-repeat;
    padding-right: 42px;
}
.subnav {
    visibility: hidden;
    position: absolute;
    top: 110%;
    right: 0;
    width: 200px;
    height: auto;
    opacity: 0;
    transition: all 0.1s;
    background: #232323;
}
.subnav li {
    float: none;
}
.subnav li a {
    border-bottom: 1px solid #2e2e2e;
}
#options:hover .subnav {
    visibility: visible;
    top: 100%;
    opacity: 1;
}

#options, который содержит раскрывающийся список, имеет значок треугольника в качестве фона справа, чтобы сделать его более интуитивным.




.subnav по умолчанию скрыт с использованием комбинации свойств видимости и прозрачности CSS. Он расположен на уровне 110% от вершины. При наведении указателя верхняя часть изменяется на 100% вместе со свойствами непрозрачности и видимости, создавая крутой эффект наведения в раскрывающемся меню.

Узнать больше интересного: