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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не стандартные оптикаемые блоки, Как действовать в такой ситуации? 
:(
    Опции темы
WebMast
Дата 27.12.2009, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Front-end developer
*


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

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



Вообщем, смотрите на картинку:

Верстаем одну строку, состоящую из двух блоков внутри. Первый блок должен идти перед вторым. Но существуют ситуации, когда второй блок вылазит за края родителя и блоки должны так перестроится, как показана на 3 примере в картинке. То есть второй блок занимают первую строчку, а первый всю вторую строчку.

Как можно реализовать такую верстку?
Как правильно заточить javascript для универсальности этого примера?

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

Присоединённый файл ( Кол-во скачиваний: 24 )
Присоединённый файл  adaptive.png 6,30 Kb
--------------------
Личный Блог Евгения ЖлобоРасширение vkleaner для Google Chrome
PM MAIL WWW Skype   Вверх
Mavrun
Дата 27.12.2009, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



хотелось бы посмотреть живьём для чего такое требуется, потому что может будет возможно другие варианты придумать - это первое. а второе - хотелось бы узнать относительно блока 1 - он фиксирован по ширине или нет? второй блок, как я понимаю, резинкой должен быть, или он тоже фиксирован, но в различных случаях у него ширина либо одна, либо другая?
 в общем поконкретнее хотелось бы услышать
PM MAIL   Вверх
Itsys
Дата 27.12.2009, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



Можно сделать так:
Код

<div style="width: 400px; z-index: 1; border: 1px solid #00FFFF; float: right">
&nbsp;</div>
<div style="width: 400px; z-index: 1; border: 1px solid #0000FF">
&nbsp;</div>

А дальше на JS либо прилепить его к первому (если хватает строки), либо к левому краю страницы, если второй див "выдавился"
PM MAIL WWW Skype   Вверх
WebMast
Дата 29.12.2009, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Front-end developer
*


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

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



Mavrun, оба блока не фиксированы по ширине. вообще идея проекта такая:
Верстка двух различных по содержанию и виду меню. Причем оба не имеют заданной ширины, то есть зависят от количества содержимого, вставляемого php кодом. Если суммарная ширина достаточна, чтобы не выходить за края, то оба меню идут в строку. Если же суммарная ширина не входит в рамки родительского блока, то второе меню помещается над вторым. И плюс, родительский блок с заданной шириной.

Itsys, спасибо. Я проверю ваш пример чуть позже, сейчас очень не хватает времени..
--------------------
Личный Блог Евгения ЖлобоРасширение vkleaner для Google Chrome
PM MAIL WWW Skype   Вверх
Mavrun
Дата 29.12.2009, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ммм, суммарная ширина. а в каких случаях она может быть превышена? когда картинки вставляются? потому что если текст, то тогда всё уйдёт в высоту.
если ориентация на размер картинок, то можно при подгрузке страницы проверять это через php, смотрел какая их ширина, и ориентируясь на полученный ответ размещал блоки так или так. 
хотя возможно проще что-то с js придумать. например, можно посмотреть ширины блоков какие получились, там сложить, повычитать, к чему ориентироваться и уже от этого приписывать стили блокам. так пожалуй даже проще
PM MAIL   Вверх
WebMast
Дата 30.12.2009, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Front-end developer
*


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

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



Mavrun, нет, под словом суммарная я имел ввиду ширина первого блока + ширина второго блока. 
Рассмотрим на примере:
Пусть ширина родительского блока 1000px. Ширина первого блкоа не известна (но для нас она 800px). Ширина второго блока тоже не известна (для нас - 190px). 800px + 190px - это и есть суммарная ширина. Когда 1000px - (800px+190px) > 0, тогда у нас получается именно одна строка и второй блок идет после первого. А когда второй блок становится, допустим, 250px (это может произойти в следствии добавления ссылки в меню), получаем 1000px - (800px+250px) < 0. Вот теперь наши оба меню, если стоят в строчку, выходят за рамки родительского блока, и нам нужно скинуть один вниз на новую строчку. Если бы нам нужно было скинуть второй блок вниз, то делалось бы это элементарно. А вот как нам теперь скинуть первый блок?

Может кто-нибудь показать пример, как реализовать это на чистом JavaScript? Потому что я работаю только c jQuery.
--------------------
Личный Блог Евгения ЖлобоРасширение vkleaner для Google Chrome
PM MAIL WWW Skype   Вверх
Itsys
Дата 31.12.2009, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



Например так:
Код

<html>
<head>
<script type="text/javascript">
    function checkpos(){
        f = document.getElementById('first');
        s = document.getElementById('second');
        p = document.getElementById('pdiv');
        //document.getElementById('test').innerHTML = "f:" + f.offsetWidth + " s:" + s.offsetWidth + " p:" + p.clientWidth;
        if (p.clientWidth > (f.offsetWidth + s.offsetWidth)){
            p.style.height = (f.offsetHeight > s.offsetHeight ? f.offsetHeight : s.offsetHeight);
            s.style.marginLeft = f.offsetWidth;
            f.style.marginTop = 0;
        }
        else{
            p.style.height = f.offsetHeight + s.offsetHeight;
            s.style.marginLeft = 0;
            f.style.marginTop = s.offsetHeight;
        }
    }
</script>
</head>
<body>
<div id="pdiv" style="width: 1000px; border: 1px solid #000">
<div style="z-index: 1; border: 1px solid #00FFFF; position: absolute" id="first">
Текст первого</div>
<div style="z-index: 1; border: 1px solid #0000FF; position: absolute" id="second">
Текст второго</div>
</div>
Ширина первого:<input type="text" value="0" onchange="document.getElementById('first').style.width = '' + this.value + 'px'; checkpos()"><br>
Ширина второго:<input type="text" value="0" onchange="document.getElementById('second').style.width = '' + this.value + 'px'; checkpos()">
<div id="test"></div>
<script>checkpos();checkpos();</script>
</body>
</html>

PM MAIL WWW Skype   Вверх
blah
Дата 31.12.2009, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 25.9.2008
Где: моя тачка, чувак?

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



Или так, если очередность блоков в коде не критична:
Код

<!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>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Boxes</title>
    <style type="text/css">
        body{margin:0;}
        #container{
            width:200px;
            overflow:hidden;
            background:#333;
        }
        #box1{
            float:right;
            background:#ccc;
            white-space:nowrap;
        }
        #box2{
            float:right;
            background:#f00;
            white-space:nowrap;
        }
    </style>
    <script type="text/javascript">
        function InitWidth(){
            var cont = document.getElementById('container');
            var box1 = document.getElementById('box1');
            var box2 = document.getElementById('box2');
            if (box1.clientWidth + box2.clientWidth > cont.clientWidth){
                box1.style.styleFloat ='left';
                box2.style.styleFloat ='left';
                box1.style.cssFloat ='left';
                box2.style.cssFloat ='left';
            }
        }
        if (window.addEventListener)window.addEventListener("load", InitWidth, false);
        else if (window.attachEvent)window.attachEvent("onload", InitWidth);
    </script>
</head>
<body>
    <div id="container">
        <div id="box2">box2 so much content here</div>
        <div id="box1">box1 content</div>
    </div>
</body>
</html>

PM MAIL ICQ   Вверх
WebMast
Дата 6.1.2010, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Front-end developer
*


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

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



Хм.. Все оказалось довольно таки просто =). Идея пришла случайно, от отчаяния.

Вообщем не буду описывать теорию, вот код:

Код

<div class="block1">
text
</div>
<div class="block2">
text
</div>


Код

.block2{float:left;}


Все банально и просто.
--------------------
Личный Блог Евгения ЖлобоРасширение vkleaner для Google Chrome
PM MAIL WWW Skype   Вверх
blah
Дата 6.1.2010, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 25.9.2008
Где: моя тачка, чувак?

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



Интересно, что же дал такой способ?
.block1 всегда будет занимать 100% ширины родителя, а .block2 всегда находится под ним.
PM MAIL ICQ   Вверх
WebMast
Дата 6.1.2010, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Front-end developer
*


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

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



Черт.. Ступил.. А если мы возьмем что-то вместо блочного элемента?
--------------------
Личный Блог Евгения ЖлобоРасширение vkleaner для Google Chrome
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Вёрстка веб-сайтов | Следующая тема »


 




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


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

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