W CSS jaka jest różnica między "."i" # " przy deklarowaniu zbioru stylów?

Jaka jest różnica między # a . podczas deklarowania zestawu stylów dla elementu i jakie są semantyki, które wchodzą w grę przy podejmowaniu decyzji, którego z nich użyć?

Author: Sunil Garg, 2009-03-02

9 answers

Tak, są różne...

# jest selektorem id , używanym do kierowania pojedynczego określonego elementu z unikalnym identyfikatorem, ale . jest selektorem klasy używanym do targetowania wielu elementów z określoną klasą. Ująć to inaczej:

  • #foo {} będzie stylować pojedynczy element zadeklarowany z atrybutem id="foo"
  • .foo {} będzie stylować wszystkie elementy z atrybutem class="foo" (możesz mieć wiele klasy przypisane również do elementu, po prostu oddzielają je spacjami, np. class="foo bar")

Typowe zastosowania

Ogólnie rzecz biorąc, używasz # do stylizacji czegoś, co wiesz, że pojawi się tylko raz, na przykład rzeczy takie jak divy wysokiego poziomu, takie paski boczne, obszary banerów itp.

Klasy są używane, gdy styl jest powtarzany, np. powiedzmy, że kierujesz specjalną formą nagłówka dla komunikatów o błędach, możesz utworzyć styl h1.error {}, który będzie miał zastosowanie tylko do <h1 class="error">

Specyficzność

Innym aspektem, w którym selektory różnią się między sobą, jest ich specyficzność - selektor id jest uważany za bardziej specyficzny niż selektor klas. Oznacza to, że gdy style są sprzeczne na elemencie, te zdefiniowane w bardziej specyficznym selektorze nadpisują mniej specyficzne selektory. Na przykład, podane <div id="sidebar" class="box"> dowolne reguły dla #sidebar z nadrzędnymi sprzecznymi regułami dla .box

Dowiedz się więcej o SELEKTORACH CSS

Zobacz Selectutorial aby uzyskać więcej świetnych podkładów na selektorach CSS - są niesamowicie potężne , a jeśli twoja koncepcja jest po prostu taka, że "# jest używany do Div", dobrze byłoby przeczytać dokładnie, jak efektywniej używać CSS.

EDIT: wygląda na to, że Selectutorial mógł trafić na dużą stronę na niebie, więc spróbuj zamiast tego link do archiwum.

 303
Author: Paul Dixon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-09 10:14:28

# oznacza, że pasuje do id elementu. . oznacza nazwę klasy:

<div id="myRedText">This will be red.</div>
<div class="blueText">this will be blue.</div>


#myRedText {
    color: red;
}
.blueText {
    color: blue;
}

Zauważ, że w dokumencie HTML atrybut id musi być unikalny , więc jeśli masz więcej niż jeden element wymagający określonego stylu, powinieneś użyć nazwy klasy.

 24
Author: nickf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-02 12:40:09

Kropka (.) oznacza klasę nazwę, podczas gdy hash (#) oznacza element z określonym atrybutem id . Klasa będzie miała zastosowanie do każdego elementu udekorowanego daną klasą, podczas gdy # style będzie miał zastosowanie tylko do elementu o tym konkretnym id.

Nazwa klasy:

<style>
   .class { ... }
</style>

<div class="class"></div>
<span class="class></span>
<a href="..." class="class">...</a>

Nazwa elementu:

<style>
   #name { ... }
</style>

<div id="name"></div>
 10
Author: tvanfosson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-22 09:39:15

Warto również zauważyć, że w kaskadzie , id (#) Selektor jest bardziej specyficzny niż selektor b (.). Dlatego reguły w instrukcji id nadpisują reguły w instrukcji class.

Na przykład, jeśli oba poniższe stwierdzenia:

.headline {
  color:red;
  font-size: 3em;
}

#specials {
  color:blue;
  font-style: italic;
}

Są stosowane do tego samego elementu HTML:

<h1 id="specials" class="headline">Today's Specials</h1>

Regułacolor:blue zastąpiłaby regułę color:red .

 7
Author: Jans Carton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-22 09:37:55

Kilka szybkich rozszerzeń na to, co już zostało powiedziane...

An id musi być unikalne, ale możesz użyć tego samego identyfikatora, aby uszczegółowić różne style.

Na przykład, biorąc pod uwagę ten wyciąg HTML:

<div id="sidebar">
    <h2>Heading</h2>
    <ul class="menu">
        ...
    </ul>
</div>
<div id="content">
    <h2>Heading</h2>
    ...
</div>
<div id="footer">
    <ul class="menu">
        ...
    </ul>
</div>

Możesz zastosować różne style za pomocą tych:

#sidebar h2
{ ... }

#sidebar .menu
{ ... }

#content h2
{ ... }

#footer .menu
{ ... }


Kolejna przydatna rzecz: możesz mieć wiele klas na elemencie, rozdzielając je spacjami...

<ul class="main menu">...</ul>
<ul class="other menu">...</ul>

Co pozwala na wspólną stylizację w .menu z specyficzne style przy użyciu .main.menu i .sub.menu

.menu
{ ... }

.main.menu
{ ... }

.other.menu
{ ... }
 5
Author: Peter Boughton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-02 14:25:27

Jak prawie wszyscy już stwierdzili:

A period (.) oznacza klasę , a hash (#) oznacza identyfikator .

Zasadnicza różnica między tym polega na tym, że możesz wielokrotnie używać klasy na swojej stronie, podczas gdy identyfikator może być użyty raz. Oczywiście, jeśli trzymasz się standardów WC3.

Strona nadal będzie renderowana, jeśli masz kilka elementów o tym samym ID, ale napotkasz problemy, jeśli/przy próbie dynamicznego zaktualizuj wspomniane elementy, wywołując je z ich ID, ponieważ nie są one unikalne.

Warto również zauważyć, że właściwości ID zastąpią właściwości klasy.

 4
Author: Anders,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-22 09:37:14

.class celuje w następujący element:

<div class="class"></div>

#class celuje w następujący element:

<div id="class"></div>

Zauważ, że identyfikator musi być unikalny w całym dokumencie, podczas gdy dowolna liczba elementów może współdzielić klasę.

 3
Author: Bobby Jack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-02 12:41:31

# jest selektorem id. Dopasowuje tylko elementy o pasującym id. Następna reguła stylu będzie pasowała do elementu, który ma atrybut id o wartości "green":

#green {color: green}

Zobacz http://www.w3schools.com/css/css_syntax.asp więcej informacji

 2
Author: tehvan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-02 12:40:35

Oto moje podejście do wyjaśnienia reguł te .style i #style są częścią macierzy. że jeśli nie w odpowiedniej kolejności, mogą się wzajemnie nadpisywać lub powodować konflikty.

Oto Kolejka.

Macierz

#style 0,0,1,0 id

.style 0,1,0,0 class

Jeśli chcesz nadpisać te dwa możesz użyć <style></style> wiedźma ma poziom macierzy lub 1,0,0,0. @ Media query nadpiszą wszystko powyżej... Nie jestem tego pewien, ale myślę, że selektor ID # może być użyty tylko raz na stronie.

 -2
Author: Peter Gruppelaar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-20 07:25:11