#javascript #jquery #html #css #absolute
#javascript #jquery #HTML #css #абсолютный
Вопрос:
Я создаю сайт с навигацией, выровненной по правому краю.
Последний выпадающий пункт меню завершает страницу, поскольку он расположен абсолютно слева от своего родительского элемента.
Я пытаюсь создать решение для своего меню ниже.
jsfiddle -
http://jsfiddle.net/ashconnolly/6gjVr/
Я не могу жестко закодировать стиль pos left -xx, потому что ширина последнего пункта меню будет меняться (из-за текста внутри него), поэтому я использую js. Я почти взломал его, но мне просто нужно применить переменную в качестве абсолютного стиля позиции слева только при наведении курсора мыши. Возможно, есть лучшее решение только для css, но я не смог его найти.
Любая помощь приветствуется! : D
Редактировать: обновлено объяснение.
Комментарии:
1. В вашей скрипке вы уже вычисляете
leftval
, так почему бы вам просто не установить его как значение дляleft
свойства?
Ответ №1:
Вы уже вычислили левую часть вашего последнего меню, почему вы не использовали?
$(document).ready(function () {
var menuitemwidth = document.getElementById("last-menu-item").offsetWidth;
var menuitemdropdownwidth = document.getElementById("last-menu-item-drop-down").offsetWidth;
//alert(menuitemwidth);
var leftval = menuitemdropdownwidth - menuitemwidth;
//alert(leftval);
$("#last-menu-item").mouseenter(function(){
$("#last-menu-item-drop-down").css({'position':'absolute','left':'-' leftval 'px','display':'block'});
});
$("#last-menu-item").mouseleave(function(){
$("#last-menu-item-drop-down").css({'display':'none'});
});
});
Комментарии:
1. Боооом! вот и все! Да, мне удалось это вычислить, но у меня возникли проблемы с его применением. Итак, я предполагаю, что для ссылки на переменные javascript в jQuery вы используете varname ? круто! Спасибо, приятель!
2. Рад слышать этот звук -: Boooom!
Ответ №2:
Как вы, наверное, уже знаете, «печатать» значения javascript с использованием фреймворка — плохая практика. Это довольно скоро станет недоступным.
Но вы можете отделить логику (элемента) от представления (элемента), т. Е. Распечатать / отформатировать html-элементы в своих шаблонах, установив data-attribute
подобное в вашем html:
<ul id="last-menu-item-drop-down" data-pos="left" data-val="-133px">
Затем измените свой javascript на:
// cache last element, no need to jquery search on every hover
var last_elem = $("#last-menu-item-drop-down");
// set position and alignment
last_elem.css('position','absolute').css(last_elem.data("pos"), last_elem.data("val"));
// set dropdown meny visibility to hidden (do it by css)
last_elem.hide()
// show/hide
// ...
Вы также можете выполнять вычисления смещения в javascript и указывать позицию только в своих шаблонах
Скрипка в: http://jsfiddle.net/cYsp6/7 /
Комментарии:
1. О, так это плохая практика печатать мою переменную javascript внутри jQuery? Я бы предпочел сделать все это в js, где это возможно. Однако вы потеряли меня из-за разделения логического представления! почему лучше использовать data-pos, а не прямые изменения css? еще раз спасибо!
2. nateabele.com/semantic-markup-i и nateabele.com/semantic-markup-ii подведите итог лучше, чем я когда-либо смог бы 😉
Ответ №3:
Я не могу сделать с помощью css
$("#last-menu-item").mouseenter(function(){
var a=-(parseInt($("#last-menu-item-drop-down").css('width'))-parseInt($("#last-menu-item").css('width')));
$("#last-menu-item-drop-down").css('position','absolute').css('left',a);
$("#last-menu-item-drop-down").show();
});
$("#last-menu-item").mouseleave(function(){
$("#last-menu-item-drop-down").hide();
});
Обновленная скрипка:
Комментарии:
1. Извините, приятель, я не был ясен в своем посте. Я не могу жестко указать позицию слева, как у вас, ширина последнего пункта меню будет меняться. скорее всего, он будет управляться cms, поэтому текст внутри него изменится. Спасибо за помощь, хотя!