CSS kullanarak bir elemanın ofsetinden nasıl kurtulurum?


88

Bazı öğelerle ilgili bir konumlandırma sorunum var, IE8 Geliştirici araçlarını inceledikten sonra bana şunu gösteriyor:

Ofset nereden geliyor?

Şimdi sorunumun bu 12 ofset olduğundan oldukça eminim, ama bunu nasıl kaldırırım ? CSS ofset özelliğinden bahsedildiğini bulamıyorum. Marjına ek olarak bir Offset'e ihtiyacımız var mı?

İşte bunu üreten kod:

 <div id="wahoo" style="border: solid 1px black; height:100px;">

    <asp:TextBox ID="inputBox" runat="server" />

    <input id="btnDropDown" type="button" style="width:26px; height:26px; background-position: center center; border-left-color: buttonface; background-image: url(Images/WebResource.gif); border-bottom-color: buttonface; border-top-color: buttonface; background-repeat: no-repeat; border-right-color: buttonface;"  tabindex="99" />

    <div id="ListboxWrapper" style="display:none; position:absolute; onfocusout="this.style.display = 'none'"">
       <asp:ListBox ID="lstBoxCompany" runat="server" AutoPostBack="True" OnSelectedIndexChanged="lstBoxCompany_SelectedIndexChanged" style="z-index: 100;" Width="300px" />               
    </div>

</div>

Uzaklığı olan öğe inputBox


Öğeniz konumlandırılmış mı? Kontrol leftve topözellikler.
jessegavin

6
Küçük bir kod burada çok yararlı olacaktır. CSS'de 'ofset' kuralı yoktur, ancak IE'nin rastgele yerlere rastgele piksel ekleme eğilimi vardır. Genellikle şamandıralar ve konumlandırma ile ilgilidir
Alex

'Ofset'in' diğer öğelerle ilişkili pikseller 'olduğunu varsayabilirim - örneğin, önceki bir öğenin bunu aşağı iten bir kenar boşluğu gibi. Şimdi öğrenmek için IE geliştirme araçlarını deneyecek vaktim yok.
Quentin

Kodu satır içi CSS ile tamamlayarak ekledim, böylece neler olduğunu görebiliriz
m.edmondson

Buna bakabileceğimiz bir web sayfası örneği var mı - örneğin kundakçıya işaret edip daha geniş sayfayı anlayabilmek için. Örneğin, girdi kontrolünüz başka bir css tanımından kenar boşluğu veya dolgusu mu alıyor?
Kris C

Yanıtlar:


43

Bu uzaklık, temel olarak tarayıcının, css özelliğine göre öğe için hesapladığı x, y konumudur. Öyleyse, <br>ondan veya başka bir elemanın önüne bir koyarsanız , ofseti değiştirir. Örneğin, bunu 0 olarak ayarlayabilirsiniz:

#inputBox{position:absolute;top:0px;left:0px;}

veya

#inputBox{position:relative;top:-12px;left:-2px;}

Bu nedenle, sahip olduğunuz konumlandırma sorunu ne olursa olsun, mutlaka bir ofset sorunu değildir, ancak her zaman üst, sol, sağ ve alt özelliklerle oynayarak düzeltebilirsiniz.

Sorunlu tarayıcınız uyumsuz mu?


2
Lütfen Stony'nin dikey hizalama hakkındaki yorumuna da bakın. Hizalama ayarının düzeltilmesi, tarayıcının öğenin konumunu zorla geçersiz kılmak yerine tercih edilebilir görünüyor.
Jeremy Condit

33

Benim için öyleydi vertical-align: baselinevs vertical-align: topofset üst neden olduğunu.

Ayarlamayı dene vertical-align: top


2
Bu, mutlak konumlandırma kullanmaktan daha iyidir
kullanıcı 1

2
Cevabınız harika, hizalamayı reddeden 4 satır içi blok div'im varken dikey hizalamayı ayarlamam gerektiği gerçeği boğa. Çalışma saatlerini bitirdin. Teşekkür ederim.
Corey Ogburn

<button>Bir <li>elemanın içine gömülü olarak çalıştı .
Amessihel

9

Hızlı düzeltme:

position: relative;
top: -12px;
left: -2px;

bu dengeleri dengelemeli, ancak belki de tüm düzeninize bir göz atmalı ve bu kutunun diğer kutularla nasıl etkileşime girdiğini görmelisiniz.

Terminoloji gelince, left, right, topve bottomCSS ofset özellikleri. Öğeleri belirli bir konuma konumlandırmak için (birlikte kullanıldığında absoluteveya fixedkonumlandırmada) veya varsayılan konumlarına göre ( relativekonumlandırma ile kullanıldığında ) taşımak için kullanılırlar . Öte yandan kenar boşlukları kutular arasındaki boşlukları belirtir ve bazen daralır, bu nedenle ofsetler olarak güvenilir bir şekilde kullanılamazlar.

Ancak, sizin durumunuzda bu ofsetin (yalnızca) CSS ofsetlerinden hesaplanamayacağını unutmayın .


Bu, beyaz boşluğu öğenin diğer tarafına taşır.
Quentin

@David Ne beyaz boşluk? Ve neden hedeflenen kutudan başka herhangi bir şey taşınacak?
Alin Purcaru

Boşluk, içinde hiçbir şey olmayan uzaydır. Hedeflenen kutu dışındaki şeyler taşınmayacaktır, mesele bu. Aşağıda 1 piksel bir şeyiniz varsa ve 12 piksel yukarı çıkarsanız, 1 piksel yerine 13 piksel altındadır.
Quentin

2
@David Aynı boşluk tanımına sahip olmayabiliriz, ancak söylemeye çalıştığınız şeyi anladım. Boşluğun diğer tarafa taşınacağını kabul ediyorum. Çözümü bir "hızlı düzeltme" olarak etiketledim çünkü kullanılabilir olabilir veya olmayabilir. Soruyu soran kişi daha fazla ayrıntı verene kadar önerebileceğim tek şey bu.
Alin Purcaru

3

Üst ve sol özelliklerini negatif değerlere ayarlamak, sorununuz sadece tuhaflıklar modundaysanız, iyi bir geçici çözüm olmayabilir. Bu, sayfada bir <!DOCTYPE>bildirim eksikse gerçekleşebilir ve IE8'de tuhaflıklar modunda işlenmesine neden olur. IE8 Geliştirici Araçlarında, "Belge Modu" altında "Tuhaflıklar Modu" nun seçilmediğinden emin olun. Seçilirse, uygun <!DOCTYPE>beyanı eklemeniz gerekebilir .


2

IE geliştirici araçlarını kullanıyorsanız, yanlışlıkla eski bir ayarda bırakmadığınızdan emin olun. Internet Explorer 7 Standartlarına ayarlandığını görünceye kadar aynı sorunla kendimi delirtiyordum. Internet Explorer 9 Standartlarına değiştirildi ve her şey yerine oturdu.


1
Bazılarımızın hala IE7 kullanan kullanıcıları var.
15ee8f99-57ff-4f92-890c-b56153

2

öğeyi yukarı taşıma: -12px veya konumlandırmak kesinlikle sorunu çözmez, sadece maskeler

Ben de aynı sorunu yaşadım - bir sarmalama öğesinde karışık olup olmadığınızı kontrol edin: kayan olmayan öğelerle yüzen öğeler - kayan olmayan öğem bu garip kaymaya yüzen öğeye neden oldu


Benim durumumda, bir web sitesinin görünümünü bir prototipinkiyle eşleştirmeye çalışıyordum. Prototiple aynı genişliğe sahip bir satır içi blok div'im vardı, ancak ofsetlerim 4 farkla kapalıydı. Web sitesinde kayan div'ler ve kayan olmayanların bir karışımı olduğunu keşfettim. Bunların hepsinin yüzer hale getirilmesi ekstra ofseti ortadan kaldırdı. Bu özellikle kafa karıştırıcıydı çünkü CSS arasında çok fazla farklılık göremedim.
Clint Brown

1

sorunla karşı karşıya olan öğe için kenar boşluğunu ve dolguyu tanımlayın:

#element_id {margin: 0; padding: 0}  

ve sorun olup olmadığına bakın. IE, sayfayı daha fazla istenmeyen kalıtımla işler. bunu yapmasını engellemelisin.


1

Bu garip görünüyor ama ayarı deneyebilirsiniz vertical-align: topiçinde CSSgirişler için. Bu, en azından IE8'de bunu düzeltir.


1

DotNetNuke (DNN) üzerinde çalışan .NET tabanlı web sitemizde de aynı sorunu yaşadım ve benim için çözen temelde form etiketinin basit bir marj sıfırlamasıydı. .NET tabanlı web siteleri genellikle bir forma sarılır ve kenar boşluğunu sıfırlamadan garip ofsetin bazen, çoğunlukla dahil edilen bazı komut dosyaları olduğunda göründüğünü görebilirsiniz.

Bu nedenle, sitenizde bu sorunu çözmeye çalışıyorsanız, bunu CSS dosyanıza girmeyi deneyin:

form {
  margin: 0;
}

Aynı sorunu yaşadım ve form marjını değiştirmek de benim için çalıştı.
David Derman


0

Ben de aynı sorunu yaşadım. Göreli konum UpdatePanel yenilendikten sonra ortaya çıktı. Çözüm, UpdatePanel'den önce şu şekilde boş bir etiket eklemekti:

<div></div>

...


1
UpdatePanel bir ASP.NET şeydir, değil mi? Çünkü bu bir ASP.NET sorusu gibi görünmüyor.
Joe Mabel

Aslında, sorudaki kod parçacığını görüntülerseniz, bunun bir ASP.NET sorusu olduğunu fark edersiniz.
mitkob

Ah. Üzgünüm, az önce gözden geçirildi, asp: TextBox'ı fark etmedi. FWIW, sorun bir ASP.NET sorunu değil . Bu sorun ortaya çıktığında, tipik olarak bunun anlamı, söz konusu ofsetin başka bir öğenin daha büyük olmasından kaynaklandığıdır ve kötü bir düzen ile sonuçlanıyorsa, anahtar normalde içindeki diğer bazı öğelerde kenar boşluğunu, dolguyu veya sınırı azaltmaktır. aynı üst div.
Joe Mabel

0

Sadece ana hatları böyle hiçbir şeye ayarlamayın

[Tanımlayıcı] {anahat: yok; }


0

Benim durumumda, ul dikey bir flexbox iken, bir li içinde ızgara düzenine sahip özel bir öğeye ofset eklendi.

görüntü açıklamasını buraya girin

Oldukça basit çözüm, li'yi blok öğesi olarak tanımlamaktı.

li {
 display: block;
}

Ve ofset gitti

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.