Як вирівняти абсолютно позиціонований елемент по центру?


103

Я намагаюся скласти два полотна разом і зробити це подвійним шаром полотна.

Я бачив тут приклад:

<div style="position: relative;">
 <canvas id="layer1" width="100" height="100" 
   style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
 <canvas id="layer2" width="100" height="100" 
   style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
</div>

Але я хотів би встановити вирівнювання полотна в центрі екрана. Якщо я встановлюю значення leftяк константу, коли я змінюю орієнтацію екрана (як я роблю aps на iPad), полотно не залишатиметься посередині екрана, як те, як воно діє

<div align="center">

Хто-небудь може допомогти, будь ласка?

Відповіді:


222

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

position:absolute;
left:0;
right:0;
margin-left:auto;
margin-right:auto;

Вам також не потрібно надавати елементу ширину?
Габріель Флоріт

1
Я вважаю, що в цьому випадку це не потрібно.
Ендрю

Щойно спробував це, і це працює, це слід позначити як правильну відповідь
R Reveley

Ви можете використовувати зміну лівого або правого значення для переміщення об’єкта з центру, зафіксованого. Використання left: 80px;перемістить об’єкт на 40 пікселів (!) Праворуч від центру.
SPRBRN

4
Примітка: Працює, лише якщо стильовий елемент має задану ширину. (або px, або%)
Джонні Вонг,

94

Якщо ви хочете вирівняти елемент по центру, не знаючи його ширини та висоти, зробіть:

position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);

Приклад:

*{
  margin:0;
  padding:0;
}
section{
  background:red;
  height: 100vh;
  width: 100vw;
}
div{  
  width: 80vw;
  height: 80vh;
  background: white;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
<section>
  <div>
    <h1>Popup</h1>
  </div>
</section>


16

Ви пробували використовувати ?:

left:50%;
top:50%;
margin-left:-[half the width] /* As pointed out on the comments by Chetan Sastry */

Не впевнений, що це спрацює, але варто спробувати ...

Незначне редагування : Додано частину поля зліва, як зазначено у коментарях Четана ...


Я спробував це, але полотно "починається" з середини, але не "розміщується" посередині екрана. Чи потрібно все-таки встановити ліворуч: 50% і знову перемістити полотно вліво?
PaulLing

2
@PaulLingmargin-left: <negative half the width>
Chetan S

Що сказав Четан .. побив мене: P Я відредагую свою відповідь для майбутніх поколінь ...
Deleteman

Ширина екрану відрізняється, коли iPad розміщується в іншій орієнтації
PaulLing,

Він мав на увазі половину ширини вашого елемента полотна ..., що зробить його полем ліворуч: -50px;
Deleteman


9

спробуйте цей метод, працюючи добре для мене

position: absolute;
left: 50%;
transform: translateX(-50%); 

7

Все, що вам потрібно зробити, це,

переконайтесь, що ваш батьківський DIV має позицію: відносна

а елемент, який ви хочете відцентрувати, встановіть йому висоту та ширину. використовуйте наступний CSS

.layer {
    width: 600px; height: 500px;
    display: block;
    position:absolute;
    top:0;
    left: 0;
    right:0;
    bottom: 0;
    margin:auto;
  }
http://jsbin.com/aXEZUgEJ/1/

2
Єдине рішення, яке працює для мене. Батько налаштований на гнучкість, гнучкість росту та переповнення. Дитину розміщували поза рамкою для зображень, більших за батьківські. Здається, він не знав про ширину батьків. Зараз це виправлено. ВЕЛИКЕ спасибі!
Кай

0

Перемістіть батьківський div до середини за допомогою

left: 50%;
top: 50%;
margin-left: -50px;

Перемістіть другий шар над іншим за допомогою

position: relative;
left: -100px;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.