CSS'de * ve * | * arasındaki fark nedir?


Yanıtlar:


215

Gereğince W3C Seçici Spec :

Evrensel seçici, isteğe bağlı bir ad alanı bileşenine izin verir. Aşağıdaki gibi kullanılır:

ns|*
ad alanındaki tüm öğeler ns

*|*
tüm elemanlar

|*
ad alanı olmayan tüm öğeler

*
varsayılan bir ad alanı belirtilmemişse, bu * | * ile eşdeğerdir. Aksi takdirde ns | * ile eşdeğerdir; burada ns varsayılan ad alanıdır.

Yani, hayır *ve *|*her zaman aynı değildir. Varsayılan bir ad alanı sağlanmışsa, *yalnızca o ad alanının bir parçası olan öğeleri seçer.


Aşağıdaki iki parçacığı kullanarak farklılıkları görsel olarak görebilirsiniz. *İlkinde varsayılan bir ad alanı tanımlanır ve böylece seçici bej renkli arka planı yalnızca bu ad alanının bir parçası olan öğeye uygularken *|*, kenarlık tüm öğelere uygulanır.

@namespace "http://www.w3.org/2000/svg";

* {
  background: beige;
}
*|* {
  border: 1px solid;
}
<a href="#">This is some link</a>

<svg xmlns="http://www.w3.org/2000/svg">
  <a xlink:href="#">
    <text x="20" y="20">This is some link</text>
  </a>
</svg>

Aşağıda hiçbir varsayılan ad alanı tanımlanmış ve ikisi de çok olduğu pasajı *ve *|*tüm hususlar için de geçerlidir ve hepsi bu kadar bej arka plan ve siyah kenarlık hem olsun. Başka bir deyişle, varsayılan bir ad alanı belirtilmediğinde aynı şekilde çalışırlar.

* {
  background: beige;
}
*|* {
  border: 1px solid;
}
<a href="#">This is some link</a>

<svg xmlns="http://www.w3.org/2000/svg">
  <a xlink:href="#">
    <text x="20" y="20">This is some link</text>
  </a>
</svg>


BoltClock'un yorumlarda ( 1 , 2 ) işaret ettiği gibi, başlangıçta yalnızca XHTML, SVG vb http://www.w3.org/1999/xhtml. Firefox bu davranışı izler ve tüm HTML5 kullanıcı aracılarında tutarlıdır. Bu cevapta daha fazla bilgi bulabilirsiniz .


4
Ad alanları yalnızca XHTML veya HTML için de geçerli mi?
Flimm

8
@Flimm: Yalnızca XHTML ve SVG gibi XML tabanlı diller. Ancak, Firefox gibi bazı tarayıcıların (diğerlerinden emin değilim), CSS amaçları için XHTML ad alanını metin / html'de bile uyguladığını unutmayın. Örneğin , bkz. Jsfiddle.net/BoltClock/5ta6yvvc ve daha fazla bilgi için bu cevap .
BoltClock

3
Ek - Firefox'un davranışı spesifikasyona bağlıdır ve tüm HTML5 kullanıcı aracılarında tutarlıdır. Tüm HTML öğeleri (yani HTML ad alanındaki öğeler )http://www.w3.org/1999/xhtml
BoltClock olarak adlandırılmıştır

44

*|*"herhangi bir ad alanındaki tüm öğeler" seçicisini temsil eder. W3C'ye göre , seçici ayrılmıştır:

ns | E

Burada ns ad alanı ve E ise elementtir. Varsayılan olarak hiçbir ad alanı bildirilmez. Dolayısıyla, bir ad alanı açıkça bildirilmedikçe *|*ve *aynı öğeleri seçecektir.


-3

CSS'de * herhangi bir öğeyle eşleşir.

| , belirli öğeleri seçmek için kullanılır . Her ikisi de test amacımız için kullanılan seçicidir


2
Bir örnek verebilir misiniz?
Ben Leggiero
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.