Zbiór porad, które pomogą Ci rozwinąć zawansowane umiejętności CSS.
Sprawdż takze inne wspaniałe listy @sindresorhus z zaufanych list.
- Użyj resetowania CSS
- Dziedziczenie
box-sizing
- Użyj
unset
zamiast resetowania wszystkich ustawień - Użyj
:not()
aby dodać/usunąć obramownie nawigacji - Sprawdź, czy czcionka jest zainstalowana lokalnie
- Dodaj
line-height
dobody
- Ustaw
:focus
dla elementów formularza - Przesuń cokolwiek pionowo
- Listy rozdziele przecinkami
- Wybierz elementy za pomocą negatywnego
nth-child
- Użyj SVG dla ikon
- Użyj selektora "Lobotomized Owl"
- Użyj
max-height
dla suwaków Pure CSS - Komórki tabeli o równej-szerokości
- Pozbądź się marginesów za pomocą Flexbox
- Użyj selektorów atrybutów z pustymi linkami
- Stylizuj domyślne linki
- Wewnętrzne proporcje bloków
- Wystylizuj uszkodzone obrazy
- Użyj
rem
dla ustawień globalnych rozmiarow iem
do ustawień localnych - Ukryj filmy z autoodtwarzaniem, które nie są wyciszone
- Użyj
:root
dla elastycznych typów - Ustaw rozmiar czcionki w elementach formularza
- Użyj zdarzeń wskaźnika do sterowania zdarzeniami myszy
- Ustaw
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:
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
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.
Niech box-sizing
zostanie odziedziczony z html
:
html {
box-sizing: border-box;
}
*,
*::before,
*::after {
box-sizing: inherit;
}
Ułatwia to łatwiejszą zmianę box-sizing
w wtyczkach lub innych komponentach, które wpływaja na inne zachowania.
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:
button {
all: unset;
}
Zamiast dodać obramowanie...
/* add border */
.nav li {
border-right: 1px solid #666;
}
...a później usunąć ja z ostatniego elementu...
/* usuń obramowanie */
.nav li:last-child {
border-right: none;
}
...użyj :not()
pseudo-klasy, aby dodać obramowanie do wybranych elementów:
.nav li:not(:last-child) {
border-right: 1px solid #666;
}
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ą.
Nie musisz dodawać wysokości linii
do każdego <p>
, <h*>
, et al. osobno. Zamiast tego dodaj go do body
:
body {
line-height: 1.5;
}
W ten sposób elementy tekstowe mogą łatwo odziedziczyć ustawienia z body
.
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:
body {
display: grid;
height: 100vh;
margin: 0;
place-items: center center;
}
Chcesz coś przenieść? Pionowo, poziomo... zawsze i wszędzie? Na CSS-Tricks znajdziesz ciekawy artykuł z dobrymi instrukcje na ten temat.
Elementy listy mogą wyglądać jak prawdziwa, oddzielona przecinkami lista:
ul > li:not(:last-child)::after {
content: ",";
}
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.
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:
.logo {
background: url("logo.svg");
}
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:
.no-svg .icon-only::after {
content: attr(aria-label);
}
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:
* + * {
margin-top: 1.5em;
}
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.
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ść:
.calendar {
table-layout: fixed;
}
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
:
.list {
display: flex;
justify-content: space-between;
}
.list .person {
flex-basis: 23%;
}
Teraz rynny kolumnowe zawsze są rozmieszczone równomiernie.
Wyświetl linki, gdy element <a>
nie ma wartości tekstowej, ale atrybut href
posiada link:
a[href^="http"]:empty::before {
content: attr(href);
}
To całkiem wygodne.
Dodaj styl dla "domyślnych" linków:
a[href]:not([class]) {
color: #008000;
text-decoration: underline;
}
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.
Po ustawieniu podstawowego rozmiaru czcionki w katalogu głównym (html { font-size: 100%; }
), ustaw rozmiar czcionki dla elementów tekstowych na em
:
h2 {
font-size: 2em;
}
p {
font-size: 1em;
}
Następnie ustaw rozmiar czcionki dla modułów na rem`:
article {
font-size: 1.25rem;
}
aside .module {
font-size: .9rem;
}
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:
video[autoplay]:not([muted]) {
display: none;
}
Po raz kolejny wykorzystujemy pseudo-klasę :not()
[Powrót do spisu treści](#Powrót-do-spisu-treści
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
:
:root {
font-size: calc(1vw + 1vh + .5vmin);
}
Następnie możesz użyć jednostkiroot em
na podstawie wartości obliczonej przez :root
:
body {
font: 1rem/1.6 sans-serif;
}
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:
input[type="text"],
input[type="number"],
select,
textarea {
font-size: 16px;
}
💃
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:
button:disabled {
opacity: .5;
pointer-events: none;
}
To takie proste.
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:
br + br {
display: none;
}
Wersje aktualne Chrome, Firefox, Safari, e Edge.