CSS @import vs. Sass @import

To pytanie z serii niestandardowych zagadnień poruszanych na rozmowach rekrutacyjnych. Z mojego doświadczenia powiem Wam, że raczej nie jest popularne. Choć dyrektywa @import w sumie idealnie nadaje się na sprawdzenie nieco ponad podstawowej wiedzy z CSSów.

A więc… jak to jest z tymi importami? Wiemy, że CSS posiada własną dyrektywę @import służącą do importowania zewnętrznych, odrębnych plików CSS. I wiemy też, że Sass daje nam… dokładnie taką samą funkcjonalność. Czy aby na pewno?

CSSowy @import wydarza się at runtime, czyli w czasie działania strony w przeglądarce. Użytkownik pobiera zewnętrzne pliki ze stylami za pomocą tylu zapytań, ile mamy osobnych, importowanych plików CSS. Wniosek – ten import jest fajny pod kątem architektury, czytelności kodu i szybkości jego pisania. Jednak w ostatecznej postaci dla klienta – projekt cechuje się poważną wadą wydajnościową w postaci wielu po prostu nadmiarowych zapytań do serwera. Oczywiście za pomocą CSS @import możesz importować tylko pliki .css.

Sassowy @import wydarza się podczas budowania projektu. Działa w ten sposób, że dosłownie łączy pliki w jeden arkusz CSS. Użytkownik pobierze go jednym zapytaniem. Wniosek – ten import dostarcza nam dokładnie tę samą funkcjonalność, co CSSowy import jednocześnie rozwiązując problem wydajności strony u klienta.

Generalnie Sass @import działa tak, że dołącza treść importowanego pliku stylów dokładnie w miejscu dyrektywy @import.

Przykład prosto od Sass’a. Importujemy plik _reset.scss do pliku base.scss.

// _reset.scss

html,
body,
ul,
ol {
  margin:  0;
  padding: 0;
}
// base.scss

@import 'reset';

body {
  font: 100% Helvetica, sans-serif;
  background-color: #efefef;
}

base.scss kompiluje się do base.css, który wygląda następująco:

html, body, ul, ol {
  margin: 0;
  padding: 0;
}

body {
  font: 100% Helvetica, sans-serif;
  background-color: #efefef;
}

Sass @import pozwala zarówno na import plików .css, jak i .sass, .scss (więcej o tych rozszerzeniach przeczytasz u mnie na blogu).  Jednak, uwaga – istnieją przypadki, że zadziała on jak CSSowy import (co oczywiście jest działaniem nieporządanym). Stanie się tak, gdy:

  • importujesz plik .css (choć tu rozwiązaniem jest pominięcie rozszerzenia w nazwie importowanego pliku – klik)
  • ścieżka do pliku zaczyna się od http://
  • ścieżka do pliku to url()
  • @import posiada media queries.

Przykład z dokumentacji. Chodzi mi o to, że:

@import "foo.scss";

lub

@import "foo";

importują treść pliku foo.scss (tak jak tego chcemy).

Jednakże:

@import "foo.css";
@import "http://foo.com/bar";
@import url(foo);
@import "foo" screen;

skompilują się do

@import "foo.css";
@import "foo" screen;
@import "http://foo.com/bar";
@import url(foo);

… czyli to CSSowego importu


Generalnie mówi się, aby używać dyrektywy Sass @import kiedy tylko się da.


To na tyle z podstawowej wiedzy, która w zupełności wystarczy Wam na rozmowę rekrutacyjną. Jeśli jesteście głodni bardziej zaawansowanych informacji – sprawdźcie te linki: o ROZWAŻNYM korzystaniu z importa w preprocesoracho szczegółach Sass @import, stackoverflowo wadach CSSowego importu.

Artykuły, które mogą Ci się spodobać...

Wpisz hasło, którego szukasz i naciśnij ENTER, aby je wyszukać. Naciśnij ESC, aby anulować.

Dawaj na górę