Jump to content
  • 0

Автоматическое позиционирование ячейки при отсутствии места


Heian9
 Share

Question

Здравствуйте!

Потребовалось сверстать блок вот такого типа.

51a3283226f5.jpg

1 - плавающий блок с заголовком, неопределенной ширины, растягивается вправо и прижат к аватарке 3. Ширина не ограничена и зависит от того, что в нем написано.

2 - блок с кнопками управления своей учеткой, находится справа от блока 1, прижат к правому краю, НО если из-за длины блока 1 блок 2 не вмещается, он должен переместиться в место под аватаркой, отмеченное красным кругом.

3 - аватарка, у меня она с абсолютным позиционированием, положение блоков относительно ее регулируется пэддингом.

 

Один из ключевых моментов - это резиновый макет, т.е. при увеличивании \ уменьшении окна браузера все должно работать корректно.

 

Собственно, я не смог найти ничего более умного, кроме как определить через php длину заголовка 1 и проставить для блока 2 классы типа pull-left-768, pull-left-1199 и так далее, которые сдвигают при определенных ключевых точках этот блок в место, отмеченное кружочком. Поскольку макет сделан на бутстрапе, то это не сложно. Но решение получилось довольно костыльным и не без недостатков... поэтому у меня вопрос: как бы вы сделали подобный блок? На основании каких хаков \ приемов и т.п. И возможно ли вообще реализовать такое непростое поведение на чистом css?

 

p.s. js я не применял, т.к. возможны артефакты при загрузке страницы.

 

Буду благодарен за советы :)

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

В том-то и дело, что сначала 2 должна быть float:right, а если вдруг текст в 1 станет слишком длинным и сдвинет ее, она должна сместиться к левому краю, т.е. стать float:left. И при этом не подгадать ширину текста. К тому же, текст может смещать блок 2 и при ширине в 1200 пикселов, так что через чисто media-queries не представляю, как это сделать.

Я сейчас и реализовал через php + media-queries :)  Но минус как раз именно в том, что я не могу гарантировать успешность такой системы на всех языках. Несколько слишком широких символов, и все полетит, а если допускать широкие - тогда будет слишком много места при строке из узких, и т.п.

 

Для такого у меня есть только js, но его бы не хотелось применять...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By tohastar
      Здравствуйте! Помогите разобраться. Для детского садика требуется создать карту сайта по новым требованиям. Карту создали с помощью генератора, внесли небольшие изменения в код, но теперь хочется упорядочить блоки по модулям на 4 столбика, как добавить новые столики понятно, главное их упорядочить. Т.е. для примера модуль подменю "важная информация" находится с верху и относящиеся к нему страницы вниз и так далее. Но к сожаление не понятно, как это можно реализовать, все добавленные вновь страницы идут последовательно вниз. Пришлось отделять тегами < p>, но вверх поднять их не получается.  http://vasilyek78.ucoz.ru/Dokument/SiteMap.html адрес расположения карты сайта.
    • By Алеся
      Подскажите, пожалуйста, как растянуть фоновую картинку, заключенную в div, на всю ширину вьюпорта? Сейчас она отображается посередине, по ширине макета. Указывала ширину 100%, 1200px, минимальную ширину 1200px - не работает.
      <div class="banner"> 
            <div class="container background-image">
            <div class="banner_text"></div>
            </div>
          </div>
      CSS:
      .background-image {
        background-image: url('/img/new_oranges.jpg');
        background-size: cover;
        height: 200px;
      }
    • By cozy_eternity
      Столкнулся с проблемой показа скрытых элементов. Ставлю div'у display:none и при выборе radio кнопки, div должен отображаться, но этого не происходит, прошу помочь..

       
      <label>Нужны ли распашные дверцы?</label> <p><input type="radio" name="swing" onclick="ShowElement1">Да</p> <p><input type="radio" name="swing">Нет</p> <div id="swing"> <p><label>Введите размер ячеек:</label></p> <p>Высота<input type="number"></p> <p>Ширина<input type="number"></p> <p>Глубина<input type="number"></p> </div> #swing { display: none; } function ShowElement1(){ document.getElementById("swing").style.display='block'; } Разобрался
    • By konoplev_ps
      Добрый день.
      Проблема: Настраиваю в отдельном CSS стили для шрифтов h1, h2 и т.д., но когда начинаю их применять внутри тега div - не вижу изменений. Сам CSS подключил, в нем и другие настройки стилей, которые успешно применяются к файлу html.
    • By gars
      Проблема в следующем верстаю макет с PSD шаблона. Использую HTML и CSS. 
      Прописал по порядку блоки Header. nav. main. в коде html. Добавил картинку и ссылки в блок header. открыл браузер что бы отобразить результат. 
      и вижу. что блок main наехал на блок header.
      Вопрос: почему так получилось. Ведь одно из свойств блочных тегов - они начинаются с новой строки и занимают всю доступную ширину. (main. игнорирует свойство и не начинается с новой строки).  как решить и почему произошло?     Заранее благодарю всех за помощь
      Скрин прикрепляю.   
      HTML
      <body> <header> <div class="logo"> <img src="..\matereal\images\logo.png" alt="logotip" class="logo__img"> </div> <nav> <a href="" class="nav" >home</a> <a href="" class="nav" >compane</a> <a href="" class="nav" >servise</a> <a href="" class="nav" >clients</a> <a href="" class="nav" >contacts</a> </nav> </header> <main> <div> <img src="" class="slaider" alt="slaider"> <p class="slaider__text__h1">веб-разработке\практика</p> <p class="slaider__text__h2"></p> </div> </main> <footer> </footer> CSS
      body { margin: 0; } header { margin: 0; border-top: 3px solid black; } .logo { margin:60,0,60,60; float: left; width: 49%; } nav { float: right; margin: 60,60,60,0; width: 51%; }  

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy