Anahat ve kenarlık arasındaki fark


194

Herkes CSS 'sınır' ve 'anahat' özellikleri arasında herhangi bir fark biliyor mu? Fark yoksa, neden aynı şey için iki özellik var?

Yanıtlar:


199

Gönderen: http://webdesign.about.com/od/advancedcss/a/outline_style.htm

CSS anahat özelliği kafa karıştırıcı bir özelliktir. Bunu ilk öğrendiğinizde, sınır özelliğinden nasıl uzaktan bile farklı olduğunu anlamak zor. W3C bunu aşağıdaki farklılıklara sahip olarak açıklar:

1.Outlines yer kaplamaz.

2.Outlines dikdörtgen olmayan olabilir.


1
Bağlantı bunu açıkladı. Teşekkürler :)
Kshitij Saxena -KJ-

2
@Muu , öğenin içine anahat çizilir gibi görünürken, sınırlar bunun dışında görünür.
Mahn

51

Diğer bazı cevaplara ek olarak ... burada aklıma gelen birkaç fark daha var:

1) Yuvarlatılmış köşeler

borderözelliği ile yuvarlatılmış köşeleri destekler border-radius. outlineyapmaz.

VAKTİNİ BOŞA HARCAMAK

(Not: Firefox , -moz-outline-radiusanahatta yuvarlatılmış köşelere izin veren özelliğe sahip olsa da ... bu özellik herhangi bir CSS standardında tanımlanmamıştır ve diğer tarayıcılar tarafından desteklenmemektedir ( kaynak ))

2) Sadece bir tarafı şekillendirin

Sınır tarzı ile her tarafı için özelliklere sahiptir border-top:, border-left:vs.

anahat bunu yapamaz. Anahat yok: vs. Ya hep ya hiç. ( bu SO yazısına bakın )

3) Ofset

Anahat özelliği özelliğiyle dışa kaydırmayı destekler . sınır değil.

VAKTİNİ BOŞA HARCAMAK

Not: outline-offsetInternet Explorer dışındaki tüm büyük tarayıcılar desteklenir


Evet, ne dediğini anlıyorum, düğmemdeki kenarlık yarıçapını değiştirmeye çalıştım ama şimdi odaktaki ana çizgim düğmenin etrafına sarılmıyor.
radtek

1
@Danield, teknik olarak söylediğiniz her şey doğru olsa da, sorunun ruhu farklıydı. Zaten sınırımız olduğunda neden ana hatlarını belirleyelim? Ve cevap anahat kutu modelinin dışında kalıyor.
0fnt

2
@ user247077 - Kabul etmiyorum. OP için hem anahat hem de sınır aynı görünüyor. Bu yüzden aralarında mümkün olduğunca çok farklılık bilmek istiyor. Diğer farklılıkların bazıları zaten diğer yanıtlarda yayınlanmıştır, bu yüzden henüz listelenmemiş olanları eklemeye karar verdim.
Danield

1
Bu outlines, kenarlıktan daha hızlı oluşturulması anlamına mı geliyor ?
Utkarsh Sinha

38

Diğer cevaplara ek olarak, ana hatlar genellikle hata ayıklama için kullanılır. Opera, belgedeki tüm öğelerin nerede olduğunu göstermek için anahat özelliğini kullanan bazı güzel kullanıcı CSS stillerine sahiptir.

Bir öğenin neden beklediğiniz yerde veya beklediğiniz boyutta görünmediğini bulmaya çalışıyorsanız, birkaç anahat ekleyin ve öğelerin nerede olduğunu görün.

Daha önce de belirtildiği gibi, ana hatlar yer kaplamaz. Kenarlık eklediğinizde, öğenin belgedeki toplam genişliği / yüksekliği artar, ancak bu anahatla olmaz. Ayrıca kenarlıklar gibi belirli kenarlarda ana hatlar oluşturamazsınız; Ya hep ya hiç.


17

TLDR;

W3C bunu aşağıdaki farklılıklara sahip olarak açıklar:

  • Anahatlar yer kaplamaz.
  • Anahatlar dikdörtgen olmayabilir.

Kaynak

Erişilebilirlik için anahat kullanılmalıdır

Ana hatların birincil amacının erişilebilirlik olduğu da not edilmelidir. Anahat olarak ayarlamak: hiçbirinden kaçınılmamalıdır.

Kaldırmanız gerekiyorsa, alternatif stil sunmak daha iyi bir fikir olabilir:

Anahat: hiçbiri veya Anahat: 0 kullanarak odak göstergesini kaldırma konusunda birkaç ipucu gördüm. Anahattı, hangi öğenin klavye odağı olduğunu görmeyi kolaylaştıran başka bir şeyle değiştirmediğiniz sürece lütfen bunu yapmayın. Klavye odağının görsel göstergesini kaldırmak, klavye navigasyonuna güvenen kişilere sitenizde gezinme ve siteyi kullanma konusunda gerçekten zor bir zaman verecektir.

Kaynak: "Anahatları Bağlantı ve Form Denetimlerinden Kaldırma", 365 Berea Street


Daha fazla kaynak


8

Anahatların pratik kullanımı şeffaflık ile ilgilidir. Arka planı olan bir üst öğeniz varsa, ancak üst öğenin arka planının görünmesi için alt öğenin kenarlığının saydam olmasını istiyorsanız, "kenarlık" yerine "anahat" kullanmanız gerekir. Bir sınır şeffaf olsa da, ebeveynin değil çocuğun arka planını gösterecektir.

Başka bir deyişle, bu ayar aşağıdaki efekti yarattı:

outline: 7px solid rgba(255, 255, 255, 0.2);

resim açıklamasını buraya girin


2
Tüm hikayeye değil, background-clip: padding-box;
stilinize

4

W3 Okul Sitesinden

CSS sınır özellikleri bir elementin kenarlık stilini ve rengini belirtmek için izin verir.

Bir anahat (sınırları dışında) unsurları etrafında çizilen bir çizgi elemanı "öne" yapmaktır.

Anahat shorthand özelliği, tüm anahat özelliklerini bir bildirimde ayarlar.

Ayarlanabilen özellikler (sırayla) şunlardır: anahat rengi, anahat stili, anahat genişliği.

Yukarıdaki değerlerden biri eksikse, örneğin "anahat: katı # ff0000;", varsa, eksik özellik için varsayılan değer eklenir.

Daha fazla bilgi için buraya bakın: http://webdesign.about.com/od/advancedcss/a/outline_style.htm


4

Biraz eski bir soru, ancak ana hatlarının ebeveynlerinden taşmış olsalar bile (negatif kenar boşlukları, kutu gölgeleri ile) anahattın tüm alt öğelerin dışında görüntüleneceği bir Firefox oluşturma hatasından (halen Jan13'te mevcut) bahsetmeye değer , vb.)

Bunu şu şekilde düzeltebilirsiniz:

.container {
    position: relative;
}
.container:before {
   content: '';
   margin: 0;
   padding: 0;
   position: absolute;
   top: 0;
   left: 0;
   width: 100%;
   height: 100%;
   outline: 1px solid #ff0000;
}

Süper talihsiz hala sabit değil. Çoğu durumda ana hatları tercih ederim, çünkü bir öğenin boyutlarına eklenmezler, böylece bir öğenin boyutlarını ayarlarken her zaman kenarlık genişliklerini göz önünde bulundurmak zorunda kalmazsınız.

Sonuçta, hangisi daha basit?

.container {
    width: 960px;
    height: 300px;
    outline: 3px solid black;
}

Veya:

.container {
    width: 954px;
    height: 294px;
    border: 3px solid black;
}

1
Henüz yapmadıysanız, box-sizingbir deneyin! bağlantı
Brendan

Bu cevabın altındaki örnekler aynı sonuçları vermez. Birincisi, kutunun dışında her şeyi kapsayan 3px'lik bir taslak ile 960 * 300 bir kutu verir. İkincisi, hiçbir şeyi içermeyen 3px'lik bir taslak ile 954 * 294 bir kutu verir
Peter R

3

IE, W3C kutu modelini uygulamadığından, W3C'nin anahatlarının IE'nin sınırı olduğunu da belirtmek gerekir .

W3c kutu modelinde, kenarlık elemanın genişliği ve yüksekliğinden bağımsızdır. IE'de kapsayıcı.


Bu IE10 için geçerli değildir. - Görünüşe göre kutu boyutlandırma modellerini ve ana hatların seçilen modelden bağımsız olarak hiç yer kaplamadığı gerçeğini karıştırıyorsunuz.
Robert Siemer

1

Sadece ikisi arasındaki farkı görmek için css / html kodu küçük bir parça yaptım.

outlinepotansiyel taşan alt elementleri, özellikle bir satıriçi konteynere dahil etmek daha iyidir .

borderblok davranış elemanları için çok daha uyarlanmıştır .

Senin için keman efendim!



1

"Anahat" kullanımının pratik bir örneği olarak, bir web sayfasında sistem odağını izleyen soluk noktalı kenarlık (örneğin, bağlantılar arasında sekerseniz) anahat özelliği kullanılarak kontrol edilebilir (en azından Firefox'ta yapabileceğini biliyorum) , diğer tarayıcılarda denenmedi).

Yaygın bir "görüntü değiştirme" tekniği, örneğin:

<div id="logo"><a href="/">Foo Widgets Ltd.</a></div>

CSS'de aşağıdakilerle:

#logo
{
    background: url(/images/logo.png) center center no-repeat;
}
#logo a
{
    display: block;
    text-indent: -1000em;
}

Sorun, odak etikete ulaştığında, anahattın 1000em sola doğru gitmesidir. Anahat, bu tür öğelerdeki odak ana hattını kapatmanıza izin verebilir.

Ben IE Geliştirici Araç Çubuğu da "seçin" modunda inceleme için öğeleri vurgularken anahat "başlık altında" gibi bir şey kullanıyor inanıyorum. Bu, "taslak" ın yer kaplamadığı gerçeğini iyi gösteriyor.


Bu görüntü değiştirme tekniğini kimin icat ettiğini ve nedenini bilmek istiyorum. Tek amacı, metni engelli olan herkes için metnin yok olmasını sağlamak gibi görünüyor. Uygun alternatif metni olan normal bir resimdeki sorun nedir?
Stewart

Fahrner Görüntü Değişimi'nin bir uyarlaması olan Phark yöntemidir (şimdi bahsettiğiniz sebepten dolayı gözden düşmüştür) . Sadece birisinin neden odak anahattını değiştirmek isteyebileceğinin pratik bir uygulamasını göstermenin hızlı bir yolu olarak kullanıyordum :)
Matt Sach

1

bir projektörün kenarlık olarak çizdiği bir çerçevenin sınır olduğunu düşünün, o şeyin etrafındaki gerçek bir nesne.
bir projeksiyon kolayca üst üste gelebilir ancak sınır geçmenize izin vermez.
kullandığım zaman grid+%width, kenarlık görünüm bağlantı noktasındaki ölçeklendirmeyi değiştirir, örneğin bir width:100%üst öğedeki bir div ile üst width:100pxöğeyi tamamen doldurur, ancak div'a eklediğimde border:solid 5pxdiv'ı kenarlık için yer açmak için daha küçük hale getirir (nadir ve iş
anlaşılabilir !) ancak anahat ile daha sanal olduğu için bu sorun yoktur: D sadece öğenin dışında bir satırdır, ancak sorun düzgün bir şekilde boşluk bırakmazsanız diğer içeriklerle çakışır.

kısa yapmak için:
anahatları artıları:
boşluk ve karışıklık
eksileri ile karışıklık yok :
yüksek çakışma şansı


1

Kenarlık ve anahat arasındaki farklar:

Kenarlık, kutu modelinin bir parçasıdır, bu nedenle öğenin boyutuna göre sayılır. Anahat, kutu modelinin bir parçası değildir, bu nedenle yakındaki öğeleri etkilemez.

Demo:

#border {
  border: 10px solid black;
}
#outline {
  outline: 10px solid black;
}
<html>
<body>
<span id="border">Border</span>Other text<br><br>
<span id="outline">Outline</span>Other text
</body>
</html>

Diğer farklar:
Çerçeve kenarlığın dışında görüntülenir.
Anahatların köşeleri yuvarlatılmış olamaz; sınırları olabilir.


-2

W3Schools'tan kopyalandı:

Tanım ve Kullanım

Anahat, öğeyi "öne çıkarmak" için öğelerin etrafına çizilen (kenarların dışında) bir çizgidir.


Bu ikisi arasındaki farkı açıklamıyor, sadece ne outlinevar
Kaspar Lee
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.