Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/54: Рейтинг темы: голосов - 54, средняя оценка - 4.87
123 / 77 / 33
Регистрация: 05.03.2013
Сообщений: 449
1

Посчитать сумму ширины вложенных блоков

19.04.2014, 12:59. Показов 10992. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот чего нагуглил сам
Javascript
1
2
3
4
5
var allwidth = 0;
var submenuby = $('#sub-'+id+' .submenuby');
for (var key in submenuby) {
    // ?
}
submenuby[key] является HTMLDivElement, но submenuby[key].outerWidth(true) почему-то не работает...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2014, 12:59
Ответы с готовыми решениями:

Посчитать сумму ширины всех элементов в наборе без использования цикла
Доброго времени суток, задался вот таким вопросом. Есть набор элементов, найденных с помощью...

Изменение ширины блоков
Всем привет! Ребята, знаю что можно проще, в гугле только на большие громадные непонятины...

Позиционирование вложенных блоков (z-index)
Доброго времени суток! Помогите пожалуйста решить проблемку: есть два вложенных div <div...

Тени для вложенных блоков
Добрый вечер. Есть проблема - нужно реализовать тень для панели навигации (желтый), которая будет...

10
69 / 69 / 50
Регистрация: 25.03.2012
Сообщений: 241
19.04.2014, 14:34 2
У вас какой то непонятный кусок кода откуда то выдернутый, вот способ например:
Javascript
1
2
3
4
5
6
7
8
$(document).ready(function()
{   
    var full_weight=0;
    $("#omg div").each(function(){
    full_weight+=$(this).width();
    });
    alert(full_weight);
});
HTML5
1
2
3
4
5
6
7
<div id="omg">
<div>Блок 1</div>
<div>Блок 2</div>
<div>Блок 3</div>
<div>Блок 4</div>
<div>Блок 5</div>
</div>
Разновидности ширины:
width()(используется в моем коде) — ширина элемента без учета отступов и толщины рамки.
innerWidth() — ширина элемента с учетом размера внутренних отступов (padding).
outerWidth(includeMargin) — ширина элемента с учетом внутренних отступов, рамки (border-width) и при необходимости внешних отступов (margin)
0
123 / 77 / 33
Регистрация: 05.03.2013
Сообщений: 449
19.04.2014, 15:18  [ТС] 3
Работает, но возвращаемые значения далеки от реальных.
innerWidth() и outerWidth(true) возвращают 40, а width() и вовсе 0.
Хотя реальный размер каждого блока начинается от 100 и конечный размер зависит от внутреннего контента.
0
69 / 69 / 50
Регистрация: 25.03.2012
Сообщений: 241
19.04.2014, 15:44 4
Приведите html код и как вы указываете селектор $("#omg div") на него, у меня все верно показывает.
С какой целью вам нужно определять ширину? Может найдем более рациональный способ.
0
123 / 77 / 33
Регистрация: 05.03.2013
Сообщений: 449
19.04.2014, 19:02  [ТС] 5
$('#sub-'+id+' .submenuby'). Ну, в консоли показывает нужные блоки.

А нужно для того, чтобы задать размер родительского блока.
Поясню. Есть меню из <ul><li></li></ul>, которое вызывает подменю <div>, которое состоит из трех вложенных дивов с float:left, предлагающих разные условия выборки. Ширина каждого из этих трех блоков зависит от анкоров расположенных в них ссылок, ну а родительский блок соответственно от ширины этих блоков. Позиция родительского дива (абсолют) высчитывается от начала соответствующего элемента <li>.

Так вот, у крайнего правого <li> блок получается настолько широким, что не влезает в ширину монитора 1024, поэтому 3й вложеный див уходит на вторую строку, оказываясь под первым.

Поэтому я хочу посчитать ширину вложеных блоков, составить тем самым ширину родительского и позиционировать его так, чтобы координаты его правого края не привышали ширину разрешения монитора.

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<div id="sub-<?= $menu->id; ?>" class="submenu">
    <div class="submenuby">
        <ul>
        <?php // тут формирется список ?>
        </ul>
    </div>
    <div class="submenuby">
        <ul>
        <?php // тут формирется список ?>
        </ul>
    </div>
    <div class="submenuby">
        <ul>
        <?php // тут формирется список ?>
        </ul>
    </div>
</div>
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<style>
.submenu {
    display: none;
    border: 1px solid #afb0b3;
    position: absolute;
    background: white;
}
.submenuby {
    float: left;
    padding: 20px;
}
</style>
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$('li.menu').hover(
    function () {
        var id = $(this).attr('id').replace(/nav-/g, '');
        $('#sub-'+id).css({
            left: $(this).offset().left,
            top: $(this).offset().top + $(this).outerHeight(true)
        });
        $('#sub-'+id).stop(true, true).fadeTo('fast', 1);
    },
    function () {
        var id = $(this).attr('id').replace(/nav-/g, '');
        $('#sub-'+id).hover(
            function () {
                $(this).stop(true, true).fadeTo('fast', 1);
            },
            function () {
                $(this).stop().hide('normal');
            }
        );
        $('#sub-'+id).stop().hide('normal');
    }
);
0
69 / 69 / 50
Регистрация: 25.03.2012
Сообщений: 241
19.04.2014, 20:18 6
Цитата Сообщение от andr-xw Посмотреть сообщение
поэтому 3й вложенный див уходит на вторую строку, оказываясь под первым.
Абсолютно естественное поведение браузера. Представьте у вас 3 блока .submenuby 1 шириной 300px 2 500px 3 600px итого:1400px и присвоите вы их 1400px наружнему блоку с Position: absolute которому итак абсолютно пофигу на ширину экрана, его ширина и есть ширина этих блоков + ваши padding 20px у каждого блока .submenuby, он обтекает ваши блоки по их размеру. Как эти 1400px не помещались в 1024 так и не будут помещаться вам нужно содержимое этих 3 блоков submenuby уменьшать.
0
123 / 77 / 33
Регистрация: 05.03.2013
Сообщений: 449
19.04.2014, 21:19  [ТС] 7
1400 не будет, вообще среднее значение 400-500, ну максимум 700.
0
69 / 69 / 50
Регистрация: 25.03.2012
Сообщений: 241
19.04.2014, 23:50 8
А ещё padding 20px на каждом блоке даст +120px к общей ширине+6px границы и не факт что ещё у submenuby
на наружнем блоке не висит какой нибудь padding.
Есть возможность всю страницу в html скинуть вместе c css прям ту которая в браузере выдается?

Добавлено через 2 часа 14 минут
Понял я твою проблему тебе надо блок сдвигать влево если он вылазить за край. Косяк в верстке пытаешься скриптами компенсировать. Закинь для начала div в li главного меню вот так чтоб было
HTML5
1
<li><a>Пункт меню</a><div class="submenu"></div></li>
Далее на li задай в css position:relative;
Дальше надо вычислять что блок вылазит и выравнивать тогда по правому краю относительно пунтка меню
Вот это удали left: $(this).offset().left, в скрипте потом как сделаешь скинь опять ссылку в ЛС .
0
123 / 77 / 33
Регистрация: 05.03.2013
Сообщений: 449
20.04.2014, 12:29  [ТС] 9
Это не косяк в верстке, а специально так сделано. Если добавить div в li то к диву и его дочерним элементам добавятся все стили li и его родительских элементов. Вот где настоящие косяки в верстке начинаются... Да и проблему это не решает, те же яица только в профиль.

И мне в любом случае интересно, почему js считает ширину блока нулевой и возвращает только паддинги?
0
69 / 69 / 50
Регистрация: 25.03.2012
Сообщений: 241
20.04.2014, 15:38 10
Цитата Сообщение от andr-xw Посмотреть сообщение
И мне в любом случае интересно, почему js считает ширину блока нулевой и возвращает только паддинги?
Потому что у блока display:none соответственно clientWidth на этот момент равен 0. У вас можно через свойство css получить эту ширину $(this).css("width"); В любом случае это ничего не даст у вас он вылезает потому что там идет
свойство left+ширина блока и как вы не меняйте ширину наружнего блока он как не влезал так и не влезет, нужно менять left в зависимости от этого.

Цитата Сообщение от andr-xw Посмотреть сообщение
Это не косяк в верстке, а специально так сделано. Если добавить div в li то к диву и его дочерним элементам добавятся все стили li и его родительских элементов. Вот где настоящие косяки в верстке начинаются... Да и проблему это не решает, те же яица только в профиль.
А что вам мешает прописать

HTML5
1
2
3
4
.submenu ul li
{
ваши стили для списков подменю и они перекроют параметры родителя
}
В ещё есть такая вещь как:
Селектор 1 > Селектор 2 { Описание правил стиля }
Стиль применяется к Селектору 2, но только в том случае, если он является дочерним для Селектора 1.

Добавлено через 40 минут
В вашем случае правда будет так, потому что вес идентификатора родителя выше веса классификатора дочернего элемента.
HTML5
1
2
3
4
#nav .submenu ul li
{
ваши стили для списков подменю и они перекроют параметры родителя
}
1
123 / 77 / 33
Регистрация: 05.03.2013
Сообщений: 449
10.05.2014, 17:57  [ТС] 11
Цитата Сообщение от Faust971 Посмотреть сообщение
Потому что у блока display:none соответственно clientWidth на этот момент равен 0.
Спасибо. Убрал display:none, поставил top:-100500. Теперь все как надо.
0
10.05.2014, 17:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2014, 17:57
Помогаю со студенческими работами здесь

Закругленные углы у блоков и у вложенных изображений
Добрый день! Есть блок &lt;div&gt; с закругленными углами. И есть вложенное изображение, которое...

Проверка при помощи вложенных блоков try
Посчитать уравнение ( у=log4(x2-4)+1/x)при вводе х с клавиатуры, но должны выполнятся условия: 1....

Стандартный вид блоков независимо от ширины экрана
Есть 3 блока которые с помощью float:left располагаются друг за другом горизонтально. Всем 3...

Перерасположение блоков при изменении ширины контейнера
Здравствуйте. В контейнере div находятся три блока. .................... При уменьшении ширины...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru