Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.163.58] |
|
Сообщ.
#1
,
|
|
|
Вот пример: http://www.wickham43.supanet.com/tutorial/divboxes.html
Под заголовком Divs with position: absolute; есть три дива. Так вот, усли у родительского блока стоит position: relative; то все его дети (у которых позицирование absolute) $(".ewqf").offset().top будет указываться не с начала страницы, а с начала родительского блока. (на примере у дивов стоит top = 10px, 70px) Так вот. У меня есть top от начала страницы, но если я применю его в детям, то они уедут фиг знает куда вниз. Но у меня ситуация: родительский див может быть position: relative; а может быть и по умолчанию. Как мне поставить высоту, что бы они не уезжали вниз? |
Сообщ.
#2
,
|
|
|
Вопрос решен.
$(".selectors").position().top за это отвечает (показывает top до родительского элемента) Добавлено /** * Get the current coordinates of the first element in the set of matched * elements, relative to the closest positioned ancestor element that * matches the selector. * @param {Object} selector */ jQuery.fn.positionAncestor = function(selector) { var left = 0; var top = 0; this.each(function(index, element) { // check if current element has an ancestor matching a selector // and that ancestor is positioned var $ancestor = $(this).closest(selector); if ($ancestor.length && $ancestor.css("position") !== "static") { var $child = $(this); var childMarginEdgeLeft = $child.offset().left - parseInt($child.css("marginLeft"), 10); var childMarginEdgeTop = $child.offset().top - parseInt($child.css("marginTop"), 10); var ancestorPaddingEdgeLeft = $ancestor.offset().left + parseInt($ancestor.css("borderLeftWidth"), 10); var ancestorPaddingEdgeTop = $ancestor.offset().top + parseInt($ancestor.css("borderTopWidth"), 10); left = childMarginEdgeLeft - ancestorPaddingEdgeLeft; top = childMarginEdgeTop - ancestorPaddingEdgeTop; // we have found the ancestor and computed the position // stop iterating return false; } }); return { left: left, top: top } }; |
Сообщ.
#3
,
|
|
|
fatalist, в JS он потому что был интересен вопрос без использования фримеворков.
|
Сообщ.
#4
,
|
|
|
Дык это... не понял...
Вопрос-то решен? Я могу и обратно пнуть, мне не сложно... просто я даже упоминания о "чистом" не нашел... Добавлено Цитата Лёха @ Даже не знаю, что сказать... как правило я решаю в каждом конкретном случае...Но у меня ситуация: родительский див может быть position: relative; а может быть и по умолчанию. Как мне поставить высоту, что бы они не уезжали вниз? Ну теоретически можно конечно проверять свойство position... |
Сообщ.
#5
,
|
|
|
Вон вверху код. Перебирать все родительские элементы, и если != static то это начало координат. Так и работает в Jquery ф-я position
|
Сообщ.
#6
,
|
|
|
Дык, а зачем ты ее заново изобретал, если все-равно используешь jQuery?
|
Сообщ.
#7
,
|
|
|
Я просто алгоритм рассказал
|
Сообщ.
#8
,
|
|
|
Дык на чистом будет все тоже самое, только вместо
offset().top будет offsetTop (ну и left соответственно...) Вообще это старая тема... мне еще Дядя Боб тогда помог с этим... Щас, может найду... Добавлено Вот вариант с рекурсией: function element_point(pElement) { if (!pElement || pElement == document.body || pElement == document.documentElement || pElement.style.position == 'static') return { x : 0, y : 0 }; var ppt = element_point(pElement.offsetParent); return { x : pElement.offsetLeft + ppt.x, y : pElement.offsetTop + ppt.y }; } Добавлено Ну соответственно можно на цикл при желании переделать... |
Сообщ.
#9
,
|
|
|
В FAQ добавь
|
Сообщ.
#10
,
|
|
|
Лёха
Цитата Лёха @ Сделано В FAQ добавь |