sabit bir konum div hizalama


127

Sayfamda ortaya position:fixedhizalanmış bir div almaya çalışıyorum .

Bu "hack" i kullanarak bunu her zaman kesinlikle konumlandırılmış div'lerle yapabildim

left: 50%; width: 400px; margin-left:-200px

... burada margin-left değeri, div genişliğinin yarısı kadardır.

Bu, sabit konumlu div'ler için işe yaramıyor gibi görünüyor, bunun yerine onları yalnızca en sol köşeleri% 50'de olacak şekilde yerleştiriyor ve marj-sol bildirimini yok sayıyor.

Sabit konumlandırılmış öğeleri ortalamak için bunu nasıl düzelteceğime dair herhangi bir fikriniz var mı?

Ve kesinlikle konumlandırılmış öğeleri ortalamak için yukarıda bahsettiğim yöntemden daha iyi bir yol söylerseniz bonus bir M&M vereceğim.


Benim için çalışıyor. IE6 hariç hepsinde (tabii ki).
bobince

@Kyle bir cevap seçerseniz, diğer kullanıcıların sorununuz için çözümü belirlemelerine yardımcı olur.
andreihondrari

Yanıtlar:


202

Koen'in cevabı tam olarak unsuru merkezlemez.

Doğru yol CCS3 transformmülkü kullanmaktır . O oluyor rağmen bazı eski tarayıcılarda desteklenmez . Ve sabit veya akraba ayarlamamıza bile gerek yok width.

.centered {
    position: fixed;
    left: 50%;
    transform: translate(-50%, 0);
}

Burada jsfiddle karşılaştırması çalışıyor .


1
mükemmel. Bunu bir cordova uygulaması için kullandım ve büyük güncellenmiş tarayıcılarda çalışması bekleniyor :)
saurabh

2
Çok basit ama tamamen kullanışlı. Teşekkür ederim.
Gilberto Sánchez

Vay - teşekkürler! Metni iki düzensiz div arasında ortalamaya çalışıyorum ve bu, işaretlemeyi bozmadan çalışan tek şey!
Andrey Kaipov

4
Gerçek cevap +1
sn3ll

3
@Alex left: 50%, div'i sayfanın% 50'sine taşır. Ancak div'in sol tarafından başlayarak onu hareket ettirdiğini aklınızda bulundurmalısınız, dolayısıyla div henüz ortalanmamıştır. translate(-50%, 0)temelde translateX(-50%)div'in mevcut genişliğini dikkate alır ve genişliğinin% -50'si kadar gerçek yerden sol tarafa taşır.
emil.c

168

Aynı sorunu yaşayanlar için, ancak duyarlı bir tasarıma sahip olanlar için şunları da kullanabilirsiniz:

width: 75%;
position: fixed;
left: 50%;
margin-left: -37.5%;

Bunu yapmak div, duyarlı bir tasarımla bile sabitlemenizi her zaman ekranın merkezinde tutacaktır .


2
Bu bana bir DWT projesinde yardımcı oldu :)
tctc91

6
bu% 37,5'i nereden geliyor?
aurora

7
@aurora - konum ayarının -(75/2)
-1/2'si

1
Neden bu kabul edilen cevap bir gizem değil, işe yarıyor (tm)
CGK

2
Cropis'in daha iyi bir çözümü var
Arnaldo Capo

44

Bunun için flexbox'ı da kullanabilirsiniz.

.wrapper {
  position: fixed;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
  
  /* this is what centers your element in the fixed wrapper*/
  display: flex;
  flex-flow: column nowrap;
  justify-content: center; /* aligns on vertical for column */
  align-items: center; /* aligns on horizontal for column */
  
  /* just for styling to see the limits */
  border: 2px dashed red;
  box-sizing: border-box;
}

.element {
  width: 200px;
  height: 80px;

  /* Just for styling */
  background-color: lightyellow;
  border: 2px dashed purple;
}
<div class="wrapper"> <!-- Fixed element that spans the viewport -->
  <div class="element">Your element</div> <!-- your actual centered element -->
</div>


12
neden center ve align = "center" den bahsetmeye zahmet etmelisiniz? metin hizalama: yol
merkezdir

1
Örneğinize metin hizalama stilini eklemelisiniz.
Manatax

Çok teşekkür ederim! Bu bana gerçekten yardımcı oldu!
Joan.bdm

Cevabımı <center>, kullanımdan kaldırılan sözü kaldırarak ve display: flexve bazı ilişkili özellikler gibi modern bir teknik kullanarak değiştirdim .
andreihondrari

33

Yukarıdaki gönderiden en iyi yolun

  1. İle sabit bir div var width: 100%
  2. Div içinde, yeni bir statik div yapmak margin-left: autove margin-right: autoveya masa marka ne için align="center".
  3. Tadaaaah, şimdi sabit div'inizi ortaladınız

Umarım bu yardımcı olur.


2
Sabit genişliğe sahip bir div'i de ortalamanız gerekiyorsa +1 çok kullanışlıdır. Örneğin 990px.
dcernahoschi

max-widthSabit konumlu elemanlara izin vermenin bildiğim tek yolu da budur . max-width: 1200pxWeb sayfanızın % 30'unu duyarlı bir şekilde alan sabit bir kenar çubuğu mu istiyorsunuz ? Bu sizi oraya götürür.
Michael

7

Normal div'ler margin-left: autove kullanmalıdır margin-right: auto, ancak bu sabit div'ler için çalışmaz. Bunun etrafındaki yol Andrew'un cevabına benzer , ancak kullanımdan kaldırılan <center>şeyi kullanmaz . Temel olarak, sabit div'e bir sarmalayıcı verin.

#wrapper {
    width: 100%;
    position: fixed;
    background: gray;
}
#fixed_div {
    margin-left: auto;
    margin-right: auto;
    position: relative;
    width: 100px;
    height: 30px;
    text-align: center;
    background: lightgreen;
}
<div id="wrapper">
    <div id="fixed_div"></div>
</div

Bu, div'in tarayıcıyla tepki vermesine izin verirken bir div içindeki sabit bir div'i ortalayacaktır. ör. yeterli alan varsa div ortalanır, ancak yoksa tarayıcının kenarı ile çarpışır; normal merkezli bir div'in nasıl tepki verdiğine benzer.


4

Sabit bir konumu div hem dikey hem de yatay olarak ortalamak istiyorsanız, bunu kullanın

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

4
<div class="container-div">
  <div class="center-div">

  </div>
</div>

.container-div {position:fixed; left: 0; bottom: 0; width: 100%; margin: 0;}
.center-div {width: 200px; margin: 0 auto;}

Bu aynı şeyi yapmalı.


3

Genişliğin 400px olduğunu biliyorsanız, bunu yapmanın en kolay yolu sanırım.

 left: calc(50% - 200px);

2

Bu, öğenin başka bir gezinme çubuğu gibi sayfaya yayılmasını istiyorsanız çalışır.

genişlik: hesap (genişlik:% 100 - ortalamanın dışında kalan her şey genişlik)

Örneğin, yan gezinme çubuğunuz 200 piksel ise:

genişlik: hesap (% 100 - 200 piksel);


1

Genişliği kullanmak oldukça kolaydır:% 70; Sol:% 15;

Öğe genişliğini pencerenin% 70'ine ayarlar ve her iki tarafta% 15 bırakır


1

Twitter Bootstrap (v3) ile aşağıdakileri kullandım

<footer id="colophon" style="position: fixed; bottom: 0px; width: 100%;">
    <div class="container">
        <p>Stuff - rows - cols etc</p>
    </div>
</footer>

Yani sabit konumda olan tam genişlikte bir eleman yapın ve içine bir kabı itin, kap tam genişliğe göre ortalanır. Çok duyarlı davranmalı.


0

Flex box kullanan bir çözüm; tamamen duyarlı:

parent_div {
    position: fixed;
    width: 100%;
    display: flex;
    justify-content: center;
}

child_div {
    /* whatever you want */
}

-1

sarıcı yöntemini kullanmak istemiyorsanız. o zaman bunu yapabilirsiniz:

.fixed_center_div {
  position: fixed;
  width: 200px;
  height: 200px;
  left: 50%;
  top: 50%;
  margin-left: -100px; /* 50% of width */
  margin-top: -100px; /* 50% of height */
}
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.