1 of 143

Dlaczego powinieneś mieć go w swoim projekcie?

TailwindCSS

2 of 143

Moja przygoda ze stylowaniem 👨‍🎨

3 of 143

CSS

4 of 143

5 of 143

6 of 143

7 of 143

8 of 143

9 of 143

BEM

10 of 143

B E M

11 of 143

B E M

12 of 143

13 of 143

Frameworki

14 of 143

15 of 143

16 of 143

17 of 143

18 of 143

text.css

text.jsx

19 of 143

20 of 143

+

21 of 143

VANILLA JS

22 of 143

B E M

23 of 143

Każdy projekt to inna historia jeżeli chodzi o stylowanie

24 of 143

25 of 143

26 of 143

27 of 143

Css puchł i puchł…

28 of 143

Duplikacje

29 of 143

30 of 143

31 of 143

🥩

32 of 143

Tobiasz Ciesielski

Front-end developer

3 lata doświadczenia

NgPoland - moje największe osiągnięcie do tej pory

Triathlon, pieczenie 🍞

*

*

*

*

@tobiasz_ciesielski�tobiaszciesielski.github.io

33 of 143

O Firmie

Tworzymy oprogramowanie dla specjalistów PR: Media Database, Online Newsroom, PR CRM, Email Outreach & Analytics, Media Monitoring, PR Reports

Jesteśmy na rynku od 2013 roku

Nasza siedziba mieści się w Warszawie, ale pracujemy zdalnie

Nasz zespół liczy około 90 [super]osób

Obsługujemy 7000+ użytkowników z 90+ krajów

Mamy jedną z najwyższych ocen wśród dostawców rozwiązań software dla PR według G2 Crowd

Jesteśmy jedynym zwycięzca konkursu Dream Employer 2023

78000+ artykułów opublikowanych w 3000+ newsroomach

13m+ emaili wysłanych do dziennikarzy

Jesteśmy częścią Semrush, wiodącej platformy Saas do zarządzania widocznością online i marketingiem treści

*

*

*

*

*

*

*

*

*

*

34 of 143

Obserwuj nas w mediach społecznościowych

35 of 143

CO TO JEST TAILWIND

36 of 143

Framework do stylowania z podejściem utylitarnym

37 of 143

Koncept

38 of 143

Adam Wathan

Twórca TailwindCSS

39 of 143

<div class="user-profile">

40 of 143

Nicolas Gallagher

41 of 143

The most reusable components are those with class names that are independent of the content.

42 of 143

<div class="user-profile">

43 of 143

<div class="card">

44 of 143

<div class="card card-md card-shadowed">

45 of 143

.card-shadowed {

box-shadow: 4px 4px 12px -10px rgba(66, 68, 90, 1);

}

46 of 143

.shadow {

box-shadow: 4px 4px 12px -10px rgba(66, 68, 90, 1);

}

47 of 143

Kiedy zrobimy tak z każdym modyfikatorem

48 of 143

<div class="shadow-lg px-4 py-2 bg-white rounded-xl">

49 of 143

50 of 143

51 of 143

Brzydkie

52 of 143

Ale

53 of 143

Działa

54 of 143

Dokumentacja BEM

55 of 143

There are only two hard problems in Computer Science: cache invalidation and naming things

Phil Karlton

56 of 143

57 of 143

Jesteśmy skupieni na jednym pliku/kontekście

58 of 143

Inne podejście niż to do którego przywykliśmy

59 of 143

Co Tailwind ma do zaoferowania?

60 of 143

Zbiór predefiniowanych klas

Spacing, rozmiary, tranzycje, animacje, layout itd.

61 of 143

Pseudo klasy

&:hover &:first &:focus &:required &:nth-child(odd)

class="hover:p-0 first:p-0 focus:p-0 required:p-0 odd:p-0">

62 of 143

Pseudo elementy

&::before &::after &::marker &::first-letter

class="before:p-0 after:p-0 marker:p-0 first-letter">

63 of 143

Mobile-first

64 of 143

Media queries

class="sm:p-0 md:p-2 xl:p-4">

@media (min-width: 640px) {}

65 of 143

Dark mode

<div class="bg-white dark:bg-red-900">

@media (prefers-color-scheme: dark) {}

66 of 143

Co jeśli nie znajdziemy odpowiedniej klasy?

67 of 143

Arbitrary values

68 of 143

<div class="top-[344px]">

.top-\[344px\] {

top: 344px;

}

69 of 143

To nie jest reużywalne tylko customowe.

70 of 143

<div class="grid-rows-[16px_auto]">

.grid-rows-\[16px_auto\]{{

grid-template-rows: 16px auto;

}

71 of 143

Czy wszystkie te klasy są wysyłane do klienta?

72 of 143

To właśnie magia Tailwinda ✨

73 of 143

74 of 143

75 of 143

Nie używamy interpolacji.

76 of 143

77 of 143

78 of 143

79 of 143

Biorąc to wszystko pod uwagę…

80 of 143

Czemu nie bootstrap albo material?

81 of 143

To są biblioteki z gotowymi komponentami i zbiorem ograniczonych klas utylitarnych

82 of 143

Konfiguracja

Konwencja

83 of 143

Używamy Tailwind’a, żeby zbudować właśnie takie biblioteki lub design systemy.

84 of 143

Możemy go dostosować całkowicie pod siebie.

85 of 143

tailwind.config.ts

86 of 143

tailwind.config.ts

87 of 143

88 of 143

Rozszerzenie do IDE

89 of 143

Możliwość połączenia z TypeScript

90 of 143

src/breakpoints.ts

91 of 143

tailwind.config.ts

92 of 143

93 of 143

94 of 143

A co z utrzymaniem na dłuższą metę?

95 of 143

96 of 143

@apply

97 of 143

98 of 143

99 of 143

styles.css

100 of 143

101 of 143

I can say with absolute certainty that if I started Tailwind CSS over from scratch, there would be no `@​apply`

Adam Wathan

102 of 143

@apply

103 of 143

Więc czasami to jest najlepsza opcja

104 of 143

Wykorzystaj framework.

105 of 143

Komponenty

106 of 143

Pętle

107 of 143

Wykorzystaj IDE

108 of 143

Multi-cursor

109 of 143

Plugin prettier’a do sortowania klas

110 of 143

cmd + s ⬇️

111 of 143

Inline fold

112 of 143

113 of 143

Konflikty klas

114 of 143

115 of 143

116 of 143

117 of 143

118 of 143

119 of 143

120 of 143

🤔

121 of 143

122 of 143

123 of 143

124 of 143

125 of 143

126 of 143

DEMO

127 of 143

Case Study

128 of 143

Jakie są moje przemyślenia?

129 of 143

Dokumentacja Tailwinda

130 of 143

Customizacja & Podpowiedzi

131 of 143

Animacje

132 of 143

Problem z SSR i zewnętrznymi bibliotekami

133 of 143

134 of 143

Po udanej próbie, zainstalowaliśmy tailwinda w aplikacji głównej (tej dużej)

135 of 143

…ale nie całego naraz.

136 of 143

137 of 143

Czego nauczył mnie TailwindCSS?

138 of 143

Kontrola abstrakcji

139 of 143

Powtórzenia nie są takie złe.

140 of 143

Coupling

141 of 143

Kopiuj wklej to czasami najszybszy sposób na zrobienie czegoś.

142 of 143

It is just about impossible to think this is a good idea the first time you see it

To najlepsze narzędzie frontendowe, jakiego używałem.

143 of 143

@tobiasz_ciesielski�tobiaszciesielski.github.io