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.