CSS (Cascading Style Sheets) to narzędzie do implementowania wyglądu strony internetowej. To właśnie dzięki niemu strony mogą wyglądać dużo lepiej (albo dużo gorzej, jak ktoś bardzo pragnie). Różnica w wyglądzie między stronami z dobrze napisanym CSSem i bez niego jest oszałamiająca. Oczywiście, należy wygląd strony brać pod uwagę, ponieważ to właśnie on w dużej mierze decyduje, czy dana osoba będzie chciała zostać na stronie, czy też będzie chciała z niej jak najszybciej uciec.

Tak na przyklad wygląda strona GitHuba bez żadnego CSSa.
W tworzeniu stron internetowych dbanie o wygląd jest niemal równie istotne, jak o jej funkcjonalność. Dość często bywa tak, że słabo wyglądająca strona z szeroką funkcjonalnością jest prześcignięta w ilości użytkowników przez prostą, ale cieszącą oko stronę.
Plik CSS składa się z zestawów reguł przypisanych do selektorów. Selektor odnosi się do elementu HTML, jego identyfikatora bądź klasy. Zestaw reguł składa się z reguł (rzecz jasna) i decyduje o wyglądzie danego elementu, do którego odnosi się dany selektor.
Opiszmy składnię przykładowego zestawu reguł.
button {
border: none;
border-radius: 100px;
padding: 8px;
margin-top: 4px;
}
W tym wypdaku selektorem jest button, co oznacza, że dany zestaw reguł będzie stosowany do każdego przycisku na stronie. W nawiasach klamrowych znajdują się reguły. Pojedyncza reguła zawiera nazwę własności i wartość, rozdzielone dwukropkiem i zakończone średnikiem. Tutaj jedną z reguł jest border: none;, który sugeruje, że przycisk nie będzie mieć żadnej widocznej obwódki.
colorOkreśla kolor znajdującego się w elemencie tekstu. Wartość jest wyrażona w zapisie szesnastkowym. Zapis szesnastkowy koloru określa, jak intensywne są trzy barwy podstawowe (czerwony, zielony, niebieski w tej kolejności) składające się na opisywany kolor od 0 (00) do 255 (ff) włącznie.
PRZYKŁAD: Kolor czerwony jest opisany jako #ff0000, czyli czerwony o intensywności 255, zielony o intensywności 0 i niebieski o intensywności 0. Kolor o zapisie #09e69c (czerwony o intensywności 9, zielony o intensywności 230 i niebieski o intensywności 156) może być odebrany jako turkusowy.
background-colorOkreśla kolor tła danego elementu.
borderOkreśla styl obwódki danego elementu. Wartość solid oznacza jednolity kontur, dotted - kropkowany, dashed - kreskowany. Wartość none usuwa kontur z widoku, choć element nadal może być zaokrąglony przy użyciu własności border-radius.
border-widthOkreśla grubość konturu.
border-radiusOkreśla, jak mocno dany element ma zaokrąglone brzegi (w pikselach).
paddingOkreśla, ile przestrzeni wewnątrz danego elementu pozostawić pustej (w pikselach). Podanie więcej niż jednej wartości pozwala ustalić, jak duży ten odstęp będzie z określonych stron. W tej regule można podać od 1 do 4 wartości.
marginOkreśla, ile przestrzeni na zewnątrz danego elementu pozostawić pustej (w pikselach). Wartość można podawać w ten sam sposób, jak w regule padding.
text-alignOkreśla, gdzie umieścić tekst w danym elemencie. start (bądź left) wyrównują tekst do lewej, center wyśrodkowywuje tekst, right wyrównuje tekst do prawej, a justify wprowadza justowanie tekstu.
Standardowy sposób umieszczania elementów jest poprzez dodawanie ich pod wcześniejszymi elementami - tak, jak biegnie na przykład lista, od góry do dołu. Ten sposób pozycjonowania elementów w CSS nosi nazwę block (i uzyskujemy do niego dostęp poprzez wpisane display: block). Oprócz tego sposobu można zastosować inne, wymienione niżej:
display: inline umieszcza elementy tak, jak idą słowa w zdaniu - w tej samej linijce,display: flex przekształca element w tzw. flex container, w którym można łatwo umieścić elementy od lewej do prawej bądź od góry do dołu,display: grid sprawia, że wewnętrzne elementy układają się według siatki - mogą zajmować jej określone komórki.Zarówno flex, jak i grid zawierają mnóstwo własnych opcji, które tutaj (w większości) nie będą omawiane. Jednak flex jest na tyle ważny, że nie można go pominąć w całości.
display: flex - o co chodzi?Przypuśćmy, że posiadasz element <div class="container"> i ustawiasz na nim display: flex. W rezultacie otrzymasz flex container - czyli element, w którym podrzędne elementy będą umieszczane w porządku od lewej do prawej. Tamte elementy będą zajmować jednocześnie całą wysokość flex containera, o ile nie mają uprzednio ustawionej wysokości.
Poniższą zawartość wyświetli podany kod (Svelte):

<div class="flex-container">
<div class="one"></div>
<div class="two"></div>
<div class="three"></div>
</div>
<style>
.flex-container {
width: 500px;
height: 200px;
display: flex;
background-color: #888888;
}
.one {
width: 100px;
background-color: #f00;
}
.two {
width: 100px;
background-color: #0f0;
}
.three {
width: 100px;
background-color: #00f;
}
</style>
Poprzez flex-direction możemy wpłynąć na kierunek umieszczania kolejnych elementów. Po dodaniu reguły flex-direction: column do .flex-container i po zamianie reguły width: 100px na height: 50px na elementach mniejszych otrzymamy:

Flex container ma w sobie określoną oś główną (main axis) i poboczną (cross axis). Oś główna idzie w kierunku, w którym umiesczamy kolejne elementy. Domyślnie (kiedy nie ma określonej reguły flex-direction) oś główna jest ułożona poziomo. Oś poboczna jest osią prostopadłą do osi głównej.
Element, któremu nadano display: flex zawiera własne opcje, jak align-items i justify-center. align-items służy do określenia sposobu rozmieszczenia elementów po osi pobocznej. justify-center decyduje o ułożeniu elementów względem osi głównej. Te opcje można zastosować do łatwego wyśrodkowania elementu po obu osiach, poprzez zdefiniowanie flex containera następująco:
.flex-container {
display: flex;
align-items: center;
justify-content: center;
}
Oczywiście to są ograniczone informacje o CSS. Więcej można znaleźć tutaj.