CSS yordamida menyu animatsiyasini yaratamiz

Maqola o‘zimga o‘xshagan boshlang‘ich verstalshik va web-dasturchilarga qandaydir foyda beradi, degan umidda yozdim.
Ko‘pchilik animatsiyalar odatda jQuery orqali qilinadi. Lekin buning bitta yomon tomoni bor: agar javascript ishlamaydigan qilingan bo‘lsa yoki umuman javascriptni qo‘llamaydigan brauzer bo‘lsa, web-sahifangizning bor go‘zalligi havoga uchadi. Demak, imkoni boricha animatsiyalarni CSS’da qilgan ma’qul.
Ushbu maqolada menyu jadvalidagi pastga tushadigan animatsiyani qanday qilib tuzish haqida o‘rtoqlashaman.

I qadam

Ishni HTML-sahifadan boshlasak:
<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta  charset="UTF-8" />
    <title>CSS3 Horizontal sliding menu</title>
</head>
<body>
    <div class="header">
        <div class="navigation">
        	<ul>
                <li><a href="#">Main - 1</a>
                    <ul>
                        <li><a href="#">Level 2 - 1</a></li>
                        <li><a href="#">Level 2 - 2</a></li>
                        <li><a href="#">Level 2 - 3</a></li>
                        <li><a href="#">Level 2 - 4</a></li>
                    </ul>
                </li>
                <li><a href="#">Main - 2</a>
                    <ul>
                        <li>
                            <ul>
                                <li><a href="#">Level 3 - 1</a></li>
                                <li><a href="#">Level 3 - 2</a></li>
                                <li><a href="#">Level 3 - 3</a></li>
                                <li><a href="#">Level 3 - 4</a></li>
                                <li><a href="#">Level 3 - 5</a></li>
                            </ul>
                            <a href="#">Level 2 - 1</a>
                        </li>
                        <li>
                            <ul>
                                <li><a href="#">Level 3 - 1</a></li>
                                <li><a href="#">Level 3 - 2</a></li>
                                <li><a href="#">Level 3 - 3</a></li>
                                <li><a href="#">Level 3 - 4</a></li>
                                <li><a href="#">Level 3 - 5</a></li>
                            </ul>
                            <a href="#">Level 2 - 2</a></li>
                        <li>
                            <ul>
                                <li><a href="#">Level 3 - 1</a></li>
                                <li><a href="#">Level 3 - 2</a></li>
                                <li><a href="#">Level 3 - 3</a></li>
                                <li><a href="#">Level 3 - 4</a></li>
                                <li><a href="#">Level 3 - 5</a></li>
                            </ul>
                            <a href="#">Level 2 - 3</a></li>
                        <li><a href="#">Level 2 - 4</a></li>
                    </ul>
                </li>
                <li><a href="#">Main - 3</a></li>
                <li><a href="#">Main - 4</a></li>
            </ul>
        </div>
    </div>
    
    <div class="content">
    	<div class="item">
    	</div>
    </div>

</body>
</html>

'navigation' dividagi barcha tartiblanmagan list bizga 1, 2 va 3-darajali menyularni yaratish uchun kerak.
head tegi ichiga style ochamiz va asosiy CSS-kodlarni kiritib chiqamiz:
<style>
.header{
	width: 600px; 
	height:50px; 
	border:1px dotted grey;
}
.content{
	position:relative; 
	width: 600px; 
	height:500px; 
	color:white; 
	background-color: #e6056f; 
	overflow:hidden;
	}
.item{
	position:absolute; 
	top:50px; 
	left:20px; 
	width: 600px; 
	height:400px; 
	background-color: grey;
	}
</style>

II qadam

Menyuni gorizontal qilib taxlash uchun
float: left;
buyrug‘idan foydalanmiz. Menyu ko‘rinishini yaxshilash uchun yozilgan CSS-kod:
.navigation {
    width:600px;
}
.navigation ul{
/* positioning */
	position:relative;
    z-index:1000;
/* remove the dots next to list items: */
    list-style:none; 
/* get rid of any default or inherited margins and padding: */
    margin:0; 
    padding:0; 
   
/* styling: */
    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
    font-weight: normal;
    font-size: 15px;
}

/* we're using the direct descendant selectors > to ONLY affect the main menu items */
.navigation > ul > li {
/* positioning */ 
    position: relative;
    float: left;
/* styling: */
    margin-right: 10px;
}
.navigation > ul > li > a {
/* positioning */ 
    display:block;
/* styling: */
    background-color: #2c2c2c; /*  grey */
    padding:8px 14px;
    text-decoration:none;
    color:#aaaaaa; 
    
}
.navigation > ul > li > a:hover{
/* styling: */
    background-color:#666666; /* grey */
    color:#eeeeee; /* light grey */

}

III qadam

pastga tushadigan menyuni yaratish. Quyida 2 va 3-darajali menyular uchun bir xil effekt qo‘llanilgan. Siz xohlagan tarzda o‘zgartirib olishingiz mumkin:
.navigation ul ul{
    background-color:rgba(255, 255, 255, 0); /* remove. this is for illustration purposes only   */
    width:340px; /* you need a width to accommodate tertiary menus */
    position:absolute;
    z-index:1;
    height: 0;
    overflow: hidden;
}        
/* don't display tertiary box yet */
.navigation > ul > li:hover ul ul, .navigation > ul > li > a:hover ul ul{
    height:0;
}
/* tertiary drop-down box */
.navigation ul ul ul{
    left:170px;
    width:170px;
}
 
.navigation > ul > li:hover ul, .navigation > ul > li > a:hover ul,
.navigation ul ul li:hover > ul, .navigation ul ul li a:hover > ul{
    height:220px; /* need a height to accommodate any tertiary menus */
}
    
/* drop-down item style
/* if you want different styling for tertiary menus, just copy the 4 rules below and insertadditional ul: for example: ".navigation ul ul li", becomes: ".navigation ul ul ul li" */
    
.navigation ul ul li{
    background-color:#eaeaea; /* grey */
    width:170px;
}
 
.navigation ul ul li:hover {
    background-color:#999; /* grey */
}
 
.navigation ul ul li a {
    display:block;
    text-decoration:none;
    margin:0 12px;
    padding:5px 0;
    color:#4c4c4c; /* grey */
}
.navigation ul ul li a:hover, .navigation ul ul li:hover > a {
    color:#ffffff; /* white */ 
}

IV qadam

menyu qatoridagi har bir elementni bir-biridan nuqta-nuqtali chiziq bilan ajratib chiqamiz, oxirgi elementdan keyin nuqtali chiziq chizmasligi uchun last-child selektoridan foydalansak bo‘ladi-yu, lekin biz IE brauzerlarida ham ishlashini xohlaymiz, shuning uchun '+' orqali ajratib olamiz:
.navigation ul ul ul li a{
    border:0 !important;
}
.navigation ul ul ul li + li a{
    border-top:1px dotted #999 !important;
}
.navigation ul ul li + li a{
    border-top:1px dotted #999;
}
.navigation ul ul li:hover + li a{
    border-top:1px solid #eaeaea;
}
.navigation ul ul ul li:hover + li a{
    border: 0 !important;
}
.navigation ul ul ul li:hover + li{
    border-top:1px solid #999 !important;
}

V qadam

Ana endi CSS3 imkoniyatlaridan foydalanib, animatsion effekt beramiz:
.navigation ul ul{
    -webkit-transition: height 0.3s ease-in;
    -moz-transition: height 0.3s ease-in;
    -o-transition: height 0.3s ease-in;
    -ms-transition: height 0.3s ease-in;
    transition: height 0.3s ease-in;
}

.navigation ul ul li{
    -webkit-transition: background-color 0.3s ease;
    -moz-transition: background-color 0.3s ease;
    -o-transition: background-color 0.3s ease;
    -ms-transition: background-color 0.3s ease;
    transition: background-color 0.3s ease;
}

VI qadam

Oxirgi qadam sizga IE brauzerining avvalgi versiyalari uchun ishlashini xohlaganlar uchun.
DOCTYPE html degan joyidan keyin quyidagilarni qo‘shib qo‘ying:
<html class="ie6" lang="en">
<html class="ie7" lang="en">
<html class="ie8" lang="en">

Va CSS'ga buniyam qo‘shing:
/* unfortunate ie7 gap fix */
.ie7 .navigation ul ul li{
    margin-bottom:-3px;
}


tayyor sahifa kodini olib sinab ko‘rishingiz ham mumkin.
Hozircha shu!

3 комментария

SardorDushamov
tegini qo'shib quying, butun maqola asosiy sahifani egallab turibdi
0