Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Позиционирование элементов для меню
 
 автор: Richard Ferlow   (27.10.2008 в 08:19)   письмо автору
 
 

Встала задача - сделать меню всплывающее.

Но у меня проблема - я не очень хорошо в позиционировании разбираюсь. Меню всплывает при наведении на пункт основного меню. Всплывающих менюшек таких - порядка 50ти.

Собственно - при relative позиционировании, даже если потом подвинуть через left и top куда нужно - блок с меню на странице все равно своё место займет.

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

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

  Ответить  
 
 автор: PAT   (27.10.2008 в 09:58)   письмо автору
 
   для: Richard Ferlow   (27.10.2008 в 08:19)
 

Есть универсальный способ.

Всякий раз, когда мышь наводится на любую (из ваших 50-ти, или даже из миллиона) областей ("пунктов") вызова всплывающего меню, скриптом определяете фактические абсолютные координаты этой области в виде четырех чисел:
а) координата по высоте левого верхнего угла области вызова меню в пикселях;
б) координата по ширине левого верхнего угла области вызова меню в пикселях;
в) высота области вызова меню в пикселях;
г) ширина области вызова меню в пикселях.

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

<ТЕГ id="XYZ" style="position: relative" onmouseover="myFunc (this)">Область вызова, какая-то одна из пятидесяти</ТЕГ>

<script>
function myFunc (obj)
{
var obj_id = obj.id; //ID меню
var obj_width = obj_id.offsetWidth; //ширина
var obj_height = obj_id.offsetHeight; //высота
var obj_left = obj_top = 0;
while (obj.offsetParent)
   {
   obj_left += obj.offsetLeft; //координата по ширине левого верхнего угла
   obj_top += obj.offsetTop; //координата по высоте  левого верхнего угла
   obj = obj.offsetParent;
   }

//Ну а здесь "строите" ваше всплывающее меню, уже зная ВСЁ, что вам надо для этого "строительства"
}
</scipt>

  Ответить  
 
 автор: Richard Ferlow   (27.10.2008 в 11:59)   письмо автору
 
   для: PAT   (27.10.2008 в 09:58)
 

Слишком сложно для меня получается.

Попытался сделать так

<ul>
                      <li id="mm-item-2" onmouseover="menu.show(2)" onmouseout="menu.hide(2)" class="3menu" >
                      <a href="Akademiya.html" >Учебные торги</a>

<!-- Меню 3го уровня -->
<ul class="31menu">
            <li><a href="#null"  >Вся продукция</a></li>
            <li><a href="#null">Молотки</a></li>
</ul>
<!--/ Меню 3го уровня -->
</ul>


JS код простой достаточно

var menu = {
    show: function (i) {
        var el_mmItem = document.getElementById('mm-item-' + i);
        el_mmItem.className = el_mmItem.className + ' active';
    },
    
    hide: function (i) {
        var el_mmItem = document.getElementById('mm-item-' + i);
//        el_mmItem.className = el_mmItem.className.replace(' active', '');
        setTimeout(function () { el_mmItem.className = el_mmItem.className.replace(' active', '') }, 100);
    }
}


CSS

ul li.3menu ul.31menu {
  display: none;
  position: absolute;
 
  list-style:square;
  float: none;
  background:#F0F0F0;
  z-index:19;
}

ul li.3menu.active ul.31menu  {
  display: block;
  position: absolute;
  width: 138px;
   list-style:square;
  float: none;
   z-index:19;
}



Всё это здесь
http://abaev-partners.com/aton_html/ext/examples/tabs/Text_light.html

Проблема в том, что вроде бы работает....но только в ИЕ. В опере и лисе для блоков не срабатывает display: none; - ничего не выходит сделать

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования