Zbiór porad, które pomogą Ci rozwinąć zawansowane umiejętności CSS.
Sprawdż takze inne wspaniałe listy [@sindresorhus](https://github.com/sindresorhus/) z zaufanych list.
box-sizing
unset
zamiast resetowania wszystkich ustawień
:not()
aby dodać/usunąć obramownie nawigacji
line-height
do body
:focus
dla elementów formularza
nth-child
max-height
dla suwaków Pure CSS
rem
dla ustawień globalnych rozmiarow i
em
do ustawień localnych
:root
dla elastycznych typów
display: none
na Podziały linii używane jako
odstępy
Reset ustawień CSS umośliwia wymuszenie spójność stylu w różnych przeglądarkach z czystym konturem dla elementów stylizacyjnych. Możesz wykorzystać jedną bibliotek resetującej ustawienia CSS np. Normalize lub użyć uproszczonego sposobu resetowania:
Elementy zostaną pozbawione marginesów i dopełnienia, a
box-sizing
pozwala zarządzać układami za pomocą modelu
pudełkowego CSS (CSS box model).
Uwaga: Jeżeli zdecydujesz sie na wykorzystanie powyżej
opisanej wskazówki dotyczącej
Dziedziczenia box-sizing
możesz zrezygnować z dodania box-sizing
w zresetowanych
ustawieniach CSS.
box-sizing
Niech box-sizing
zostanie odziedziczony z html
:
Ułatwia to łatwiejszą zmianę box-sizing
w wtyczkach lub
innych komponentach, które wpływaja na inne zachowania.
unset
zamiast resetowania wszystkich ustawień
Podczas resetowania ustawień elementu nie jest konieczne resetowanie pojedyńczych ustawień:
button {
background: none;
border: none;
color: inherit;
font: inherit;
outline: none;
padding: 0;
}
Możesz sprecyzować wszystkie właściwości elementu, używając skrótu
all
. Używając unset
możemy zresetować ustawienia
elementu do wartości początkowych:
Uwaga: skróty all
i unset
nie
są obsługiwane w IE11.
:not()
, aby dodać/usunąć obramownie nawigacji
Zamiast dodać obramowanie…
…a później usunąć ja z ostatniego elementu…
…użyj :not()
pseudo-klasy, aby dodać obramowanie do wybranych
elementów:
Selektor CSS definiuje granicę w sposób opisany przez człowieka.
Możesz sprawdzić, czy czcionka jest zainstalowana lokalnie, przed jej zdalnym pobraniem, co również jest dobrą wskazówką dotyczącą wydajności.
@font-face {
font-family: "Dank Mono";
src:
/* Full name */
local("Dank Mono"),
/* Postscript name */
local("Dank Mono"),
/* Otherwise, download it! */
url("//...a.server/fonts/DankMono.woff");
}
code {
font-family: "Dank Mono", system-ui-monospace;
}
Czapka dla Adama Argyle’a za podzielenie się tym prototypem i demonstracją.
line-height
do body
Nie musisz dodawać wysokości linii
do każdego
<p>
, <h*>
, et al. osobno.
Zamiast tego dodaj go do body
:
W ten sposób elementy tekstowe mogą łatwo odziedziczyć ustawienia z
body
.
:focus
dla elementów formularza
Obserwowani użytkownicy klawiatury polegają na fokucie, aby określić, gdzie na stronie pojawiają się zdarzenia na klawiaturze. Skoncentruj się na elementach formy, które będą spójne, a następnie domyślna implementacja przeglądarki:
a:focus,
button:focus,
input:focus,
select:focus,
textarea:focus {
box-shadow: none;
outline: #000 dotted 2px;
outline-offset: .05em;
}
Nie, to nie jest czarna magia, naprawdę możesz wyśrodkować elementy w pionie:
html,
body {
height: 100%;
margin: 0;
}
body {
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
display: -webkit-flex;
display: flex;
}
a także używając CSS Grid:
Chcesz coś przenieść? Pionowo, poziomo… zawsze i wszędzie? Na CSS-Tricks znajdziesz ciekawy artykuł z dobrymi instrukcje na ten temat.
Uwaga: Uważaj na pewne nieprawidłowe zachowanie z Flexbox w IE11.
Elementy listy mogą wyglądać jak prawdziwa, oddzielona przecinkami lista:
Użyj :not()
pseudo-klasy, aby przecinek nie zostal dodany do
ostatniego elementu.
Uwaga: Ta wskazówka może nie być idealna dla ułatwień dostępu, w szczególności na ekranach czytników. Kopiowanie / wklejanie z przeglądarki nie działa z treścią generowaną przez CSS. Postępuj ostrożnie.
nth-child
Wybierz przedmioty nieparzyste za pomocą negatywnego
nth-child
w CSS, aby wybrać elementy od 1 do n.
li {
display: none;
}
/* select items 1 through 3 and display them */
li:nth-child(-n+3) {
display: block;
}
Lub, skoro już nauczyłeś się trochę o użyciu
:not()
,wypróbuj:
/* select all items except the first 3 and display them */
li:not(:nth-child(-n+3)) {
display: none;
}
To było całkiem łatwe.
Nie ma powodu, aby nie używać SVG jako ikon:
SVG skaluje się dobrze dla wszystkich typów rozdzielczości i jest obsługiwany we wszystkich przeglądarkach wróć do IE9. Więc porzuć swoje pliki .png, .jpg lub .gif-jif-whatev.
Uwaga: Jeśli masz przyciski tylko ikony SVG dla widzących użytkowników, a SVG nie załaduje się, pomoże to w utrzymaniu dostępności:
Być może “Lobotomized Owl” to dziwna nazwa dla selektora, ale użycie
uniwersalnego (*
) selektora z sąsiednim selektorem rodzeństwa
(+
) może udostepnić potężne możliwości CSS:
W tym przykładzie wszystkie elementy, które śledzą inne elementy,
otrzymają margin-top: 1.5em
.
Dowiedź sie wiecej na temat selektora “lobotomized owl” czytajac artykul Heydon’a Pickering A List Apart.
max-height
(atrybutu maksymalnej wysokości) dla suwaków
Pure CSS
Zaimplementuj suwaki CSS używając max-height
z ukrytym
przepełnieniem:
.slider {
max-height: 200px;
overflow-y: hidden;
width: 300px;
}
.slider:hover {
max-height: 600px;
overflow-y: scroll;
}
Element rozwija się do max-height
po najechaniu kursorem, a
suwak wyświetla się w wyniku przepełnienia.
Tworzenie tabel może być uciążliwe. Spróbuj użyć
table-layout: fixed
, aby upewnić sie, że komórki mają
jednakową szerokość:
Widzisz jakie to proste! :)
Podczas pracy z rynnami kolumnowymi (column gutters) możesz pozbyć się
nth-
, first-
, i last-child
za
pomocą właściwościspace-between
:
Teraz rynny kolumnowe zawsze są rozmieszczone równomiernie.
Wyświetl linki, gdy element <a>
nie ma wartości
tekstowej, ale atrybut href
posiada link:
To całkiem wygodne.
Dodaj styl dla “domyślnych” linków:
Linki wstawiane za pośrednictwem CMS, które zwykle nie mają atrybutu class, będą wyróżnione bez wpływu na kaskadę.
Aby utworzyć pola, które posiada wewnętrzne proporcje, wystarczy zastosować górny lub dolny margines do elementu div:
.container {
height: 0;
padding-bottom: 20%;
position: relative;
}
.container div {
border: 2px dashed #ddd;
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
Użycie 20% wypełnienia (padding) sprawia, że wysokość bloku jest równa 20% jego szerokości. Bez względu na szerokość okna roboczego (viewport), element div zachowa swój współczynnik proporcji (100% / 20% = 5:1).
Spraw, aby uszkodzone obrazy były bardziej estetyczne z użyciem odrobiny CSS:
img {
display: block;
font-family: sans-serif;
font-weight: 300;
height: auto;
line-height: 2;
position: relative;
text-align: center;
width: 100%;
}
Następnie dodaj reguły pseudoelementów, aby wyświetlić komunikat użytkownika i adres URL uszkodzonego obrazu:
img::before {
content: "We're sorry, the image below is broken :(";
display: block;
margin-bottom: 10px;
}
img::after {
content: "(url: " attr(src) ")";
display: block;
font-size: 12px;
}
Dowiedz się więcej o stylizacji używając tego wzoru w oryginalnym originalny artykule Ire Aderinokun.
rem
dla ustawień globalnych rozmiarow i
em
do ustawień localnych
Po ustawieniu podstawowego rozmiaru czcionki w katalogu głównym (html { font-size: 100%; }
), ustaw rozmiar czcionki dla elementów tekstowych na em
:
Następnie ustaw rozmiar czcionki dla modułów na rem`:
Teraz każdy moduł jest podzielony na sekcje. Sprawia to żę stylizacja i utrzymanie kodu jest łątwiejsze.
To świetna sztuczka dla niestandardowego arkusza stylów użytkownika. Unikaj przeciążania użytkownika dźwiękiem z filmu, który odtwarza się automatycznie po wczytaniu strony. Jeśli dźwięk nie jest wyciszony, nie pokazuj widea:
Po raz kolejny wykorzystujemy pseudo-klasę
:not()
Powrót do spisu treści(#Powrót-do-spisu-treści
:root
dla elastycznych typów
Rozmiar czcionki typowej w elastyczny układzie (responsive layout)
powinien być dostosowywany dla każdego ekranu. Możesz obliczyć rozmiar
czcionki na podstawie wysokości i szerokości okna roboczego używając
:root
:
Następnie możesz użyć jednostkiroot em
na podstawie wartości
obliczonej przez :root
:
Aby uniknąć korzystania z przeglądarek komórkowych (iOS Safari etc.)
podczas powiększania elementów formularzy HTML, po dotknięciu menu
rozwijanego <select>
dnależy dodać
font-size
do reguły selektora:
:dancer:
Pointer events umożliwiają określenie sposobu interakcji myszy z elementem, na które kilka. Aby wyłączyć domyślne zdarzenie wskaźnika na przycisku, na przykład:
To takie proste.
display: none
na Podziały linii używane jako odstępy
Jak zauważył Harry Roberts, może to pomóc zapobiec korzystaniu przez użytkowników CMS z dodatkowych podziałów linii dla odstępów:
Wersje aktualne Chrome, Firefox, Safari, Opera, Edge, and IE11.