Як правильно вирівняти елементи 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.