Pozisyon Göreceli - Mutlak mı?


155

CSS arasındaki position: relativeve position: absoluteCSS arasındaki fark nedir ? Ve hangisini ne zaman kullanmalısın?


2
Burada nasıl çalıştıklarına dair bazı ayrıntılı açıklamalar yaptım
Bay Alien

w3schools öğretici pozisyonda bunu güzel açıklıyor.
gnsb

1
Nispeten konumlandırılmış bir eleman normal konumuna göre konumlandırılır. Mutlak olarak konumlandırılmış eleman, mutlak veya göreli konumlandırmaya sahip ilk ana kaba göredir. Burada göreceli ve mutlak konumları ayrıntılı olarak açıklayan kolosek.com/css-position-relative-vs-position-absolute harika bir makale var .
Nesha Zoric

Yanıtlar:


160

Mutlak CSS Konumlandırma

position: absolute;

Mutlak konumlandırma, anlaşılması en kolay olanıdır. CSS positionözelliğiyle başlıyorsunuz :

position: absolute;

Bu, tarayıcıya, yerleştirilecek her şeyin belgenin normal akışından kaldırılması ve sayfada tam bir konuma yerleştirilmesi gerektiğini bildirir. HTML'de önündeki veya sonrasındaki öğelerin Web sayfasında nasıl konumlandığını etkilemez, ancak siz geçersiz kılmadıkça ebeveynlerinin konumlandırmasına tabi olacaktır .

Eğer 10 piksel belge penceresinin üst kısmından unsurunu konumlandırmak istiyorsanız şunları kullanırsınız topofset positionorada o absolutekonumlandırma:

position: absolute;
top: 10px;

Bu öğe, daha sonra 10px, içeriğin öğeden, altından veya üstünden (görsel olarak) ne olursa olsun sayfanın üst tarafından her zaman görüntülenecektir .

Dört konumlandırma özelliği:

  1. top
  2. right
  3. bottom
  4. left

Bunları kullanmak için, bunları ofset özellikleri olarak düşünmeniz gerekir. Başka bir deyişle, konumlandırılmış bir öğe right: 2pxsağa kaydırılmaz 2px. Sağ tarafı, pencerenin sağ tarafından (veya konumunu geçersiz kılan üst öğe) tarafından kaydırılır 2px. Aynı şey diğer üçü için de geçerlidir.

Bağıl Konumlandırma

position: relative;

Göreli konumlandırma, konumlandırma ile aynı dört konumlandırma özelliğini kullanır absolute. Ancak, öğenin konumunu tarayıcı görüntüleme bağlantı noktasına dayandırmak yerine, öğenin hala normal akıştaysa nerede olacağı ile başlar .

Örneğin, Web sayfanızda üç paragraf varsa ve üçüncüsünün üzerine bir position: relativestil yerleştirilmişse, konumu, görünüm bağlantı noktasının orijinal tarafından değil, geçerli konumuna göre dengelenir.

Paragraf 1.

2. paragraf.

Paragraf 3.

Yukarıdaki örnekte, üçüncü paragraf 3emkap öğesinin sol tarafından konumlandırılacak , ancak yine de ilk iki paragrafın altında olacaktır. Belgenin normal akışında kalır ve sadece biraz ofsetlenir. Bunu olarak değiştirirseniz, onu position: absolute;izleyen herhangi bir şey üstünde gösterilir, çünkü artık belgenin normal akışında olmaz.

Notlar:

  • Varsayılan widthkesinlikle yerleştirilmiş bir elemanın 's varsayılan, nispeten konumlandırılmış bir eleman farklı olarak, içindeki içeriğin genişliği widtholan 100%bu doldurabilir alanı.

  • Kesinlikle konumlandırılmış öğelerle çakışan öğelere sahip olabilirsiniz, ancak bunu nispeten konumlandırılmış öğelerle yapamazsınız (yerel olarak yani negatif kenar boşlukları / konumlandırma kullanmadan)


birçok kişi çekti: bu kaynak


159
Mutlak konumlandırma ile ilgili ifadeler yanıltıcıdır. Mutlak konumlandırmaya sahip öğeler, göreceli veya mutlak konumlandırmaya sahip ilk ana öğeye göre yerleştirilir. Bu, en dıştaki eleman (<html>) olabilir veya olmayabilir. Her şey, hangi öğelerin mutlak konumlandırılmış öğeyi içerdiğine bağlıdır. Bir diğer büyük fark, mutlak konumlandırılmış öğelerin normal belge akışından çıkarılması ve göreli konumlandırılmış öğelerin kaldırılmamasıdır. Yani üst üste üç <div> varsa ve ortadaki mutlak konumlandırmayı ayarladıysanız, üst ve alt <div> ler birlikte çöker.
d512

11
@ user1334007 çok haklısın, şu anda kendim için fazla asıldığım için yazımı düzenlemekten çekinmeyin.
Michael Zaporozhets

@ user1334007 evet bu yüzden yorumları ya da her neyse kabul edemem ama bu gece yükseltmeye çalıştığınız birkaç nokta uğruna kendim bazı düzenlemeler yapacağım. Her şeyi çok rahat bir şekilde açıklarım çünkü işleri çok 'ders kitabı' olmaktan alıkoyuyor ancak kabul ettiğim içerik mümkün olduğunca doğru olmalı.
Michael Zaporozhets

2
Bu cevap bu pozisyonu ifade edemez: mutlak; en yakın konumlandırılmış atasına göre konumlandırılmıştır
Sava Jcript

@AndreyMarushkevych cevaba bir düzenleme önermekten çekinmeyin.
Michael Zaporozhets

52

Hem “göreli” hem de “mutlak” konumlandırma, sadece farklı çerçeveyle, gerçekten görecelidir. “Mutlak” konumlandırma, başka bir kapalı elemanın konumuna göredir. “Göreceli” konumlandırma, elemanın konumlandırılmadan sahip olacağı konumla ilişkilidir.

Kullandığınız ihtiyaç ve hedeflerinize bağlıdır. “Göreli” konumu, bir öğeyi, aksi takdirde öğelerin üst simge konumunda görünmesi için öğelerin akışında olacağı konumdan değiştirmek istediğinizde uygundur. “Mutlak” konumlandırma, bir öğeyi başka bir eleman tarafından ayarlanan bazı koordinat sistemine yerleştirmek için uygundur, örneğin bir görüntüyü bazı metinlerle “üst baskı” yapmak için.

Özel olarak, position: relativebir elemanı referans çerçevesi yapmak için yer değiştirmeden (sadece ayar ) “göreli” konumlandırmayı kullanın , böylece içindeki elemanlar için (mutlak) konumlandırmayı (işaretlemede) kullanabilirsiniz.


Relative positioning is relative to the position that the element itself would have without positioning?? Konumlandırmasız eleman varsayılan olarak "statik" olur, ancak göreceli değildir
kittu

21

Dikkat edilmesi gereken başka bir şey, mutlak bir öğenin bir üst öğeyle sınırlanmasını istiyorsanız, üst öğenin konumunu göreli olarak ayarlamanız gerektiğidir. Bu, alt öğeyi üst öğe içinde tutar ve tüm pencereye "göreceli" olmaz.

Aşağıdaki etkiyi yaratan basit bir örnek veren bir blog yazısı yazdım :

resim açıklamasını buraya girin

Bu kesinlikle ana sarı div'in altına yerleştirilmiş yeşil bir div'a sahiptir.

1 http://blog.troygrosfield.com/2013/02/11/working-with-css-positions-creating-a-simple-progress-bar/


4
Ebeveynin 'statik değil' olması gerekir - böylece ebeveyn göreli, mutlak vb. Olabilir ... ebeveyn göreli kullanmanın avantajı, öğeyi doc'den kaldırmamasıdır.
Fernando

19

Göreli Pozisyon:

Position: relative belirtirseniz, öğeyi normalde belgede olacağı yere göre taşımak için üst veya alt, sol veya sağ tuşlarını kullanabilirsiniz.

Mutlak Konum:

Konum: mutlak belirttiğinizde, öğe belgeden kaldırılır ve tam olarak gitmesini söylediğiniz yere yerleştirilir.

Mutlak ve göreceli konumlandırma ile ilgili her iki konumun örnek kullanımı ile iyi bir öğretici http://www.barelyfitz.com/screencast/html-training/css/positioning/ öğreticidir .


12

Bağıl: Geçerli konumuna göre, ancak taşınabilir. Veya RELATIVE konumlandırılmış bir eleman ITSELF'e göre konumlandırılmıştır.

Mutlak: ABSOLUTE konumlandırılmış bir eleman IT'NİN EN YAKIN POZİSYONLU PARENTİNE göre konumlandırılmıştır. biri varsa, o zaman pencereye göre sabit ..... gibi çalışır.

<div style="position:relative"> <!--2nd parent div-->
    <div>   <!--1st parent div-->
        <div style="position:absolute;left:10px;....."> <!--Middle div-->
          Md. Arif
       </div>
    </div>
</div>

Burada 2. ebeveyn divpozisyonu görecelidir, böylece orta 2. ebeveyne göre pozisyonunu divdeğiştirir div. 1. ebeveyn divpozisyonu göreceli ise Orta div, 1. ebeveyne göre pozisyonunu değiştirir div. ayrıntılar


2

İtibarım yorum yapmak için yeterli olmadığından bir cevap koymak. Ama buna bir cevap olarak bakmayın, sadece ek bir bilgi, kendim gibi, hem altbilgi hem de konumlandırma ile ilgili bazı problemler vardı.

Sayfayı ayarlarken, altbilgim her zaman altta, mutlak konumla ve ana kap / sarmalayıcı göreli konumla kalacak şekilde.

Daha sonra metin içeriğimle ilgili bazı sorunlar buldum ve aynı içeriğin içindeki bir menü (sayfanın üstbilgi ve altbilgi arasında beyaz kısmı), bunları mutlak olarak ayarlarken altbilgi artık kalmıyor.

Postitioning, dediğin gibi karmaşık bir tema.

Web sayfamda 'mutlak' pozisyonda olmasını istediğim içeriğe çözümüm ve örneğin bir açılır menü açarken yan tarafa itilmemem, aslında ona göreli konum vermek ve aşağı açılır menemin altına 35em koymaktı. Menü. (35em, tamamen uzatıldığında açılır menümün yüksekliği)

Daha sonra, Üst: -35em, daha önce tarafa itilen içerik için. Ve sonra kenar boşluğu ekleyerek: -35em. Bu şekilde, içerik açılır menümün "altında", ancak görsel olarak açılır menümle yan yana! Ve altbilginin altındaki beyaz boşluk, bununla oynamaya başlamadan önce olduğu gibi sadece 10em marj ile. Bu yüzden benim çözümüm şöyleydi:

 html, body {
    margin:0;
    padding:0;
    height:100%;

}
h1 {
    margin:0;
}
    #webpage {
    position:relative;
    min-height:100%;
    margin:0;
    overflow:auto;
}
     #header {
    height:5em;
    width:100%;
    padding:0;
    margin:0;
}
     #text {
    position:relative;
   margin-bottom:-32em;
    padding-top:2em;
    padding-right:2em;
    padding-bottom:10em;
    background-repeat:no-repeat;
    width:70%;
    padding-left:auto;
    margin-left:auto;
    margin-right:auto;
    right:10em;
    float:right;
    top:-32em;
      }
#dropdown {

position:absolute;
    left:0;
    width:20%;
    clear:both;
    display:block;
    position:relative;
    top:1em;
    height:35em;

}
    #footer {
    position:absolute;
    width:100%;
    right:0;
    bottom:0;
    height:5em;
    margin:0;
     margin-top:5em;
}

Sorunuzun iyi yanıtlandığını görüyorum, ancak bir sürü sorundan sonra bunun çok iyi bir çözüm olduğunu ve konumlandırmanın nasıl çalıştığını daha iyi anlamanın bir yolu olduğunu gördüm .. Metin içeriğimi, açılır menümün altına yerleştirdiğimde, t Metnimi yana it. Metni mutlak konuma değiştirirsem, altbilgi yerinde kalmazdı. Bunun benden daha fazla insan için bir sorun olduğuna inanabileceğim için bunu buraya ekliyorum. Aslında olan şey, metni, 35em, açılan kutumun altına koyuyorum.

Sonra, göreceli pozisyon ve üst ile görsel olarak hemen yanına koydum: -35em; ve aşağıdaki büyük boşlukla akşam, -35em;

negatif pozisyonlar zaman zaman hafife alınır, çok iyi işlevsellik, bu pozisyonları daha iyi anladığında!

Doğal olarak, sabit konum, altbilgim için de mantıklı görünüyordu, ancak metin veya içerik görünüm penceresinden daha uzunsa altbilginin görünüm penceresinin altına gitmesini gerçekten istiyorum. Sayfada çok az içerik varsa, en altta kalmak için.

Bu kurulum çok güzel bir şekilde düzeltildi ve daha akıcı / dinamik bir sayfa düzeni için 'px' değil 'em' kullanmayı unutmayın! :)

(daha iyi çözümler olabilir, ancak bu benim için çapraz platformlar ve cihazlar için işe yarıyor).


2

Göreceli - Mutlak:

  • Fark: kendisine göre, en yakın konumlandırılmış ataya göre.
  • Fark: Etrafındaki diğer unsurlar eski varlığını onurlandırır, Etrafındaki diğer unsurlar eski varlığını onurlandırmaz.
  • Benzerlik: Etrafındaki diğer unsurlar yeni varlığını onurlandırmaz, Etrafındaki diğer unsurlar yeni varlığını onurlandırmaz.

1

Mutlak ve akraba arasındaki farkı açıklamak için bir senaryoyu tartışalım.

Gövde elemanının içinde, yüksekliği görüş açısının% 95'i yani 95vh olan bir başlık elemanınız olduğunu varsayalım. Bu kapsayıcıya bir görüntü yerleştirdiniz ve 0.5 sayma opaklığını azalttınız. Ve şimdi sol üst köşeye bir logo resmi yerleştirmek istiyorsunuz. Umarım senaryoyu anlarsın. Böylece başlık bölümünde belirtilen logo üzerinde üst kısmında bir logo bulunan daha açık bir resim elde edersiniz.

Ama buna başlamadan önce, kenar boşluğunu ve dolguyu 0'a ayarladım

*{
   margin:0px;
   padding:0px;
   box-sizing: border-box; 
}

Bu, varsayılan kenar boşluklarının olmamasını ve öğelere dolgu uygulanmamasını sağlar.

Böylece gereksiniminizi iki şekilde elde edebilirsiniz.

Birinci Yol

  • resme sınıfa bir ders veriyorsunuz.
  • css yazıyorsun

    .logo{ float:left; margin-top:40px; margin-left:40px; }

  • bu, logoyu başlık olan ek ebeveynin üstünden ve solundan 40 piksele yerleştirdi. Görüntü istendiği gibi yerleştirilmiş gibi görünecektir.

Ama arkadaşım bu, gereksiz yere çok fazla yer harcadığınız bir görüntüyü, gerekli olmadığında biraz kenar boşluğu vererek yerleştirmek için kötü bir tasarım. Tek ihtiyacınız olan görüntüyü o konuma yerleştirmektir. Etraftaki marjlarla yastıklayarak başardınız. Marj yer kapladı ve içeriğini tam olarak istediğiniz yere yerleştirdiği izlenimini vererek daha derinlere itti. Umarım sorunu bu şekilde çalışarak anlarsın. İstediğiniz yere yalnızca bir görüntü yerleştirmek için gerekenden daha fazla yer kaplıyorsunuz.

Şimdi farklı bir yaklaşım deneyelim.

İkinci Yol

  • logo sınıfındaki resim say başlık sınıfı ile başlık öğesinin içindedir. Böylece üst sınıf üstbilgidir ve alt sınıf önceki gibi logodur.
  • header sınıfının position özelliğini aşağıdaki gibi göreli olarak ayarlarsınız

    .header{ position: relative; }

  • logo sınıfına aşağıdaki özellikleri eklediniz

    .logo{ position:absolute; top:40px; left:40px }

İşte böyle. Görüntüyü tamamen aynı yere yerleştirdiniz. Birinci yaklaşım ve ikinci yaklaşım arasındaki çıplak gözle konumlandırmada belirgin bir fark olmayacaktır. Ancak, görüntü öğesini incelerseniz, fazladan yer kaplamadığını göreceksiniz. Kendi genişliği ve yüksekliği kadar alanı kaplar.

Peki bu nasıl mümkün olabilir? İmaj logosu sınıfına , bu sınıfın çocuğu olarak başlık sınıfına göre yerleştirileceğini ve özellikle göreceli olarak pozisyonundan bahsettiğimi söyledim . Böylece herhangi bir çocuğu sol üst köşesine göre yerleştirilir. Ve konumunuzun bu ana öğenin içinde sabitlenmesi gerekiyor. böylece mutlak. Ve yukarıdan ve soldan olmanı istediğim konuma biraz hareket etmeniz gerekiyor. Böylece değer olarak 40 piksel ile üst ve sol özellik verilir. Bu şekilde yalnızca ebeveyninize göre yerleştirilirsiniz. Yani yarın ebeveyninizi yukarı veya aşağı veya sadece herhangi bir yere taşırsam, her zaman ebeveyn başlığınızın sol üst köşesinin üstüne ve soluna 40 piksel olacaksınız. Böylece, ebeveyninizin pozisyonunun gelecekte sabit olup olmadığına bakılmaksızın (sizin gibi mutlak olmadığı için) pozisyonunuz ebeveyninizin içinde sabitlenir.

Bu nedenle ebeveyn ve çocuk için sırasıyla göreceli ve mutlak kullanın. İkinci olarak, alt öğeyi yalnızca üst öğesinin içindeki bir konuma yerleştirmek istediğinizde kullanın. Zorla itmek için kenar boşlukları gibi dolgu maddeleri kullanmayın. Üst göreceli değer ve taşımak istediğiniz alt öğeye mutlak değer verin. Üst sınıf içine istediğiniz yere yerleştirmek için üst, sol alt veya sağ özelliği alt sınıf olarak belirleyin.

Teşekkürler.


0

Marco Pellicciotta: Elemanın başka bir element içindeki pozisyonu, içerisindeki element hakkında göreceli veya mutlak olabilir.

Öğeyi tarayıcı penceresi bakış açısına yerleştirmeniz gerekiyorsa, konumu kullanmak en iyisidir: sabit

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.