Вирівняйте <div> елементи поруч


127

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

введіть тут опис зображення

Однак я хочу, щоб ці дві кнопки були поруч. Я не можу зрозуміти, що потрібно зробити з вирівнюванням.

Ось HTML

<div id="dB"}>
    <a href="http://notareallink.com" title="Download" id="buyButton">Download</a> 
</div>
<div id="gB">
    <a href="#" title="Gallery" onclick="$j('#galleryDiv').toggle('slow');return false;" id="galleryButton">Gallery</a>     
</div>

Ось CSS

#buyButton {
    background: url("assets/buy.png") 0 0 no-repeat;
    display:block;
    height:80px;
    width:232px;
     text-indent:-9999px;
}
#buyButton:hover{
width: 232px;
height: 80px;
background-position: -232px 0;
}
#buyButton:active {
width: 232px;
height: 80px;
background-position: -464px 0;
}

#galleryButton {
    background: url("images/galleryButton.png") 0 0 no-repeat;
    display:block;
    height:80px;
    width:230px;
     text-indent:-9999px;
}
#galleryButton:hover{
width: 230px;
height: 80px;
background-position: -230px 0;
}
#galleryButton:active {
width: 230px;
height: 80px;
background-position: -460px 0;
}

5
Перше, що спадає на думку, читаючи заголовок,float:left;
JCOC611,

2
@ JCOC611: Застосування float:left;до обох divs зробило це чудово. Чи можете ви опублікувати свій коментар як відповідь? Дякую!
sudo rm -rf

1
А друге, display: inline-block;але це менш добре підтримується ...
JV

1
float: зліва всередині контейнера буде працювати, але я б спробував використовувати два теги <span> замість <div> s для кнопок.
shiftycow

Як вже було сказано, додавання float: зліва; до #buyButton та #galleryButton, а потім додайте ще один елемент із чітким: обидва; очистити плаваючий. Навіщо використовувати divs (елементи блоку), щоб обернути <a>?
Людизайн

Відповіді:


154

Застосуйте float:left;обидві ваші діви, щоб вони стояли поруч.


Я помиляюся, чи clear:both;потрібно кудись зайти туди? Я ніколи не був саваном CSS, але мені здається типовим, коли я бачу, як плаває, щоб також побачити зазори.
Бред Крісті

4
clear:bothзробить точно навпаки. "Елементи після плаваючого елемента будуть обтікатися навколо нього. Щоб уникнути цього, використовуйте властивість clear."
JCOC611

@ JCOC611: А, так зрозуміло, як правило, випливає, коли ви хочете, щоб миттєвий поплавок здатність? Має сенс. Дякую за урок ;-)
Бред Крісті

7
Просто, щоб бути "зрозумілим" (жахливо, я знаю), вам потрібно було б скористатися, <br style="clear: both;" />якби у вас був третій дів, який ви хотіли під двома, які були вирівняні.
Тасс

3
@Tass вам потрібен лише ваш третій дів на зразок цього: <div style="clear: both;">...</div>(не потрібно обов'язкового)
intrepidis

136

Обережно float: left… 🤔

… Є багато способів вирівнювання елементів поруч.

Нижче наведені найпоширеніші способи досягнення двох елементів поруч ...

Демонстрація: Перегляд / редагування всіх наведених нижче прикладів на Codepen


Основні стилі для всіх прикладів нижче ...

Деякі основні стилі css для parentта childелементи в цих прикладах:

.parent {
  background: mediumpurple;
  padding: 1rem;
}
.child {
  border: 1px solid indigo;
  padding: 1rem;
}

поплавок: зліва

Використовуючи floatрішення, мій ненавмисний вплив на інші елементи. (Підказка. Можливо, вам доведеться використовувати чіткий виправлення .)

html

<div class='parent'>
  <div class='child float-left-child'>A</div>
  <div class='child float-left-child'>B</div>
</div>

css

.float-left-child {
  float: left;
}

дисплей: вбудований блок

html

<div class='parent'>
  <div class='child inline-block-child'>A</div>
  <div class='child inline-block-child'>B</div>
</div>

css

.inline-block-child {
  display: inline-block;
}

Примітка : простір між цими двома дочірніми елементами можна видалити, видаливши пробіл між тегами div:

дисплей: вбудований блок (немає місця)

html

<div class='parent'>
  <div class='child inline-block-child'>A</div><div class='child inline-block-child'>B</div>
</div>

css

.inline-block-child {
  display: inline-block;
}

дисплей: флекс

html

<div class='parent flex-parent'>
  <div class='child flex-child'>A</div>
  <div class='child flex-child'>B</div>
</div>

css

.flex-parent {
  display: flex;
}
.flex-child {
  flex: 1;
}

дисплей: inline-flex

html

<div class='parent inline-flex-parent'>
  <div class='child'>A</div>
  <div class='child'>B</div>
</div>

css

.inline-flex-parent {
  display: inline-flex;
}

дисплей: сітка

html

<div class='parent grid-parent'>
  <div class='child'>A</div>
  <div class='child'>B</div>
</div>

css

.grid-parent {
  display: grid;
  grid-template-columns: 1fr 1fr
}


2
Так, але я чув, що використання inline-blockмає деякі проблеми сумісності. Також будь-яка перевага від використання цього над float?
sudo rm -rf

1
Так, inline-blockновіше, тому ваші браузери таргетингу ще не підтримують його (хоча існує багато властивостей браузера, а також для цього обхідні шляхи). Перевага полягає в тому, що містить елемент буде обгортати елементи; з цим floatвам доведеться додати css до батьківського елемента.
Beau Smith

12

не ускладнювати

<div align="center">
<div style="display: inline-block"> <img src="img1.png"> </div>
<div style="display: inline-block"> <img src="img2.png"> </div>
</div>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.