Jump to content

DIV одинаковой ширины и высоты всегда по центру


Melodyn
 Share

Recommended Posts

Гуглил эту тему, но как-то не попалось решение. Так как я нуб, сделал самое простое и очевидное решение и решил поделиться с нубами всего мира :)

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

<content>
  <div></div><div></div><div></div><div></div>
  <div></div><div></div><div></div><div></div>
</content>

В принципе, решение на CSS мне виделось примерно: height: width; -- но так к сожалению (или счастью) нельзя. Зато можно использовать фичу CSS3 для ширины:

content{
  display: block;
  height: 512px;
  width: auto;
  margin: 16px;
  padding: 4px;
  background: #fff;
}

content div{
  display: inline-block; /* блоки на одной строке */
  min-height: 128px;
  width: calc(100% / 4 - 8px); /* Используем CSS3 для расчёта ширины блоков,
                               вычтем отступы, созданные margin и padding */
  background: #ccc;
  margin: 4px;
}

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

 

И осталось только узнать ширину, подставив её в CSS:

$(function(){
  var myWidth = $('content div').width(); // получаем ширину
  $('content div').css("height", myWidth); // устанавливаем её
});

 

В итоге оно работает на jsfiddle.

 

Вот и всё! Делитесь своими решениями.

 

Link to comment
Share on other sites

  On 3/26/2016 at 6:26 PM, Melodyn said:

с одинаковыми отступами

Expand  

Отступы от краёв меньше отступов между элементов.

  Цитата

одинаковой высотой и шириной

Expand  

Растягиваю/сужаю окно - квадраты превращаются в вытянутые или растянутые прямоугольники.

Link to comment
Share on other sites

  On 3/26/2016 at 7:21 PM, Launder said:

Отступы от краёв меньше отступов между элементов.

Растягиваю/сужаю окно - квадраты превращаются в вытянутые или растянутые прямоугольники.

Expand  

Отступы между рядами действительно больше, потому что margin указан для четырёх краёв. Можете сделать margin-bottom нулевым.

 

Не забывайте про кнопку Run - JS не работает в реальном времени, в отличие от CSS.

Link to comment
Share on other sites

  On 3/26/2016 at 7:28 PM, Melodyn said:

Не забывайте про кнопку Run - JS не работает в реальном времени, в отличие от CSS.

Expand  

Да, вижу, ок.

  Цитата

Отступы между рядами действительно больше, потому что margin указан для четырёх краёв.

Expand  

Почему - я вижу.

  Цитата

Можете сделать margin-bottom нулевым.

Expand  

А можно вообще сделать так, чтоб контейнер был не фиксированным, а растягивался по высоте?

Link to comment
Share on other sites

  On 3/26/2016 at 7:36 PM, Launder said:

чтоб контейнер был не фиксированным, а растягивался по высоте?

Expand  

Контейнер - content? Конечно можно. Поставьте height: auto вместо height: 512px и он будет изменяться вместе с количеством/размером содержимого.

Link to comment
Share on other sites

  On 3/26/2016 at 8:56 PM, by chris said:
Expand  

Что-то не так:

Снимок.PNG

 

  On 3/27/2016 at 2:13 AM, Igor Schnaider said:

padding-top можно использовать на псевдоэлементе (link).

Expand  

Очень интересный подход! Есть, правда и траблы: при установке текста внутри блока он становится не квадратным. Как пофиксим? Пруф.

Снимок.PNG

Link to comment
Share on other sites

  On 3/27/2016 at 4:32 AM, Igor Schnaider said:

Можно так.

Expand  

Заметил, что у моего и вашего метода есть один недостаток - текст вылезает за пределы установленного padding. В принципе, это можно пофиксить, например, установив border, но может, есть идеи получше? http://codepen.io/anon/pen/bpRYvb?editors=1100

Link to comment
Share on other sites

  On 3/27/2016 at 7:41 AM, by chris said:

Я убрал полосы прокрутки. А что должно еще измениться, результат идентичен вашему.

Expand  

При чем тут полосы прокрутки? У меня блоки квадратные, а у вас прямоугольные:

Снимок.PNGСнимок.PNG

Link to comment
Share on other sites

  On 3/27/2016 at 7:56 AM, Melodyn said:

При чем тут полосы прокрутки? У меня блоки квадратные, а у вас прямоугольные:

Expand  

А вы их даже не заметили))

 

  On 3/27/2016 at 7:56 AM, Melodyn said:

У меня блоки квадратные, а у вас прямоугольные

Expand  

Относительно. Сожмите поле с результатом и ваши блоки выстроятся ровными прямоугольниками. http://i.imgur.com/IT8P6l9.jpg

Пожалуйста, эквивалентные квадраты логике вашей разметки https://jsfiddle.net/9aL4oc76/8/

Link to comment
Share on other sites

  On 3/27/2016 at 8:07 AM, by chris said:

Пожалуйста, эквивалентные квадраты логике вашей разметки https://jsfiddle.net/9aL4oc76/8/

Expand  

То ли лыжи не едут...

Название темы - блоки одинаковой высоты и ширины. Мой код действительно даёт прямоугольники, когда есть height: 128px или не было обновления страницы. Я смотрю на ваш код и вижу в нём блоки разной ширины и высоты, опять же два скрина с вашим и моим случаем: 

Снимок.PNG Снимок.PNG

Edited by Melodyn
Link to comment
Share on other sites

  On 3/27/2016 at 6:13 AM, Melodyn said:

В принципе, это можно пофиксить, например, установив border, но может, есть идеи получше?

Expand  

Можно с помощью border. Ну или городить дополнительные элементы.

  • Like 1
Link to comment
Share on other sites

  On 3/27/2016 at 11:58 AM, Launder said:

решение будет зависеть от размера шрифта.

Expand  

От размера шрифта вряд ли что-то может зависеть. Наиболее актуальная версия: https://jsfiddle.net/9aL4oc76/6/ так как уже после того кода вылезло много новых вопросов ) Если получится сделать опрятный код, то и на чистом CSS вариант получится.

Link to comment
Share on other sites

  On 3/27/2016 at 12:02 PM, Melodyn said:

От размера шрифта вряд ли что-то может зависеть.

Expand  

Как это врят ли? Я специально поставил размер шрифта большой. Уберите в моём примере вертикальное выравнивание, и поставьте марджин-боттом, как Вы и говорили, и, увидите, что зависит.

Link to comment
Share on other sites

  On 3/27/2016 at 12:06 PM, Launder said:

марджин-боттом

Expand  

 

  On 3/27/2016 at 12:06 PM, Launder said:

размер шрифта

Expand  

Эм? Размер шрифта font-size, а margin-bottom - это отступ снизу. Вы уверены, что вы говорим об одном и том же? ;)

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
Reply to this topic...

×   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 jksnf
      Не работает transition при появлений модального окна:
      <a class="btn">Modal</a> <div class="modal"> <div class="overlay"> <div class="content"> <a class="close">X</a> <h1>Title</h1> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Sunt repellat asperiores rerum animi officiis minus corporis iure voluptate accusantium, ut optio ratione iusto nemo delectus. Quasi illum libero dolorum neque?</p> </div> </div> </div> //scss .modal .overlay{ position: fixed; top: 0;left: 0; width: 100%;height: 100%; background: rgba($color: #000000, $alpha: .8); z-index: 1; display: none; } .modal .content{ width: 500px;height: 200px; position: absolute; top: 50%;left: 50%; transform: translate(-50%, -50%); background-color: #fff; z-index: 2; text-align: center; display: none; a{ line-height: 30px; font-weight: bold; color: #fff; top: -50px;; position: absolute; right: -50px; font-size: 40px; padding: 10px; } h1{ margin-bottom: 20px; } } .modal.active .overlay{ display: block; } .modal.active .content{ display: block; } //Jquery $(document).ready(function(){ $(".btn, .close").click(function() { $(".modal").toggleClass("active") }) }) Я понимаю что на display не работает transition. но и нельзя ставить opacity т.к перекрывает контент сзади него изначально.

      Что делать?
    • By DrRobotGranata
      Всем привет! Задача стоит следующая. Есть 8 элементов (IMG). Т.е. одна целая картинка разрезана на 8 частей(рамка)
      Нужно сверстать гибкой версткой макет, где эти 8 кусочков будут одним целым( рамкой) а внутри можно будет размещать любой текс, рамка по высоте подстраивается под текс, по ширине на всю ширину окна.
      Кручу верчу, все никак не получается. Подскажите в какую сторону думать. Каждый Img в отдельный div и все дивы в общий контейнер? и дальше как
    • By IsayR
      Всем привет! Подскажите, пожалуйста, как правильно сделать раскрывающиеся блоки со скрытым содержанием внутри? У меня в принципе все работает, блок открывается и закрывается, НО если я нажимаю на блок, а не на стрелочку, она у меня остается в таком же положении(а она должна у меня меняться, когда блок открывается), и получается куча мала, и выглядит это не очень презентабельно. Подскажите, пожалуйста!
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="wrapper-div"> <div class="div"> <div class="window-one"> <h3 class="title"> Заголовок 1 </h3> <div class="arrow-test"></div> </div> <div class="window-two"> <div class="text">Текст 1</div> </div> </div> </div> <div class="wrapper-div"> <div class="div"> <div class="window-one"> <h3 class="title"> Заголовок 2 </h3> <div class="arrow-test"></div> </div> <div class="window-two"> <div class="text">Текст 2</div> </div> </div> </div> <div class="wrapper-div"> <div class="div"> <div class="window-one"> <h3 class="title"> Заголовок 3 </h3> <div class="arrow-test"></div> </div> <div class="window-two"> <div class="text">Текст 3</div> </div> </div> </div> .div{ border: 1px solid #3A444E; border-radius: 10px; width: 300px; height: 64px; overflow: hidden; } .div.open { height: auto; background: #000; color: #fff; } .window-one { display: flex; align-items: center; justify-content: space-between; } .title { margin-bottom: 20px; } .arrow-test { content: ''; background: url('http://cdn.onlinewebfonts.com/svg/img_387044.png') no-repeat center center / 100%; width: 30px; height: 30px; cursor: pointer; } .arrow-test.open { content: ''; background: url('https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Eo_circle_yellow_arrow-up.svg/1024px-Eo_circle_yellow_arrow-up.svg.png') no-repeat center center / 100%; width: 30px; height: 30px; cursor: pointer; } $('.div, .arrow-test').click( function(){ $(this).toggleClass('open')});  
    • By vladdvin
      Верстаю макет с Фигмы - https://www.figma.com/file/2rdy1qjBTl7D6BAC8S4qlf/Webovio?node-id=0%3A1. Наверстал
      CSS
      В результате отображается следующая картинка

      в режиме инструментов разработчика. А вне режима вообще отображает

      Подскажите как добиться отображения текста как на макете.
    • By Hinn
      Всем приветик, начинающий фрилансер. Ищу первые заказы в данной сфере. Занимаюсь:
      • На малом уровне версткой;
      • Хорошо разбираюсь в таких CMS: как Wordpress и Tilta - легко и быстро разработаю одно страничные, многостраничные сайты, интернет-магазины (могу как дорабатывать, так и создания с нуля, так же занимаюсь переносом одного сервера на другой);
      • Увлекаюсь разработкой логотипов (логотипы с нуля, доработка логотипа, рисование логотипа по эскизу).
      Готов заниматься работой за любую плату. Так же присутствует портфолио, но за частую людям интересно когда о тебе есть отзывы. Поэтому пришел сюда за практическим опытом, и поиском постоянной работы.
      Использую:
      - Верстка: (HTML5/CSS3), верстаю из Figma, Photoshop, illustrator.
      - Разработка сайта: (CMS WordPress, Tilta).
      - Разработка логотипа: (Photoshop, illustrator)
      Если не знаю чего-то необходимого для Вашего проекта\работы -- обязательно разберусь (все-таки начинающий фрилансер).

      Если вы разработчик и вам некому спихнуть рутинную работу - я с радостью возьму её на себя;

      телеграмм: HinnWork;
      почта: balistic.baty@gmail.com

      Открыт для любых предложений. 
  • Обсуждения

    • Актуальные контакты: Telegram: @Nikker_web E-Mail:   tarasevich.email@gmail.com Портфолио https://www.behance.net/d4d4186e Разрабатываю дизайн групп в соц сетях, сайтов, приложений, другой дизайн под заказ    
    • Актуальные контакты: Telegram: @Nikker_web E-Mail:   tarasevich.email@gmail.com   Разрабатываю дизайн групп в соц сетях, сайтов, приложений, другой дизайн под заказ   Портфолио https://www.behance.net/d4d4186e
    • Доброго всем времени суток. Прошу помощи. Научите принципу изменения футера. Движок Xenforo. Версия 2.2.10. Стиль дефолтный. Что именно нужно в итоге на фото примере. Мой шаблон app.footer less имеет следующее значение.  .p-footer { .xf-publicFooter(); a { .xf-publicFooterLink(); } } .p-footer-inner { .m-pageWidth(); .m-pageInset(); padding-top: @xf-paddingMedium; padding-bottom: @xf-paddingLarge; } .p-footer-row { .m-clearFix(); margin-bottom: -@xf-paddingLarge; } .p-footer-row-main { float: left; margin-bottom: @xf-paddingLarge; } .p-footer-row-opposite { float: right; margin-bottom: @xf-paddingLarge; } .p-footer-linkList { .m-listPlain(); .m-clearFix(); > li { float: left; margin-right: .5em; &:last-child { margin-right: 0; } a { padding: 2px 4px; border-radius: @xf-borderRadiusSmall; &:hover { text-decoration: none; background-color: fade(@xf-publicFooterLink--color, 10%); } } } } .p-footer-rssLink { > span { position: relative; top: -1px; display: inline-block; width: 1.44em; height: 1.44em; line-height: 1.44em; text-align: center; font-size: .8em; background-color: #4682B4; border-radius: 2px; } .fa-rss { color: white; } } .p-footer-copyright { margin-top: @xf-elementSpacer; text-align: center; font-size: @xf-fontSizeSmallest; } .p-footer-debug { margin-top: @xf-paddingLarge; text-align: right; font-size: @xf-fontSizeSmallest; .pairs > dt { color: inherit; } } @media (max-width: @xf-responsiveMedium) { .p-footer-row-main, .p-footer-row-opposite { float: none; } .p-footer-copyright { text-align: left; padding: 0 4px; // aligns with other links } }  
    • Нужны сайты с примерами верстки, типа https://css-tricks.com/. Типовые приемы и нестандартные на все случаи жизни. Накидайте ссылок.
×
×
  • 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