Yüzen elemanları nasıl ortalarım?


356

Sayfalandırmayı uyguluyorum ve ortalanması gerekiyor. Sorun, bağlantıların blok olarak görüntülenmesi, bu yüzden kayan olması gerektiğidir. Ama sonra, text-align: center;onlar üzerinde çalışmaz. Ben sol sarmalayıcı div dolgu vererek bunu başardı, ama her sayfa farklı sayıda sayfa olacak, bu yüzden işe yaramaz. İşte benim kod:

.pagination {
  text-align: center;
}
.pagination a {
  display: block;
  width: 30px;
  height: 30px;
  float: left;
  margin-left: 3px;
  background: url(/images/structure/pagination-button.png);
}
.pagination a.last {
  width: 90px;
  background: url(/images/structure/pagination-button-last.png);
}
.pagination a.first {
  width: 60px;
  background: url(/images/structure/pagination-button-first.png);
}
<div class='pagination'>
  <a class='first' href='#'>First</a>
  <a href='#'>1</a>
  <a href='#'>2</a>
  <a href='#'>3</a>
  <a class='last' href='#'>Last</a>
</div>
<!-- end: .pagination -->

Fikir almak için ne istiyorum:

alternatif metin


Şamandıra özelliğinin tüm amacı, bir elemanı kabının sol veya sağ tarafı boyunca konumlandırmaktır.
Rob

3
@Rob: Şey, sadece blok elemanlarında yapılabilecek bağlantı elemanları için genişlik ve yükseklik tanımlamam gerekiyordu, ancak bağlantıları bloke ettiğinizde, her biri yeni bir çizgiye yayıldılar, bu yüzden onları yüzen yaptım.
Mike

Satır içi bloğu kullanmak istemiyorsanız / kullanamadığınızda alternatif çözüm. stackoverflow.com/questions/1232096/…
hakunin

1
Bu sorunun şu anki başlığı ve cevapları yanıltıcı olduğu için moderatörün dikkatini hak ettiğine inanıyorum. Soru, merkezde kayan içerik değil, içeriği ortalamakla ilgilidir. Yüzen, yüzen olmayan kardeş içeriğinin kalan boşlukları doldurması gerektiği anlamına gelir ve bu açıkça ne istenir ne de elde edilir.
tao

8
@AndreiGheorghiu düşünüyorsanız, mods için işaretlemek yerine bir düzenleme önerin. Herkes bu soruları düzenleyebilir, bu nedenle soruyu düzenleyin ve düzenleme nedenine ayrıntılı bir açıklama yazın. Bu, herhangi bir kullanıcının yapabileceği bir şeydir, moderatör olması gerekmez. Soruda veya moderatör müdahalesi gerektiren herhangi bir cevapta yanlış bir şey yok
Zoe

Yanıtlar:


407

Leri kaldırmak floatve kullanmak inline-blocksorunlarınızı çözebilir:

 .pagination a {
-    display: block;
+    display: inline-block;
     width: 30px;
     height: 30px;
-    float: left;
     margin-left: 3px;
     background: url(/images/structure/pagination-button.png);
 }

(ile başlayan satırları kaldırın ve ile başlayan satırları -ekleyin +.)

inline-block öğe orijinal olarak satır içi bir öğe olduğu sürece IE6'da bile çapraz tarayıcıda çalışır.

Quirksmode'dan alıntı :

Satır içi bir blok satır içine yerleştirilir (yani bitişik içerikle aynı satıra), ancak bir blok gibi davranır.

bu genellikle şamandıraların yerini alabilir:

Bu değerin gerçek kullanımı, satır içi öğeye genişlik vermek istediğiniz zamandır. Bazı durumlarda bazı tarayıcılar gerçek bir satır içi öğede genişliğe izin vermez, ancak görüntülemeye geçerseniz: satır içi blok bir genişlik ayarlamanıza izin verilir. ” ( http://www.quirksmode.org/css/display.html#inlineblock ).

Gönderen W3C spec :

[satır içi blok] bir öğenin satır içi seviye blok kabı oluşturmasına neden olur. Satır içi bir bloğun içi bir blok kutusu olarak biçimlendirilir ve elemanın kendisi atomik bir satır içi seviye kutusu olarak biçimlendirilir.


10
İpucu: Dikey hizalamayı unutmayın.
Synexis

5
Evet, bu dikey hizalamanın gerçekte beklediğiniz şeyi yaptığı birkaç durumdan biri.
Mike Turley

4
Bu yöntemin dezavantajı, elemanlar arasında boşluk görünebileceğinden yatay aralığı kontrol etmenin zor olmasıdır.
Xavier Poinas

@XavierPoinas: yazı tipi boyutunu kullanın: 0; bu sorunu çözmek için ebeveyn üzerinde
roelleor

Ancak "font-size: 0" ifadesinin Android cihazlarda çalışmadığını unutmayın. Bunun son sürümler için hala geçerli olup olmadığından emin değilim.
Andreas Baumgart

150

Uzun yıllar boyunca bazı bloglarda öğrendiğim eski bir numara kullanıyorum, üzgünüm ona kredi vermek için adını hatırlamıyorum.

Yine de kayan elemanları ortalamak için bu işe yaramalıdır:

Bunun gibi bir yapıya ihtiyacınız var:

    .main-container {
      float: left;
      position: relative;
      left: 50%;
    }
    .fixer-container {
      float: left;
      position: relative;
      left: -50%;
    }
<div class="main-container">
  <div class="fixer-container">
    <ul class="list-of-floating-elements">

      <li class="floated">Floated element</li>
      <li class="floated">Floated element</li>
      <li class="floated">Floated element</li>

    </ul>
  </div>
</div>

hile, konteynerin içeriğe bağlı olarak genişliği değiştirmesini sağlamak için kayan nokta bırakıyor. Bundan daha fazla bir konum söz konusudur: göreli ve iki kapta% 50 ve% -50 sol.

İyi olan şey, bu çapraz tarayıcı ve IE7 + 'dan çalışması gerektiğidir.


1
Sadece 1 tekli şamandıra elemanı varsa bunun işe yaradığını hatırlatmak.
Wtower

Buradaki sorun, dış div ekranın dışına taştığından yatay bir kaydırma çubuğunun görünmesidir. Ayrıca liste başka bir satıra sarıldığında her şey sola hizalanır.
cleversprocket

Bu, kabın maksimum genişliğini ayarlamadan fark margin: 0 auto;yaratmaz, bu durumda daha iyi bir iş yapar
Murhaf Sousli

1
Benim float: left;için gerekli değildi .main-containerve .fixer-container.
csum

@cleversprocket Yatay kaydırmayı her şeyi tek bir div ile overflow: hidden;
sararak çözdüm

36

Şamandıraların merkezlenmesi kolaydır . Konteyner için stili kullanın:

.pagination{ display: table; margin: 0 auto; }

kayan elemanların kenar boşluğunu değiştirin:

.pagination a{ margin: 0 2px; }

veya

.pagination a{ margin-left: 3px; }
.pagination a.first{ margin-left: 0; } 

ve gerisini olduğu gibi bırakın.

Menüler veya sayfalandırma gibi şeyleri göstermek benim için en iyi çözüm.

Güçlü:

  • herhangi bir öğe için çapraz tarayıcı (bloklar, liste öğeleri vb.)

  • basitlik

Zayıf yönleri:

  • yalnızca tüm kayan elemanlar bir satırdayken çalışır (genellikle menüler için uygundur, ancak galeriler için uygun değildir).

@ arnaud576875 Sayfa içi blok öğelerini kullanmak , sayfalandırma yalnızca bağlantı (satır içi) içerdiğinden, liste öğeleri veya div içermediğinden bu durumda harika (çapraz tarayıcı) çalışır:

Güçlü:

  • çok satırlı öğeler için çalışır.

Weknesses:

  • satır içi blok elemanları arasındaki boşluklar - kelimeler arasındaki boşlukla aynı şekilde çalışır. Kabın genişliğini ve şekillendirme kenar boşluklarını hesaplarken bazı sorunlara neden olabilir. Boşluk genişliği sabit değil, tarayıcıya özel (4-5 piksel). Bu boşluklardan kurtulmak için arnaud576875 koduna ekleyeceğim (tam olarak test edilmedi):

    .pagination {kelime aralığı: -1em; }

    . sayfalama a {word-spacing: .1em; }

  • IE6 / 7'de blok ve liste öğeleri öğelerinde çalışmaz


display: table trick inanılmaz sadece sadece birkaç satır ile gerektiği gibi her şeyi yaptı. Bunu hatırlamam gerek. Şerefe
kilop

Satır içi blok tekniği son derece iyi çalışıyor. Neyse ki, kullandığım öğeler (iç içe div öğeleri) bu boşluğu iyi ele alabilir.
karolus

Yazı tipi boyutunu sıfıra düşürüp alt öğelerdeki önceki değerinize geri yükleyerek satır içi blok boşluklarını da kaldırabilirsiniz
Mike Causer

15

Konteynerinizi widthyerleştirin pxve ekleyin:

margin: 0 auto;

Referans .


1
benim için en iyi cevap bu: P.
alansiqueira27

3
Bu yalnızca kap genişliği uygun olduğunda çalışır, bu da kayan elemanlar içerdiğinde sorun olur.
Wtower

11

Flex'i kullanma

.pagination {
  text-align: center;
  display:flex;
  justify-content:center;
}
.pagination a {
  display: block;
  width: 30px;
  height: 30px;
  float: left;
  margin-left: 3px;
  background: url(/images/structure/pagination-button.png);
}
.pagination a.last {
  width: 90px;
  background: url(/images/structure/pagination-button-last.png);
}
.pagination a.first {
  width: 60px;
  background: url(/images/structure/pagination-button-first.png);
}
<div class='pagination'>
  <a class='first' href='#'>First</a>
  <a href='#'>1</a>
  <a href='#'>2</a>
  <a href='#'>3</a>
  <a class='last' href='#'>Last</a>
</div>
<!-- end: .pagination -->


5

Bence bunun marginyerine en iyi yol kullanmak display.

yani:

.pagination a {
    margin-left: auto;
    margin-right: auto;
    width: 30px;
    height: 30px;    
    background: url(/images/structure/pagination-button.png);
}

Sonucu ve kodu kontrol edin:

http://cssdeck.com/labs/d9d6ydif


1
Sadece kenar boşluğu ile çalışır: auto; yerine bireysel sol ve sağ özellikleri.
cellepo



1

Bunu stilinize ekleyin

position:relative;
float: left;
left: calc(50% - *half your container length here);

* Konteynır genişliğiniz 50px ise 25px, 10em ise 5em koyun.


1

Bunu, .pagination"metin hizalama: merkez" i sola, dönüştürmeye ve koşullara bağlı olarak konum için iki ila üç css satırı ile değiştirerek de yapabilirsiniz .

.pagination {
  left: 50%; /* left-align your element to center */
  transform: translateX(-50%); /* offset left by half the width of your element */
  position: absolute; /* use or dont' use depending on element parent */
}
.pagination a {
  display: block;
  width: 30px;
  height: 30px;
  float: left;
  margin-left: 3px;
  background: url(/images/structure/pagination-button.png);
}
.pagination a.last {
  width: 90px;
  background: url(/images/structure/pagination-button-last.png);
}
.pagination a.first {
  width: 60px;
  background: url(/images/structure/pagination-button-first.png);
}
<div class='pagination'>
  <a class='first' href='#'>First</a>
  <a href='#'>1</a>
  <a href='#'>2</a>
  <a href='#'>3</a>
  <a class='last' href='#'>Last</a>
</div>
<!-- end: .pagination -->


0
<!DOCTYPE html>
<html>
<head>
    <title>float object center</title>
    <style type="text/css">
#warp{
    width:500px;
    margin:auto;
}
.ser{
width: 200px;
background-color: #ffffff;
display: block;
float: left;
margin-right: 50px;
}
.inim{
    width: 120px;
    margin-left: 40px;
}

    </style>
</head>
<body>



<div id="warp">
            <div class="ser">
              <img class="inim" src="http://123greetingsquotes.com/wp-content/uploads/2015/01/republic-day-parade-india-images-120x120.jpg">

              </div>
           <div class="ser">
             <img class="inim" sr`enter code here`c="http://123greetingsquotes.com/wp-content/uploads/2015/01/republic-day-parade-india-images-120x120.jpg">

             </div>
        </div>

</body>
</html>

Aşama 1

İstediğiniz iki veya daha fazla div oluşturun ve her biri için 100 piksel gibi belirli bir genişlik sağlayın, ardından sola veya sağa kaydırın

Adım 2

daha sonra bu iki div'i başka bir div'de bükün ve 200px genişlik verin. bu div kenar boşluğu auto uygulayın. Boom oldukça iyi çalışıyor. yukarıdaki örneği inceleyin.


-1

Sadece ekliyorum

left:15%; 

benim css menüme

#menu li {
float: left;
position:relative;
left: 15%;
list-style:none;
}

merkezleme hile yaptı mı


4
% 15 basit bir keyfidir.
Wtower
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.