CSS: <div> öğesindeki orta öğe


178

Bir HTML öğesini ortalamak için CSS'yi kullanabilirim left: 50%;. Ancak, bu eleman tüm pencereye göre ortalanır.

Bir elementin çocuğu olan bir <div>elementim var ve çocuğu <div>tüm pencereye değil, bu ebeveyne göre ortalamak istiyorum .

Ben konteyner istemiyorum <div>olması tüm içeriği merkezli, sadece bir spesifik çocuğu.

Yanıtlar:


264

Set text-align:center;üst div için ve margin:auto;çocuk div.

#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>

Bu çoğunlukla her şeyi ortalamak için iyi bir kaynaktır.
http://howtocenterincss.com/


3
Hum ... Tüm ana div'in metne ortalanmış olmasını istemiyorum. Bu sorunu çözse de, bir tane daha yaratır!
Randomblue

3
metin hizalamasını ayarlayabilirsiniz: sola; metnin doğru hizalanması için alt öğeye bağlayın.
pasine

@pasine text-alignbir <i>element üzerinde çalışmıyor gibi görünüyor . Bir sınıf vermek ..
nclsvh

bu merkezi elemanın hem yatay hem de dikey olmasını sağlamanın bir yolu var mı?
Gman Smith

@GmanSmith display: table-cellveya bunun flexboxiçin kullanabilirsiniz . Eklediğim bağlantıya bir göz atın.
pasine

57

Aslında bu CSS3 esnek kutular için çok basittir .

.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>

GÜNCELLEME:

Bu cevabı yazdığım sırada OP düzenlemesini okumadım gibi görünüyor. Yukarıdaki kod, tüm iç elemanları ortalar (aralarında üst üste binmeden), ancak OP diğer iç elemanların değil, sadece belirli bir elemanın ortalanmasını ister . Yani @Warface cevap ikinci yöntemi daha uygun, ancak yine de dikey merkezleme gerektiriyor:

.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>

Bu, div'ı ortalamalı

2016 - HTML5 + CSS3 yöntemi

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/


Ama aynı zamanda tüm bedeni ortalar, değil mi?
Randomblue

DivWrapper'da ne olacak evet merkezli olacak, ancak bu Div'in dışına bir şey koyabilirsiniz ve isterseniz ortalanmayacaktır.
Warface

Tam genişlik (960 piksel) çoğu senaryo için uygun değildir.
QMaster

@QMaster Bu yazının eski olduğunu biliyorum, HTML5 gücü ile güncellemeliyim
Warface

Burada iyi bir açıklama var: w3.org/Style/Examples/007/center.en.html
Purplejacket

5

text-align:center; ebeveyn div üzerinde hile yapmalı


2
Hizalamak istediğim metin değil, tüm unsur (örn. Bir düğme).
Randomblue

1
eğer div ise merkezi hizalamalıdır, blok elemanları için biraz daha zor olabilir.
Kevin Bowersox

4

Yalnızca belirli bir çocuğu ortalamak için:

.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>  

VEYA, flex'i de kullanabilirsiniz, ancak bu tüm çocukları ortalar

.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 sınıf adını şu şekilde kullanabilirsiniz:

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

Bu, içerideki eleman sayısıyla bile çalışacaktır.


2

Div sabit bir genişlik mi yoksa sıvı genişliği midir? Her iki durumda da, sıvı genişliği için şunları kullanabilirsiniz:

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

Veya üst div öğesini text-align:center;ve alt div öğesini ayarlayabilirsiniz text-align:left;.

Ve left:50%;yalnızca div olarak ayarlandığında tüm sayfaya göre ortalar position:absolute;. Div değerini left:50%;buna ayarladıysanız, üst div genişliğine göre yapmalıdır. Sabit genişlik için şunları yapın:

#parent {
width:500px;
}

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


1

CSS3 kullanmak istiyorsanız:

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

Yüzdeyi öğenizin genişliğine uyacak şekilde nasıl alacağınızı bulmak için daha fazla arama yapmak isteyebilirsiniz.


0

Her şeyden önce sol ile yapabilirsiniz:% 50'yi ana div'e göre ortalamak için ancak bunun için CSS konumlandırmayı öğrenmeniz gerekir.

Birçoğunun olası çözümlerinden biri,

    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

merkezlenecek bölgeniz nispeten konumlandırılmışsa,

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

Tüm ebeveyn div'in sahip olmasını istemiyorumtext-align:center;
Randomblue

neden istemiyorsun Her neyse, bu durumda ikinci yaklaşımı kullanabilirsiniz.
Ehtesham

0

sol:% 50, statik genişlik atanmış olarak en yakın ebeveyne doğru çalışır. Üst div'de 500 piksel veya başka bir şey deneyin. Alternatif olarak, görüntüyü ortalamak için ihtiyacınız olan içeriği yapın: sol ve sağ kenar boşluklarını otomatik olarak engelleyin ve ayarlayın.


0

Alt öğe satır içi ise (örneğin a div, tablevb. Değil ) onu a divveya a içine psararım ve sargının metnini css özelliğini hizalayın.

    <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>

Aksi takdirde, öğe sabit genişliğe sahip bir bloksa ( display: blockörneğin a divveya a p), kenar boşluğunu sol ve sağ css özelliklerini otomatik olarak ayarlardım.

    <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>

Elbette text-align: centeriçeriğini de ortalamak için sarıcı öğeye a ekleyebilirsiniz .

IMHO onun OP sorun için gitmek için yol değil ama çok yararlı bu bağlantıyı kontrol emin olun çünkü konumlandırma ile uğraşmak olmaz .


0

Öğenizin ortalanması için yeni bir div öğesi oluşturun, ardından bu öğeyi bunun gibi ortalamak için özel olarak bir sınıf ekleyin

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

css

.centered{
    text-align:center;
}

0

Başka bir çözüm buldum

<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>

ve vücutta

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

Bu, kapsayıcınız daha büyük veya daha küçük olduğunda içerik bölümünüzü ortalar. Bu durumda içeriğiniz, ortalanmaması için kabın% 1100'ünden büyük olmalıdır, ancak bu durumda containerSecond daha büyük olabilir ve işe yarayacaktır.


0

Ebeveyne text-align: center;ve display: inline-block;div öğesine atayın .


0

Örneğin, ben bir ana içerik div içinde bir makale div var .. Makalenin içinde bir görüntü var ve bu resmin altında bir düğme, böyle stil:

.makale {

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

} .makale {

}

/ * makalenin içinde görüntünün ortalanmasını istiyorum * /

.article img {

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

}

/ * Şimdi aynı makale öğesinde bu görüntünün altında daha fazla okumak gibi bir düğme olmalı Elbette duyarlı bir tasarım içinde em veya% ile çalışmanız gerekir * /

.buton {

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..*/

}

İyi şanslar


0

Elemanları div içinde ortalamak ve bölme boyutunu önemsemek istemiyorsanız Flex gücünü kullanabilirsiniz. Flex kullanmayı tercih ederim ve elemanlar için tam boyut kullanmam.

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

Gördüğünüz gibi Dış div Flex kapsayıcıdır ve flex: 1 1 auto;daha iyi anlamak için İç ile belirtilen Flex öğesi olmalıdır Bu basit örneği görebilirsiniz. http://jsfiddle.net/QMaster/hC223/

Umarım bu yardım.


0

benimki sihir istiyor.

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>

Kod her zaman iyidir, ancak bunun orijinal soruyu nasıl ele aldığı hakkında bazı yorumlar / bağlamlar eklemenize yardımcı olur.
craigcaulfield
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.