CSS: центральний елемент в елементі <div>


178

Для центру HTML-елемента я можу використовувати CSS left: 50%;. Однак це центрує елемент відносно всього вікна.

У мене є елемент, який є дочірньою частиною <div>елемента, і я хочу зосередити дитину стосовно цього батька <div>, а не всього вікна.

Я не хочу, щоб у контейнері <div>був зосереджений весь вміст, лише одна конкретна дитина.

Відповіді:


264

Встановіть text-align:center;на батьківський дів та margin:auto;на дочірнє відділення.

#parent {
    text-align:center;
    background-color:blue;
    height:400px;
    width:600px;
}
.block {
    height:100px;
    width:200px;
    text-align:left;
}
.center {
    margin:auto;
    background-color:green;
}
.left {
    margin:auto auto auto 0;
    background-color:red;
}
.right {
    margin:auto 0 auto auto;
    background-color:yellow;
}
<div id="parent">
    <div id="child1" class="block center">
        a block to align center and with text aligned left
    </div>
    <div id="child2" class="block left">
        a block to align left and with text aligned left
    </div>
    <div id="child3" class="block right">
        a block to align right and with text aligned left
    </div>
</div>

Це гарний ресурс для центру в основному все, що завгодно.
http://howtocenterincss.com/


3
Хм ... Я не хочу, щоб весь батьківський дів був із центром тексту. Хоча це і вирішує проблему, воно створює інше!
Randomblue

3
Ви можете встановити вирівнювання тексту: зліва; до дочірнього елемента, щоб текст був правильно вирівняний.
pasine

Здається, @pasine text-alignне працює на <i>елемент. Даючи це клас робить ..
nclsvh

чи є спосіб зробити цей центр елементом як вертикально, так і горизонтально?
Gman Smith

@GmanSmith ви можете використовувати display: table-cellабо flexboxдля цього. Подивіться на додане я посилання.
пасінь

57

Насправді це дуже просто з гнучкими ящиками CSS3 .

.flex-container{
  display: -webkit-box;  /* OLD - iOS 6-, Safari 3.1-6, BB7 */
  display: -ms-flexbox;  /* TWEENER - IE 10 */
  display: -webkit-flex; /* NEW - Safari 6.1+. iOS 7.1+, BB10 */
  display: flex;         /* NEW, Spec - Firefox, Chrome, Opera */
  
  justify-content: center;
  align-items: center;
  
  width: 400px;
  height: 200px;
  background-color: #3498db;
}

.inner-element{
  width: 100px;
  height: 100px;
  background-color: #f1c40f;
}
<div class="flex-container">
  <div class="inner-element"></div>
</div>

ОНОВЛЕННЯ:

Схоже, я не читав редагування ОП під час написання цієї відповіді. Вищевказаний код буде зосереджений на всіх внутрішніх елементах (без перекриття між ними), але ОП бажає орієнтувати лише конкретний елемент , а не інші внутрішні елементи. Тож другий метод відповіді @Warface є більш доцільним, але він все ще потребує вертикального центрування:

.flex-container{
  position: relative;
  
  /* Other styling stuff */
  width: 400px;
  height: 200px;
  background-color: #3498db;
}

.inner-element{
  position: absolute;
  left: 50%;
  top: 50%;
  
  transform: translate(-50%,-50%);
  /* or 3d alternative if you will add animations (smoother transitions) */
  transform: translate3d(-50%,-50%,0);

  /* Other styling stuff */
  width: 100px;
  height: 100px;
  background-color: #f1c40f;
}
<div class="flex-container">
  <p>Other inner elements like this follows the normal flow.</p>
  <div class="inner-element"></div>
</div>


11

CSS

  body{
    text-align:center;
    }
    .divWrapper{
    width:960px //Change it the to width of the parent you want
    margin: 0 auto;
    text-align:left;
    }

HTML

<div class="divWrapper">Tada!!</div>

Це має зосереджувати дів

2016 - метод HTML5 + CSS3

CSS

div#relative{
  position:relative;
}

div#thisDiv{
  position:absolute;
  left:50%;
  transform: translateX(-50%);
  -webkit-transform: translateX(-50%);
}

HTML

<div id="relative">
  <div id="thisDiv">Bla bla bla</div>
</div>

Fiddledlidle

https://jsfiddle.net/1z7m83dx/


Але він також зосереджує все тіло, чи не так?
Randomblue

Ну те, що буде в divWrapper, буде зосереджено так, але ви можете поставити щось поза цим Div, і воно не буде зосереджене, якщо хочете.
Warface

Точна ширина (960 пікселів) не підходить для більшості сценаріїв.
QMaster

@QMaster Я знаю, що це повідомлення старе, я мушу оновити його з використанням HTML5
Warface

Тут є гарне пояснення: w3.org/Style/Examples/007/center.en.html
Purplejacket

5

text-align:center; на батьківському діві Слід зробити трюк


2
Це не текст , я хотів би, щоб вирівняти, це весь елемент (наприклад, кнопка).
Randomblue

1
якщо він знаходиться у діві, він повинен вирівняти центр, може бути трохи складніше для блокових елементів.
Кевін Боуерсокс

4

Для центрування лише конкретної дитини:

.parent {
  height: 100px;
  background-color: gray;
  position: relative;
}

.child {
  background-color: white;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  width: 20px;
  height:20px;
  margin: auto;

}
<div class="parent">
   <span class="child">hi</span>
</div>  

АБО ви також можете використовувати flex, але це б зосереджувало всіх дітей

.parent {
  height: 100px;
  background-color: gray;
  display: flex;
  justify-content: center;
  align-items: center;
}

.child {
  background-color: white;  
}
<div class="parent">
   <span class="child">hi</span>
</div>


4

Ви можете використовувати таке ім'я класу bootstrap flex:

<div class="d-flex justify-content-center">
    // the elements you want to center
</div>

Це буде працювати навіть з кількістю елементів всередині.


2

Чи є діва фіксованою шириною або шириною текучого середовища? У будь-якому випадку для ширини рідини ви можете використовувати:

#element { /* this is the child div */
margin-left:auto;
margin-right:auto;
/* Add remaining styling here */
}

Або ви можете встановити батьківський div text-align:center;і дочірній div на text-align:left;.

І left:50%;лише центрирує його відповідно до всієї сторінки, коли встановлено div position:absolute;. Якщо ви встановите діл для left:50%;нього, слід зробити це відносно ширини батьківського div. Для фіксованої ширини зробіть це:

#parent {
width:500px;
}

#child {
left:50%;
margin-left:-100px;
width:200px;
}


1

Якщо ви хочете використовувати CSS3:

position:absolute;
left:calc(50% - PutTheSizeOfTheHalfOfYourElementpx);

Ви можете скористатися додатковими пошуками, щоб зрозуміти, як отримати відсоток, що відповідає розміру елемента.


0

Перш за все, ви можете зробити це зліва: 50%, щоб розмістити його по відношенню до батьківського діла, але для цього вам потрібно навчитися позиціонуванню CSS.

Одне з можливих рішень багатьох - зробити щось подібне

    div.parent { text-align:center; }    //will center align every thing in this div as well as in the children element
    div.parent div { text-align:left;}   //to restore so every thing would start from left

якщо ваш фокусник розміщений порівняно, ви можете просто зробити

    .mydiv { position:relative; margin:0 auto; } 

Я не хочу, щоб цілий батьківський text-align:center;
дів

чому ти не хочеш? У будь-якому випадку ви можете використовувати другий підхід.
Ehtesham

0

ліворуч: 50% працює резективно до найближчого батька із заданою статичною шириною. Спробуйте ширину: 500 пікселів або щось на батьківському ділі. Крім того, зробіть потрібний вміст для центрального відображення: блокуйте та встановлюйте автоматичні ліві та ліві поля.


0

Якщо дочірній елемент є вбудованим (наприклад, не a div, tableі т. Д.), Я би загорнув його всередині a divабо a pі змусив текст обгортки вирівняти властивість css, рівну центру.

    <div id="container">
        This text is aligned to the left.<br>
        So is this text.<br>
        <div style="text-align: center">
            This <button>button</button> is centered.
        </div>
        This text is still aligned left.
    </div>

В іншому випадку, якщо елемент є блоком ( display: blockнаприклад, a divабо a p) з фіксованою шириною, я встановив би його властивості поля вліво та вправо css для автоматичного.

    <div id="container">
        This text is aligned to the left.<br>
        So is this text.<br>
        <div style="margin: 0 auto; width: 200px; background: red; color: white;">
            My parent is centered.
        </div>
        This text is still aligned left.
    </div>

Звичайно, ви можете додати text-align: centerдо елемента обгортки, щоб зробити його вміст по центру.

Я не буду перейматися позиціонуванням, тому що IMHO - це не спосіб вирішити проблему з ОП, але обов'язково перевірте це посилання , дуже корисно.


0

Створіть новий елемент діва для свого елемента в центрі, а потім додайте клас спеціально для центрування такого елемента, як цей

<div id="myNewElement">
    <div class="centered">
        <input type="button" value="My Centered Button"/>
    </div>
</div>

Css

.centered{
    text-align:center;
}

0

Я знайшов інше рішення

<style type="text/css">
    .container {
        width:600px; //set how much you want
        overflow: hidden; 
        position: relative;
     }
     .containerSecond{
        position: absolute; 
        top:0px; 
        left:-500%; 
        width:1100%;
     }
     .content{
        width: 800px; //your content size 
        margin:0 auto;
     }           
</style>

і в тілі

<div class="container">
   <div class="containerSecond">
       <div class="content"></div>
   </div>
</div>

Це дозволить відцентрувати вміст, коли ваш контейнер буде більшим чи меншим. У цьому випадку ваш вміст повинен бути більшим, ніж 1100% контейнера, щоб не бути його центром, але в такому випадку ви можете зробити з контейнераSecond більше, і він буде працювати



0

Наприклад, у мене є стаття Div, яка знаходиться всередині основного вмісту div. Всередині статті є зображення, а під цим зображенням кнопка, такий як:

.частка {

width: whatever;
text-align: center; 
float: whatever (in case you got more articles in a row); 
margin: give it whatever margin you want;

} .частка {

}

/ * всередині статті я хочу, щоб зображення було по центру * /

.частинка img {

float: none;
margin: 0 auto;
padding: give it a padded ridge if you want;

}

/ * Тепер під цим зображенням у цьому ж елементі статті має бути кнопка, як прочитати більше Звичайно, вам потрібно працювати з em або%, коли його всередині чуйний дизайн * /

. кнопка {

background: #whatever color:
padding: 4.3567%; /*Instead of fixed width*/
text-align: cente;
font: whatever;
max-width: 41.4166%;
float: none;
margin: 0 auto; /* You could make the zero into any margin you want on the top and bottom of this button.. Just notice the float: none property.. this wil solve most your issues, also check if maybe position and displaay might mess up your code..*/

}

Удачі


0

Якщо ви хочете централізувати елементи всередині div і не хвилюватися щодо розміру поділу, ви можете використовувати Flex power. Я вважаю за краще використовувати флекс і не використовувати точний розмір для елементів.

<div class="outer flex">
    <div class="inner">
        This is the inner Content
    </div>
</div>

Як ви бачите, зовнішній розділ є контейнером Flex, а Внутрішній повинен бути елементом Flex, який вказано, flex: 1 1 auto;щоб краще зрозуміти, що ви можете побачити цей простий зразок. http://jsfiddle.net/QMaster/hC223/

Сподіваюся, що це допоможе.


0

мій хотів би чарів.

html, body {
 height: 100%;
}

.flex-container{
  display: -ms-flexbox;
  display: -webkit-box;
  display: flex;
  -ms-flex-align: center;
  -ms-flex-pack: center;
  -webkit-box-align: center;
  align-items: center;
  -webkit-box-pack: center;
  justify-content: center;
}


<div class="flex-container">
  <div>Content</div>
</div>

0
<html>
<head>
</head>
<style>
  .out{
    width:200px;
    height:200px;
    background-color:yellow;
  }
   .in{
    width:100px;
    height:100px;
    background-color:green;
    margin-top:50%;
    margin-left:50%;
    transform:translate(-50%,50%);
  }
</style>
  <body>
     <div class="out">
     <div class="in">

     </div>
     </div> 
  </body>
</html>

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