Как равномерно распределить блоки по "резиновому" контейнеру?

(Ответов: 17, Просмотров: 5994)
Страница 1 из 2 12 Последняя
  1. Опытный Аватар для Fktrctq
    • Регистрация: 21.12.2011
    • Сообщений: 457
    • Репутация: 11
    Коллеги, помогите придумать, как реализовать следующее. Есть область (контейнер) на странице, в которой размещаются N блоков фиксированной ширины и высоты. Если делать их float: left, то они, ясен пень, строятся "табличкой" под левый край в количестве "сколько влезет на строку". А как их равномерно распределить по "резиновому" контейнеру?
    Думаю решение возможно на js, то есть узнать ширину браузера, разделить на ширину блока и выставить отступы.
    Помогите это реализовать!
    • 0
  2. Студент Аватар для knuckr
    • Регистрация: 13.04.2011
    • Сообщений: 46
    • Репутация: 15
    блокам ведь можно ширину давать и не фиксированную, дать ширину 20% влезет 5 блоков, а с яваскриптом могу подсказать только на jQuery
    • 0
  3. Опытный Аватар для amaya
    • Регистрация: 23.01.2011
    • Сообщений: 336
    • Записей в дневнике: 1
    • Репутация: 43
    Плюс можно указать максимальную и минимальную ширину и для контейнера и для блоков.
    • 0
  4. Опытный Аватар для Fktrctq
    • Регистрация: 21.12.2011
    • Сообщений: 457
    • Репутация: 11
    Цитата Сообщение от knuckr Посмотреть сообщение
    блокам ведь можно ширину давать и не фиксированну
    в том то и проблема что нужно чтобы блоки были фиксированными

    ---------- Сообщение добавлено 15:00 ---------- Предыдущее 14:53 ----------

    Код HTML:
    <html> <head> <script type="text/javascript" src="jquery-1.3.2.min.js"></script> <script type="text/javascript">
            jQuery(document).ready(function($)
            {
                function r()
                {
                    var w = $('#all').width();
                    var kol = Math.floor(w/200);
                    var m = Math.floor((w - kol * 200) / kol);            
                    
                    $('div.allblock').each(function(index, domEle)
                        {
                            $(domEle).width( 200 + m);
                        }
                    );
                }
                            r();
                            $(window).resize(function() { r(); } );
                    })(jQuery);
        </script> </head> <body> <div style="width: 100%;" id="all"> <div class="allblock" style="float: left; background: silver; width: 200px; height: 300px; position: relative; margin: 0;"><div style="border: 1px solid black">блок</div></div> <div class="allblock" style="float: left; background: silver; width: 200px; height: 300px; position: relative; margin: 0;"><div style="border: 1px solid black">блок</div></div> <div class="allblock" style="float: left; background: silver; width: 200px; height: 300px; position: relative; margin: 0;"><div style="border: 1px solid black">блок</div></div> <div class="allblock" style="float: left; background: silver; width: 200px; height: 300px; position: relative; margin: 0;"><div style="border: 1px solid black">блок</div></div> <div class="allblock" style="float: left; background: silver; width: 200px; height: 300px; position: relative; margin: 0;"><div style="border: 1px solid black">блок</div></div> <div class="allblock" style="float: left; background: silver; width: 200px; height: 300px; position: relative; margin: 0;"><div style="border: 1px solid black">блок</div></div> </div> </body> </html>
    В этом примере свободное пространство распределяется в сами блоки и они растягиваются Какбы переделать чтобы свободное пространство распределялось между блоками
    • 0
  5. Студент Аватар для knuckr
    • Регистрация: 13.04.2011
    • Сообщений: 46
    • Репутация: 15
    если я правильно понял

    1. блокам задать margin: auto; может будит то что надо
    или
    2. вместо $(domEle).width( 200 + m); - $(domEle).css("margin-right", m+"px");
    • 1

    Спасибо сказали:

    Fktrctq(02.01.2012),
  6. Опытный Аватар для Fktrctq
    • Регистрация: 21.12.2011
    • Сообщений: 457
    • Репутация: 11
    Цитата Сообщение от knuckr Посмотреть сообщение
    1. блокам задать margin: auto; может будит то что надо или 2. вместо $(domEle).width( 200 + m); - $(domEle).css("margin-right", m+"px");
    Сработало со вторым пунктом Большое спасибо!
    knuckr а вы бы не могли разяснить что есть что в вашем варианте $(domEle).css("margin-right", m+"px") ?
    Последний раз редактировалось Fktrctq; 02.01.2012 в 20:37.
    • 0
  7. Студент Аватар для knuckr
    • Регистрация: 13.04.2011
    • Сообщений: 46
    • Репутация: 15
    Код:
    $(domEle).width( 200 + m); // тут мы прибавляем к ширине размером 200 определенное число, в итоге тянется блок
    $(domEle).css("margin-right", m+"px"); // тут мы устанавливаем правый отступ в размере определенного вычисленного числа, таким образом увеличивается отступ справа а не сам блок
    • 1

    Спасибо сказали:

    Fktrctq(05.01.2012),
  8. Опытный Аватар для Fktrctq
    • Регистрация: 21.12.2011
    • Сообщений: 457
    • Репутация: 11
    Ещё раз спасибо за вашу помощь! Можно ещё пару вопросиков!?
    Сейчас получается что свободное пространство делится на количество колонок в строке и присваевается к каждому блоку с права А можно сделать таким образом чтобы свободное пространство распределялось с права кроме последнего блока в строке ?

    Или (Пример допустим в строке умещается 5 блоков по вашей формуле вычесляется 5 отступов и они распределяются с права) сумировать отступы разделить на количество ( сумированных отступов + ещё 1) и распределить свободное пространство справа у каждого блока и у первого блока с лева?

    Или такой вариант "предпочтительней"
    свободное пространство разделить на (количество блоков в строке умноженное на 2) и распределить отступы с права и слева у каждого блока
    Спасибо!
    • 0
  9. Студент Аватар для knuckr
    • Регистрация: 13.04.2011
    • Сообщений: 46
    • Репутация: 15
    Цитата Сообщение от Fktrctq Посмотреть сообщение
    Или такой вариант "предпочтительней"
    свободное пространство разделить на (количество блоков в строке умноженное на 2) и распределить отступы с права и слева у каждого блока
    Спасибо!
    m2 = m/2;
    $(domEle).css("margin", " 0px "+m2+"px");

    Попробуйте так
    • 1

    Спасибо сказали:

    Fktrctq(05.01.2012),
  10. Опытный Аватар для Fktrctq
    • Регистрация: 21.12.2011
    • Сообщений: 457
    • Репутация: 11
    knuckr,Большое спасибо за помощь! Всё получилось!
    подскажите пожалуйста как сделать чтобы между блоками минимальное растояние было 10рх?
    • 0
Страница 1 из 2 12 Последняя

Похожие темы

Темы Раздел Ответов Последний пост
"Сателлиты" \ "СДЛ" \ "Под Ключ" \ "Цена = Качество"
Создание сайтов 22 22.01.2013 02:36
Как сделать валидный такой код span hashString="" hashType="" в XHTML
Web программирование 2 20.11.2011 18:21
Вопрос для Украинцев: Можно ли вывести WMU на "кредитку" от "ПриватБанк'а" ?
Прочее 23 18.11.2011 18:10
У "Однокласников" появились "кошельки" для оплаты услуг
Прочее 1 12.10.2010 09:49

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры