Меню на jQuery
Сьогодні розповім, як зробити оригінальне меню на jQuery.
Вирішив написати цю замітку, тому що я провозився не одну годину, щоб зробити меню і все, що ви тут прочитаєте моїх рук справу.
Щоб далеко не ходити і відразу вирішити для себе, чи потрібно читати цю статтю далі, подивіться, що в результаті в нас вийде:
Не раз зустрічав на сайтах подібні меню, але коли я їх бачив, у мене не виникало бажання подивитися, як вони реалізовані. Нещодавно самому знадобилося зробити подібне меню, а конкретного рішення я не знав, знайти та подивитися, як зроблені подібні меню на сайтах, які мені зустрічалися, я не зміг — з пошуками у мене, як і раніше, складно.
Перший млинець грудкою
Перше що мені спало на думку, для реалізації цього завдання – це звичайно створити картинки, помістити їх на фон (css властивість background) і пересувати їх за допомогою функції animate() бібліотеки jQuery. Але як виявилося , animate() не вміє коректно працювати з CSS властивістю background-position , точніше немає можливості задати обидва параметри X і Y (background-position:XY), можна тільки X.
Для вирішення цієї проблеми існує jQuery плагін (Background-Position Animations) .
Після встановлення я зміг створити таке меню, використовуючи картинки замість тексту, але такий варіант мені здався вкрай незручним, адже якщо, наприклад, нам потрібно буде поміняти назву пункту меню, то доведеться перемальовувати картинки і перепризначати розміри в CSS, а це дуже незручно .
Тому від такого варіанту я відмовився і вирішив зробити його за допомогою CSS та HTML розмітки.
Створюємо меню
Щоб створити таке меню без використання текстів-картинок і без підключення різних jQuery плагінів потрібно не так багато.
Давайте розберемо все за етапами:
1. Насамперед створимо меню в html:
<ul class="menu"> <li><a href="#">Про сайт</a></li> <li><a href="#">Бізнес</a></li> <li><a href="#">Мистецтво</a></li> <li><a href="#">Живопис</a></li> <li><a href="#">Дизайн</a></li> <li><a href="#">Творчість</a></li> <li><a href="#">Історія</a></li> </ul>
2. Підключимо бібліотеку jQuery , якщо вона ще не підключена: додамо на початок html документа такий рядок:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
jQuery у цьому випадку підключається з репозиторії Google. Зрозуміло, можна підключити інакше.
3. Додамо CSS стилі:
<style type='text/css' rel='stylesheet'> /* скидання */ ul, li {margin:0; padding:0; vertical-align:baseline; list-style: none; } /* обов'язкові */ .menu li {float: left; height:40px; overflow:hidden; } .menu li a, .menu li a div{ display:block; padding:0 20px; line-height:40px; } .menu li a div{ margin:0 -20px; } /* розмальовка */ .menu {position:absolute; margin:100px 10px; font:12px Georgia; } .menu li{ border-right:1px dashed #999; text-transform:uppercase; } .menu li a {color:#4C596F; } .menu li a:hover{ text-decoration:none; } .menu li a div{ background:#F0F3F4; } </style>
Як бачите, я розділив стилі на «обов’язкові» та ті, які відповідають за зовнішній вигляд меню та не впливають на коректну працездатність jquery скрипта. Тобто. якщо видалити другі стилі, меню, як і раніше, буде працювати.
4. Додаємо jQuery код:
<script type="text/javascript"> (function($){ $(function(){ var munu = $ ('.menu li a'); munu.each(function(){ $(this).append('<div>'+ $(this).html() +'</div>'); }); munu.hover( function(){ $(this).stop().animate( {marginTop:'-40px'}, 300 ); }, function(){ $(this).animate( {marginTop:'0'}, 500); } ) }) })(jQuery) </script>
Розберемо трохи коду. Ми munu.each(...)
додаємо всередину посилання (тега a) блок div
з анкором посилання, тобто. ми робимо двох рівнів анкор посилання, який згодом буде рухатися. Задаємо munu.hover(...)
дію при наведенні на посилання: пересуваємо її на 40 пікселів вгору.
Важливо! Значення marginTop:'-40px'
обов’язково має збігатися зі значеннями властивостей в обов’язкових стилях CSS height: 40px
і line-height: 40px
(див. CSS стилі).
От і все. Тепер, таке меню можна редагувати без зайвих рухів тіла.
Я вже казав, що це меню – плід моєї фантазії, тому хотілося б побачити те, як реалізовані подібні меню на інших сайтах. Якщо раптом у вас є приклади, будь ласка, поділіться!
На умовах обміну посиланнями можна замовити непогані відео огляди блогів — відео-блог Юрія Гусєва.