Модераторы: Illuminaty

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Верстка списка товаров по три в ряд, требуется помощь 
:(
    Опции темы
Maroon
  Дата 5.6.2011, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 2.4.2011

Репутация: нет
Всего: нет



Здравствуйте, друзья!

Требуется ваша помощь в решении одной задачи.

Дело в следующем:

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

Условия:
Есть один div для контейнера, содержащего товары.
И есть div'ы товаров. Все имеет фиксированную ширину.
Вспомогательные дивы и классы для рядов и товаров использовать нельзя.

Т.е. конструкци имеет вид:

Код

<div class="productsContainer">
     <div class="product"></div>
     <div class="product"></div>
     <div class="product"></div>
     <div class="product"></div>
     <div class="product"></div>
</div>


user posted image


Я столкнулся с проблемой создания отступов между вторым дивом каждого ряда.
Очень рассчитываю на вашу помощь (в крайнем случае напишите что в заданных условиях решения нет, и я буду искать обходные пути)

Заранее, спасибо!

PM MAIL   Вверх
olldman
Дата 5.6.2011, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дед
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 9.1.2009
Где: Омск

Репутация: 6
Всего: 6



Примерно так:
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1251">
  <title></title>
<style type="text/css">
*{margin:0px;padding:0px;}
html{height:100%;}
html body{height:100%;}
body{width:100%;}
.productsContainer{width:670px;overflow:hidden;border:1px solid #000;margin:0px auto;padding:6px 0px;}
.productsContainer .product{width:200px;height:240px;float:left;margin:0px 10px 10px 10px;border:1px solid #F00;}
</style>
  </head>
  <body>
<div class="productsContainer">
     <div class="product"></div>
     <div class="product"></div>
     <div class="product"></div>
     <div class="product"></div>
     <div class="product"></div>
     <div class="product"></div>
     <div class="product"></div>
     <div class="product"></div>
     <div class="product"></div>
</div>
  </body>
</html>

Только рассчитайте ширину родительского дива, потому как при ширине 640рх три в ряд по 200рх, да и с отступами в 20рх никак не влезет, учитывая, что задавать дополнителные классы низя.
PM MAIL WWW ICQ Skype   Вверх
Maroon
Дата 5.6.2011, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 2.4.2011

Репутация: нет
Всего: нет



@olldman,

Большое спасибо!
Но к сожалению это не совсем то что нужно.

Требуется сделать именно как на рисунке (мой косяк, плохо объяснил):

Чтобы отступы были только у среднего продукта в каждом ряду, а первый и третий продукты плотно прилегали к границам контейнера.

Добавлено через 3 минуты и 27 секунд
Я пока решил это только через задания дополнительного div'a для каждого ряда.
В таком случае ставим всем .product внутри ряда - padding-left: 20px;
А :first-child'у - padding-left: 0;

Но очень хочется обойтись без отдельных рядов, если это возможно.
PM MAIL   Вверх
olldman
Дата 5.6.2011, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дед
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 9.1.2009
Где: Омск

Репутация: 6
Всего: 6



Насколько я понимаю, то у вас формируются блоки программно, если да, то может лучше попробовать в массиве прописать дополнительные классы?
Иначе я, увы, выхода не вижу smile 
PM MAIL WWW ICQ Skype   Вверх
Maroon
Дата 5.6.2011, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 2.4.2011

Репутация: нет
Всего: нет



Цитата(olldman @ 5.6.2011,  18:51)
Насколько я понимаю, то у вас формируются блоки программно..

Именно так, и добавить назначение дополнительного класса, который будет убирать отступ, для каждого третьего продукта - не проблема.

Но мне интересно способен ли html справится с такой, казалось бы простой задачей, не прибегая к дополнительным телодвижениям.

Проверить возможности чистой верстки, если угодно :)
PM MAIL   Вверх
InfMag
Дата 5.6.2011, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: нет
Всего: 4



Maroon, ну например padding-left такой-то. А родительский блок margin-left: -СТОЛЬКО_ТОpx; В общем что-то в таком духе.

Добавлено через 12 минут и 30 секунд
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>markup</title>
    <style type="text/css">
        * { margin:0; padding:0; }
        html, body { height:100%; }
        
        .productsContainer {
            width: 640px;
            height: 100%;
            background: gray;
            margin: 0 auto;
        }
        
        .productsSubContainer {
            margin-left: -20px;
        }
        
        .product {
            width: 200px;
            height: 200px;
            margin-left: 20px;
            margin-bottom: 20px;
            background: silver;
            float: left;
        }
    </style>
</head>

<body>
    <div class="productsContainer">
        <div class="productsSubContainer">
            <div class="product"></div>
            <div class="product"></div>
            <div class="product"></div>
            <div class="product"></div>
            <div class="product"></div>
            <div class="product"></div>
            <div class="product"></div>
            <div class="product"></div>
            <div class="product"></div>
            <div class="product"></div>
            <div class="product"></div>
        </div>
    </div>
</body>
</html>

Ну это разве что при таком условии.
PM   Вверх
Maroon
Дата 5.6.2011, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 2.4.2011

Репутация: нет
Всего: нет



InfMaq, спасибо!

Но дело как раз в том что хочется обойтись без <div class="productsSubContainer">, т.е. не добавляя никаких дополнительных блоков.
Сдвигать margin'ом основной контейнер тоже не получится т.к. необходимо его четкое позиционирование относительно всей страницы.
PM MAIL   Вверх
InfMag
Дата 5.6.2011, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: нет
Всего: 4



Решил вашу проблему:
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>markup</title>
    <style type="text/css">
        * { margin:0; padding:0; }
        html, body { height:100%; }
        
        .productsContainer {
            width: 640px;
            background: gray;
            margin: 0 auto;
        }
        
        .product {
            width: 200px;
            height: 200px;
            margin-right: 20px;
            margin-bottom: 20px;
            background: silver;
            float: left;
        }
        
        .product:nth-child(3n) {
            margin-right: 0;
        }
        
        .breaker {
            clear: both;
        }
    </style>
</head>

<body>
    <div class="productsContainer">
        <div class="product"></div>
        <div class="product"></div>
        <div class="product"></div>
        <div class="product"></div>
        <div class="product"></div>
        <div class="product"></div>
        <div class="product"></div>
        <div class="product"></div>
        <div class="product"></div>
        <div class="product"></div>
        <div class="product"></div>
        
        <div class="breaker"></div>
    </div>
</body>
</html>

Как видите есть правда некий div.breaker - он нужен, чтобы фон родительского блока не оборвался. Если фон не принципиален — можно убрать.

Добавлено через 5 минут и 1 секунду
Можно и вместо float: display: inline-block:
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>markup</title>
    <style type="text/css">
        * { margin:0; padding:0; }
        html, body { height:100%; }
        
        .productsContainer {
            width: 640px;
            background: gray;
            margin: 0 auto;
        }
        
        .product {
            width: 200px;
            height: 200px;
            margin-right: 20px;
            margin-bottom: 20px;
            background: silver;
            display: inline-block;
        }
        
        .product:nth-child(3n) {
            margin-right: 0;
        }
    </style>
</head>

<body>
    <div class="productsContainer"><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
    --></div>
    
</body>
</html>

Но как видите придётся анигилировать пробелы и переводы строк, ибо они тоже как inline-block-и воспринимается что-ли или как правильней объяснить, в данном случае они анигилированы комментариями.
PM   Вверх
Maroon
Дата 5.6.2011, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 2.4.2011

Репутация: нет
Всего: нет



Спасибо! Совсем забыл про :nth-child

Но тут тоже есть свой минус - этот селектор доступен только в ксс3 и ИЕ вплоть до 8ой версии его не понимает.

Даже обидно что такое полезное свойство появилось так поздно в спецификации.

Это сообщение отредактировал(а) Maroon - 5.6.2011, 21:15
PM MAIL   Вверх
InfMag
Дата 5.6.2011, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: нет
Всего: 4



Maroon, скажите, у вас откуда это задание? Или сами для себя и развития придумали.
Просто если вы хотите рассчитывать на такие браузеры средства для скачивания нормальных браузеров, вроде ie7, а в особенности ie6, то ставлю 99%, что это технически не реализуемо. Из опыта говорю, подобные задачи встречал не раз. Либо дополнительные блоки, либо сосём лапу, такова политика IE. Нет, ну конечно вы можете в HEAD прописать Conditional Tags и там загружать скрипты, expressions (css-js) и уже делать всё, что хотите JavaScript-ом, по-моему тоже адекватное решение, чтобы не мусорить в доме костылями для ie. Только если задача позволяет.

Добавлено через 3 минуты и 52 секунды
Maroon
Код

<head>
...
<!--[if IE 6]>
    <script type="text/javascript" src="crutches_ie6.js"></script>
<![endif]-->
<!--[if IE 7]>
    <script type="text/javascript" src="crutches_ie7.js"></script>
<![endif]-->
</head>


Это сообщение отредактировал(а) InfMag - 5.6.2011, 21:17
PM   Вверх
Maroon
Дата 5.6.2011, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 2.4.2011

Репутация: нет
Всего: нет



Цитата(InfMag @ 5.6.2011,  21:16)
Maroon, скажите, у вас откуда это задание? Или сами для себя и развития придумали.

Задание из реального проекта, но условия придумал я сам, некий спортивный интерес.

Тоже сталкивался с подобными задачами не раз и всегда решал либо дополнительными блоками, либо дополнительными классами. В этот раз захотелось проверить есть ли более изящное решение.
PM MAIL   Вверх
InfMag
Дата 5.6.2011, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: нет
Всего: 4



Вот то, о чём я говорил smile
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>markup</title>
    <style type="text/css">
        * { margin:0; padding:0; }
        html, body { height:100%; }
        
        .productsContainer {
            width: 640px;
            background: gray;
            margin: 0 auto;
        }
        
        .product {
            width: 200px;
            height: 200px;
            margin-right: 20px;
            margin-bottom: 20px;
            background: silver;
            display: inline-block;
        }
        
        .product:nth-child(3n) {
            margin-right: 0;
        }
    </style>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
    <!--[if IE]>
        <script type="text/javascript">
            $(function () {
                $('.productsContainer').each(function () {
                    $(this).find('.product:nth-child(3n)').css('margin-right', '0');
                    $(this).find('.product').css('float', 'left');
                    $(this).append('<div style="clear:both;"></div>');
                });
            });
        </script>
    <![endif]-->
</head>

<body>
    <div class="productsContainer"><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
        --><div class="product"></div><!--
    --></div>
</body>
</html>


Добавлено через 3 минуты и 43 секунды
Maroon, можно вообще плагин написать для изоляции от ie smile Ну то-есть селекторы, которые им не поддерживаются. По ДОМ-риди парсить стили, находить элементы входящие в css3 и задавать их через JS. Причём при парсинге всего-то! Заменяем точку с запятой на запятую и оборачиваем между двоеточий и запятых в кавычки от-тримленые (trim) значения, и всё, JSON)
PM   Вверх
Maroon
Дата 5.6.2011, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 2.4.2011

Репутация: нет
Всего: нет



Большое спасибо!
Думаю так и поступлю smile
PM MAIL   Вверх
InfMag
Дата 5.6.2011, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: нет
Всего: 4



Maroon, успехов!
PM   Вверх
olldman
Дата 6.6.2011, 04:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дед
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 9.1.2009
Где: Омск

Репутация: 6
Всего: 6



Цитата

Как видите есть правда некий div.breaker - он нужен, чтобы фон родительского блока не оборвался.
- отличный пример, только div.breaker там лишний, достаточно прописать для .productsContainer overflow:hidden;  smile 
PM MAIL WWW ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Вёрстка веб-сайтов | Следующая тема »


 




[ Время генерации скрипта: 0.0998 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.