Як правильно вирівняти елементи div?


351

Корпус мого html-документа складається з 3 елементів, кнопки, форми та полотна. Я хочу, щоб кнопка та форма були вирівняні праворуч, а полотно залишалося вирівняним ліворуч. Проблема полягає в тому, що я намагаюся вирівняти перші два елементи, вони більше не слідують один за одним і замість цього знаходяться поруч один з одним по горизонталі? не маючи місця між ними.

#cTask {
  background-color: lightgreen;
}

#button {
  position: relative;
  float: right;
}

#addEventForm {
  position: relative;
  float: right;
  border: 2px solid #003B62;
  font-family: verdana;
  background-color: #B5CFE0;
  padding-left: 10px;
}
<!DOCTYPE html>
<html lang="en">
<head>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script>
  <script type="text/javascript" src="timeline.js"></script>
  <link rel="stylesheet" href="master.css" type="text/css" media="screen" />
</head>

<body bgcolor="000" TEXT="FFFFFF">
  <div id="button">
    <button onclick="showForm()" type="button" id="cTask">
        Create Task
    </button>
  </div>
  <div id="addEventForm">
    <form>
      <p><label>Customer name: <input></label></p>
      <p><label>Telephone: <input type=tel></label></p>
      <p><label>E-mail address: <input type=email></label></p>
    </form>
  </div>
  <div>
    <canvas id="myBoard" width="1000" height="600">
      <p>Your browser doesn't support canvas.</p>
    </canvas>
  </div>
</body>
</html>

Відповіді:


338

Ви можете зробити div, який містить і форму, і кнопку, а потім змусити div плавати праворуч, встановивши float: right;.


Ніколи не думав, що я буду використовувати float. Я спробував, margin-left: auto;але це не вийшло, що мене здивувало, оскільки елемент, який я намагаюся вирівняти праворуч, відносний.
DFSFOT

462

поплавці в порядку, але проблематичні з ie6 & 7.

я вважаю за краще використовувати margin-left:auto; margin-right:0;внутрішній діл.


6
@ShellNinja чому? я знаю, що 0це дійсно, однак так і 0px ... аргументуйте свою точку, щоб ми щось дізналися.
pstanton

29
Якщо вимкнути пристрій, браузер може пропустити певні розрахунки, щоб покращити його ефективність. Якщо це нуль, навіщо витрачати ресурси, обчислюючи макет на основі одиниці? Нуль - нуль незалежно від одиниці ... Можна подумати, що ця логіка вже вбудована в браузери. посилання
ShellNinja

7
не можу погодитися, але я сумніваюся, що це значно впливає на продуктивність. редагувати.
pstanton

24
Я не можу змусити це працювати, div все ще вирівнює ліворуч. Чи можете ви надати загадку чи кілька (більше) рядків html / css?
Гріддо

21
Переконайтеся, що у вашого елементаdisplay: block;
derek_duncan

203

Старі відповіді. Оновлення: використовуйте flexbox, зараз він працює в усіх браузерах.

<div style="display: flex; justify-content: flex-end">
  <div>I'm on the right</div>
</div>

А ви можете отримати ще більш вигадливі, просто:

<div style="display: flex; justify-content: space-around">
  <div>Left</div>
  <div>Right</div>
</div>

І більш фантазії:

<div style="display: flex; justify-content: space-around">
   <div>Left</div>
   <div>Middle</div>
  <div>Right</div>
</div>


4
це працює, але коли екран стає малим замість укладання, вони просто стають по-справжньому вузькими
Жан д'арме

6
Вам потрібно додати медіа-запит, щоб змінити флекс-напрямок від рядка до стовпця у визначеній точці розриву. Ви, ймовірно, захочете змінити або видалити вміст виправдання в цьому прикладі, інакше речі будуть розтягуватися вгору і вниз замість ліворуч і праворуч.
Майкл Буше

Це працювало для мене. Попередні відповіді не давали. Використання "блискучого".
Роджер

30

Інші відповіді на це питання не такі гарні, оскільки float:rightможуть вийти за межі батьківського діва (переповнення: приховано для батьків, іноді може допомогти), і margin-left: auto, margin-right: 0для мене не працювали в складних вкладених дівах (я не досліджував, чому).

Я зрозумів, що для певних елементів text-align: rightпрацює, припускаючи, що це працює, коли елемент і батьків є inlineабо inline-block.

Примітка: text-alignвластивість CSS описує вирівнювання вбудованого вмісту, як текст, у своєму батьківському блоковому елементі. text-alignне контролює вирівнювання самих блокових елементів, лише їх вбудований вміст.

Приклад:

<div style="display: block; width: 80%; min-width: 400px; background-color: #caa;">
    <div style="display: block; width: 100%">
        I'm parent
    </div>
    <div style="display: inline-block; text-align: right; width: 100%">
        Caption for parent
    </div>
</div>

Ось JS Fiddle .



15

Якщо у вас є кілька дівок, які ви хочете вирівняти поруч у правому кінці батьківського діла, встановіть text-align: right;на батьківський діл.


15

Ви можете використовувати flexboxз flex-growпідштовхнути останній елемент вправо.

<div style="display: flex;">
  <div style="flex-grow: 1;">Left</div>
  <div>Right</div>
</div>

1
Я особисто вважаю, що це правильна відповідь на 2020 рік: Р
Майк Келлогг

2

Якщо вам не потрібно підтримувати IE9 і нижче, ви можете використовувати flexbox для вирішення цього питання: codepen

Також є кілька помилок з IE10 та 11 ( підтримка flexbox ), але їх у цьому прикладі немає

Ви можете вертикально вирівняти <button>і <form>, загорнувши їх у контейнер flex-direction: column. Порядок джерел елементів буде тим, у якому вони відображаються зверху вниз, тому я їх упорядкував.

Потім можна горизонтально вирівняти контейнер форми та кнопки з полотном, загорнувши їх у контейнер flex-direction: row . Знову вихідним порядком елементів буде той порядок, у якому вони відображаються зліва направо, щоб я їх упорядкував.

Також для цього потрібно буде видалити всі правила positionта floatправила стилю з коду, пов’язаного у питанні.

Ось обрізана версія HTML у зв'язаному вище кодексі.

<div id="mainContainer">
  <div>
    <canvas></canvas>
  </div>
  <div id="formContainer">
    <div id="addEventForm"> 
      <form></form>
    </div>
    <div id="button">
      <button></button>
    </div>
  </div>
</div>

І ось відповідна CSS

#mainContainer {
  display: flex;
  flex-direction: row;
} 

#formContainer {
  display: flex;
  flex-direction: column;
}

1

Тут є проста відповідь:

<div style="text-align: right;">
    anything:
    <select id="locality-dropdown" name="locality" class="cls" style="width: 200px; height: 28px; overflow:auto;">
    </select>
</div>

0

Ви можете просто використовувати padding-left: 60% (для колишнього), щоб вирівняти вміст праворуч і одночасно обернути вміст у чуйному контейнері (мені потрібен навигація в моєму випадку), щоб переконатися, що він працює у всіх прикладах.



-13

Я знаю, що це стара публікація, але ви не могли просто її використовувати <div id=xyz align="right"> правильно.

Ви можете просто замінити праворуч лівим, по центру та виправдати.

Працював на моєму сайті :)


21
Будь ласка, не використовуйте атрибути HTML для форматування вашої сторінки. Саме для цього був створений CSS. Насправді alignатрибут тепер застарілий .
Ганна

4
... а отже, причина такого питання і необхідність відповіді на нього, оскільки старі методи вже не працюють.
vapcguy

огоох, стільки негативу))
Нессі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.