Smashing Podcast Episode 19 z Andy Bell: Co to jest CUBE CSS?
Opublikowany: 2022-03-10Dziś mówimy o CUBE CSS. Co to jest i czym różni się od takich podejść jak BEM, SMACSS i OOCSS? Rozmawiałem z jego twórcą, Andym Bellem, aby się dowiedzieć.
Pokaż notatki
- Moduł CSS
- Piccalilli
- Dowiedz się jedenastu od podstaw - oszczędź 40%!
- Andy Bell i Piccalilli na Twitterze
Uwaga : słuchacze Smashing Podcast mogą zaoszczędzić aż 40% na kursie Andy'ego Learn Eleveny From Scratch, używając kodu SMASHINGPOD
.
Cotygodniowa aktualizacja
- „Czego Witruwiusz może nas nauczyć o projektowaniu stron internetowych”
przez Fredericka O'Brien - „Wprowadzenie do SWR: React Hooks do zdalnego pobierania danych”
przez Ibrahimę Ndaw - „Jak projektanci stron internetowych mogą pomóc restauracjom w przejściu na cyfrowe doświadczenia”
przez Suzanne Scacca - „Praktyczny przewodnik testowania aplikacji React za pomocą Jest”
autor: Adeneye David Abiodun - „Najważniejsze cechy Django: walka o zasoby statyczne i pliki multimedialne (część 4)”
przez Philipa Kiely
Transkrypcja
Drew McLellan: Jest pedagogiem i niezależnym projektantem stron internetowych mieszkającym w Wielkiej Brytanii i pracował w branży projektantów internetowych od ponad dziesięciu lat. W tym czasie współpracował z największymi organizacjami na świecie, takimi jak Harley-Davidson, BSkyB, Unilever, Oracle i NHS. Wraz z Heydon Pickering jest współautorem Every Layout, a także prowadzi Front-End Challenges Club, który koncentruje się na nauczaniu najlepszych praktyk w zakresie programowania front-end za pomocą krótkich, zabawnych wyzwań.
Drew: Jego najnowszym przedsięwzięciem jest Piccalilli, internetowy biuletyn z samouczkami i kursami, które pomogą ci awansować jako programista i projektant front-end. Więc wiemy, że jest doświadczonym programistą i edukatorem, ale czy wiesz, że był pierwszą osobą, która mogła rywalizować na Crufts z pandą?
Drew: Moi Smashingowi przyjaciele, witajcie, Andy Bell. Cześć, Andy, jak się masz?
Andy Bell: Miażdżę, dzięki. Jak się masz?
Drew: Jestem bardzo dobry, bardzo dziękuję. Chciałem dziś z tobą porozmawiać o czymś, co zamieściłeś na swojej stronie Piccalilli, o metodologii CSS, którą opracowałeś dla siebie przez ostatnie lata. Po pierwsze, myślę, że powinniśmy prawdopodobnie zbadać, co rozumiemy przez metodologię CSS, ponieważ może to oznaczać różne rzeczy dla różnych ludzi. Więc kiedy myślisz o metodologii CSS, czym ona jest dla Ciebie?
Andy: To dobre, trudne pytanie na początek, Drew. Doceń to, dziękuję!
Drew: Witaj!
Andy: To trudne. Tak więc, dla kontekstu, używam BEM przez długi czas, a to jest Modyfikator elementu bloku. To już od dłuższego czasu. Sposób, w jaki patrzę na metodologię CSS, to nie jest struktura, to struktura organizacyjna. Tak lubię to widzieć. To prawie jak proces. To tak, jakbyś miał problem, który musisz rozwiązać za pomocą CSS i używasz metodologii, aby go rozwiązać za siebie i zachować przewidywalność i porządek. BEM jest po prostu legendarny, ponieważ odniósł szalony sukces.
Andy: Wtedy można by prawie określić takie rzeczy, jak elementy stylu i tego typu rzeczy. Można prawie powiedzieć, że są one zorientowane na metodologię, chociaż są nieco bardziej splecione z ramami, ale nadal jest to metodologia dzielenia rzeczy na maleńkie molekuły. Więc zasadniczo to jest to, co próbuję zrobić również z CUBE CSS. Myśląca struktura, myślę, że opisałem to jako.
Drew: Więc jest to aplikacja procesu dla tego, jak tworzysz architekturę i piszesz CSS, i nie jest to coś, co opiera się na narzędziach lub jakiejkolwiek innej technologii, to po prostu rodzaj przepływu pracy. Tak więc istnieje wiele różnych podejść. Wspomniałeś o BEM. Jest SMACSS, OOCSS, Atomic CSS. A potem masz takie niezwykłe podejście do miłości, jak ABEM. Widziałeś to?
Andy: Tak.
Drew: Po co publikować własne?
Andy: Tak, tak. Po co tworzyć własne? To bardzo dobre pytanie. Myślę, że ci, którzy mnie dobrze znają, wiedzą, że bardzo lubię płynąć pod prąd. Dzieje się tak głównie dlatego, że mam tendencję do robienia wielu różnych projektów w różnych zespołach. Odkryłem więc, że bardzo trudno jest pracować z BEM z tradycyjnym programistą, ponieważ jest on przyzwyczajony do używania CSS do tego, o co chodzi w CSS: kaskady itp., i dlatego trochę ukradłem to z języka .
Andy: Z drugiej strony jest to, że mniej ustrukturyzowane metodologie, trudniej jest pracować z programistą, kimś w rodzaju JS, ponieważ lubią strukturę, organizację i małe komponenty, co jest zrozumiałe podczas pracy z językiem, w którym pracują.
Andy: Więc znalazłem się na tych stanowiskach, gdzie pracowałem z różnymi typami ludzi, różnymi typami projektów, gdzie jedna metodologia nie działała. Przez lata po prostu bawiłem się tym pomysłem na to, jak się sprawy mają, a potem jest to, co zrobiliśmy ja i Heydon, Każdy układ, który w pewnym sensie wymusił dużą część tego, czyli C, część kompozycji , a potem po prostu bardzo szybko ewoluowałem w ciągu ostatnich sześciu miesięcy.
Andy: Jedynym powodem, dla którego napisałem o tym artykuł, było to, że właśnie robiłem ten kurs i pomyślałem, że lepiej napiszę dodatkowe materiały, aby ludzie to zrozumieli, a to jest całkowicie rozdmuchane. Więc może jeszcze nie skończyliśmy z metodologiami, Drew.
Drew: Więc materiał kursu, który tworzyłeś, w rzeczywistości wykorzystuje CUBE CSS jako swoją metodologię, prawda?
Andy: Tak. Tak więc dobre 50% kursu to w rzeczywistości front-end, mimo że jest to kurs nieograniczony. Jest tak, tak głęboko spleciony ze sposobem, w jaki budujemy front-end, że nie mógłbym po prostu powiedzieć „A tak przy okazji, tak piszę fajny CSS”, a potem go zostawić. Wiem, że ludzie lubią wchodzić w szczegóły, więc pomyślałem, że zrobię to, napiszę ten post, który jest naprawdę długi i bardzo szczegółowy, a potem, jeśli ktoś chce się podszkolić i naprawdę zrozumieć, co robimy , wtedy mogą to zrobić, a reszta jest stamtąd. I oto jesteśmy dzisiaj, Drew, siedzimy i rozmawiamy o tym.
Drew: Więc jeśli ktoś już rozumie BEM i może już używa BEM jako przykładu, ponieważ jest to prawdopodobnie jedna z najszerzej stosowanych metodologii, prawda? Więc jeśli już rozumieją BEM i przyjeżdżają do CUBE, czy jest to coś, co z łatwością przyjęliby? Czy istnieje wiele podobieństw, czy jest zupełnie inaczej?
Andy: Tak. Powiedziałbym, że przejście z BEM do CUBE jest prawdopodobnie płynnym przejściem, szczególnie sposób, w jaki lubię nadal pisać CSS dla CUBE. Więc większość rzeczy dzieje się na wyższym poziomie. Tak więc dzieje się to na poziomie kaskadowym i dzieje się globalnym CSS, używając narzędzi do robienia wielu rzeczy. Ale kiedy przejdziesz do nakrętek i śrub, to są to bardzo podobne do BEM komponenty, bloki i elementy. Jedyną rzeczą, która różni się od BEM, jest to, że zamiast modyfikatorów, używamy czegoś zwanego wyjątkami, które zamiast klas CSS zwracają się do atrybutów danych, co moim zdaniem daje niezłą separację i prawdziwy wyjątek, którym powinien być modyfikator.
Andy: Częściowym powodem, dla którego w pewnym sensie odpłynąłem od BEM, było to, że odkryłem sposób, w jaki z nim pracowałem, zwłaszcza w systemach projektowych, że modyfikatory były zdominowane i stało się to problemem, ponieważ było tak, jak to jest rola mojego bloku w tym momencie? Bo jeśli regularnie modyfikuję go do punktu, w którym jest nierozpoznawalny, to czy ta metodologia nadal działa tak, jak powinna działać?
Andy: Jest jeszcze cała sprawa z tokenami projektowymi, rzeczy, które Jina zrobiła z Lightning Design System, który wszyscy zaczęliśmy teraz adoptować. Dzięki takiemu podejściu rzeczy związane z klasą użytkową naprawdę zaczęły nabierać sensu. Więc po prostu zmiażdżyłem wszystkie rzeczy, które lubię w pracy innych ludzi, i zamiast tego umieściłem w swojej własnej.
Drew: Rozmawiasz z BEM, rodzaj podejścia modyfikującego, które wymyka się spod kontroli. Czy był to jeden z głównych problemów związanych z BEM, którym CUBE próbuje się zająć?
Andy: Tak, absolutnie. Podoba mi się podejście modyfikatora z BEM, to ma sens. To, co lubię w BEM, to coś, co nadal robię, to podwójne podkreślenie dla elementu, a następnie podwójny myślnik dla modyfikatora. Lubię taki sposób organizowania rzeczy. To był tylko przypadek w porządku, no cóż, wiele modyfikatorów, które mogę uwzględnić w klasach użytkowych, a następnie inne elementy…
Andy: Przykład, którego używam w artykule, to wyobraź sobie, że masz kartę, a następnie karta jest odwrócona, więc treść pojawia się przed obrazem. Więc to ma sens, zobaczyć display: flex, a potem odwrócić, odwrócić kolejność. To ma sens, mieć regułę wyjątku, ponieważ jest to wyjątek od domyślnego stanu karty i tak lubię to widzieć. To jest jak stan dotknięty tym komponentem, to jest wyjątek i to ma sens.
Andy: W przypadku wielu rzeczy, które ostatnio zrobiłem, nowoczesnego front-endu z reaktywnym JavaScriptem, dużo się zmienia i sensowne jest odpowiednie zarządzanie nimi między CSS i JavaScript, ponieważ stają się one coraz bardziej i bardziej splecionych ze sobą, czy ci się to podoba, czy nie. To dla nich wspólny język. Jak widać po mojej twarzy, bardzo nie, ale proszę bardzo. Prawdopodobnie myślisz: „Właściwie ostatnio dość dużo pracowałem z reakcją, więc jestem na odwrót”. Więc też to widzę.
Drew: Więc przejdźmy do CUBE. CUBE to skrót od Composition Utility Block Exception. Czy to prawda?
Andy: Tak. To jest ten.
Drew: Co to u licha oznacza?
Andy: Och, stary, powinieneś już to usłyszeć! Wygłaszałem wykład w zeszłym roku. Wygłosiłem wykład, który nazywał się Keeping it Simple with CSS, który skaluje się, a tam wprowadziłem wcześniejszą wersję CBEUT, która była Cascade Block Element Utility Token. To były śmieci. Nienawidziłem jego nazwy. Zrobiłem to kilka razy, ten wykład w zeszłym roku, i naprawdę nie podobało mi się to imię. Potem, kiedy zacząłem robić to w tym roku, pomyślałem: „Naprawdę muszę pomyśleć o tym, czym to właściwie jest i jak się to nazywa”. Myślę, że CUBE to trochę mniej śmieci. Myślę, że to najlepszy sposób, w jaki mogę to opisać.
Andy: Ale w takim razie imiona są zawsze śmieciem dla tych rzeczy, prawda? Mam na myśli, jak BEM, co to za bzdura! Ale wszyscy to robimy. Spójrz na Jamstack: to też okropne imię, prawda?
Drew: Moje usta są zapieczętowane!
Andy: Twój szef pyta „Co?” To prawda. Tak po prostu jest, prawda, w naszej branży.
Drew: Wygląda na to, że wiele metodologii CSS próbuje obejść niektóre cechy CSS, takie jak kaskada. Z tego, co przeczytałem, rozumiem, że CUBE próbuje wykorzystać tego rodzaju cechy i właściwości CSS.
Andy: Tak. Dobrą analogią jest to, że SCSS, podobnie jak Sass, jest rozszerzeniem naturalnego języka CSS, prawda? Nadal masz rację w CSS. Więc CUBE CSS jest właśnie taki. Jest to więc rozszerzenie CSS. Powinniśmy więc nadal pisać CSS, ponieważ CSS powinien… cóż, powinien być napisany. Powiedzmy sobie szczerze, że to jak to powinno być napisane, zdradza to nazwa: Kaskadowe Arkusze Stylów. Więc znowu to obejmuje, ponieważ odkryłem, że przeszedłem aż do poziomu mikrooptymalizacji. Byłem na ścieżce, którą ostatnio widzę, że wielu ludzi schodzi, gdzie… i wspomniałem o tym również w artykule, gdzie widzę… ostatnio są na to dowody. Zauważyłem, że ludzie tworzą elementy dystansowe i takie tam, i rozumiem ten problem, byłem w takiej sytuacji.
Andy: Sposób, w jaki to naprawiłem, polegał na tym, że zamiast drążyć i próbować mikro-optymalizacji, zacząłem myśleć o rzeczach na poziomie kompozycji, ponieważ nie ma znaczenia, jak małe są twoje komponenty, w pewnym momencie będą aby być stronami, będą widokami. Nie da się tego uniknąć, tak właśnie będzie. Więc zamiast próbować powiedzieć: „Tak, potrzebuję tych malutkich pomocników do wykonania tego układu”, mówisz: „Tak, mam widok strony kontaktowej lub widok strony produktu, a to jest szkieletowa kompozycja układu. Następnie w środku mogę umieścić dowolne komponenty, jakie tylko zechcę.” Mamy teraz takie rzeczy jak Grid i Flexbox, które sprawiają, że jest to o wiele bardziej osiągalne, i zasadniczo możesz umieścić wszystko, co chcesz w układzie szkieletu, to nie ma znaczenia. W tym momencie komponenty powinny zachowywać się tak, jak chcesz, z zapytaniami kontenerowymi lub bez nich.
Drew: Jest to część składowa CUBE, w której patrzysz na rzeczy bardziej na poziomie makr, patrząc na to, jak komponenty mogą być skomponowane w widok, aby utworzyć rodzaj stron, które musisz utworzyć dla witryny lub aplikacji lub co masz.
Andy: Czyli zasadniczo tworzy reguły. To jak wskazówki. Próbuje znaleźć jakieś wskazówki. To nie są sztywne zasady, na przykład, powinieneś zrobić to, powinieneś zrobić tamto. Zasadniczo to jest to, co robisz z przeglądarką, z tą metodologią, mówisz… nie zmuszasz jej do niczego. Mówicie: „Słuchaj, idealnie, gdybyś mógł to tak ułożyć, byłoby wspaniale, ale rozumiem, że może tak nie być, więc oto kilka granic i kilka górnych i dolnych poziomów, z którymi możemy pracować. Rób, co możesz i wiwatuj. Następnie po prostu rzucasz w niego kilkoma komponentami i pozwalasz mu robić to, co robi. Dodajesz tam wystarczającą kontrolę, aby nie wyglądała na śmieci.
Andy: Dobrym przykładem może być… robimy układ w każdym układzie zwany przełącznikiem, który zasadniczo umieszcza elementy w linii do pewnego momentu, w którym obliczenia, które określają, jak szeroki powinny być, po prostu ułożą je jeden na drugim . Ale ponieważ dodamy margines do linii i bloku, działa, niezależnie od tego, w jakim jest stanie, nadal wygląda dobrze. Chodzi o to, że nie mówimy przeglądarce, aby powiedziała: „Musisz ułożyć tę siatkę z trzema kolumnami”. Mówimy: „Jeśli możesz nałożyć siatkę trzech kolumn, zrób to. W przeciwnym razie po prostu stosuj i spacji. Jest to więc tego rodzaju metodologia pozwalająca przeglądarce naprawdę wykonywać swoją pracę.
Drew: Wiele różnych podejść, które pojawiły się w CSS w ciągu ostatnich kilku lat, bardzo skupiało się na poziomie komponentów, radzenia sobie ze wszystkim tak, jakby to był komponent. CUBE nie umniejsza tak bardzo tego aspektu komponentów, po prostu dodaje tę dodatkową koncepcję, biorąc te komponenty i komponując je w większe układy, zamiast po prostu mówić, że układ jest tylko kolejnym komponentem.
Andy: Tak, to dobry punkt, tak. Myślę, że o komponentach można powiedzieć, że są one ważne, szczególnie w nowoczesnych materiałach front-endowych. Robimy wiele rzeczy związanych z komponentami, rzeczy systemowych. Ale sposób, w jaki postrzegam komponent, jest taki, że jest to zbiór reguł, które rozszerzają to, co już zostało zrobione.
Andy: Chodzi mi o to, że zanim dojdziesz do poziomu bloków, większość twojej stylizacji jest już skończona i tak naprawdę to, co robi twój komponent, to umieszczanie kropek na Is i krzyżowanie Ts i mówi: „Tak, w tym kontekście…” Tak więc, na przykład, dla karty, ustaw obraz o minimalnej wysokości X i dodaj tutaj trochę dopełnienia. Zrób to, tamto i inne. Umieść przycisk tutaj. To po prostu rodzaj dodatkowych reguł, które zostały odziedziczone po reszcie CSS. Myślę, że to chyba najlepszy sposób na opisanie tego.
Andy: Podczas gdy w BEM komponent jest źródłem prawdy. Dopóki nie umieścisz tej klasy w elemencie, nic nie zostało zastosowane w tym momencie i ta metoda działa. Właśnie odkryłem, że napisałem więcej CSS, robiąc to, i bardziej powtarzalny CSS, czego nie lubię robić.
Drew: Czy rozważyłbyś typografię, kolory i pionowe rytmy, odstępy i to wszystko jest częścią idei kompozycji w tym modelu?
Andy: Tak. W globalnym CSS, tak, absolutnie. Szczególnie wertykalny rytm i przepływ. Napisaliśmy na ten temat artykuł na 24 sposoby, kilka lat temu, nie my, składnik flow i rytm. To było również coś w rodzaju abstrakcji od tego podejścia, w którym ustawiasz podstawowy komponent, który zasadniczo używa lobotomicznego selektora sowy. Nie wiem, jak to opiszę w radiu, ale tak zrobimy. Myślę, że po prostu umieścimy w notatkach z programu o artykule Heydona czy coś takiego. Ale zasadniczo to wybiera elementy potomne… przepraszam, elementy rodzeństwa.
Andy: A więc mówi: „Tak, każdy element następujący po elemencie X ma marżę górną nad kosztami CSS i wartością właściwości”, a piękno tego polega na tym, że możesz ustawić tę wartość niestandardowej właściwości CSS również w kontekście kompozycyjnym. Możesz więc powiedzieć: „Tak, w tym komponencie, jeśli jest trochę przepływu w ruchu, ustawimy przestrzeń przepływu tak, aby faktycznie była dwuremowa, ponieważ chcemy, aby była ładna i mocna, szeroka przestrzeń”. Następnie w innym możesz powiedzieć: „Właściwie chcę, aby przestrzeń przepływu była w połowie rem, ponieważ chcę, aby była ciasna”. To wszystko się dzieje, cała kontrola pochodzi z wyższego poziomu, a potem to, co robisz, to dodawanie nadpisań kontekstowych, zamiast wymyślania tego na nowo za każdym razem, wciąż na nowo wymyślając tę samą rzecz.
Drew: Więc to jest C, Kompozycja. Dalej mamy U, czyli Utility. Więc co rozumiemy przez użyteczność?
Andy: Więc to jest klasa, która wykonuje jedną pracę i robi to naprawdę dobrze. To może być implementacja tokena projektu, który… jest abstraktem właściwości. Zwykle są to kolory lub style typograficzne, rozmiary i tego typu zasady. Pomysł polega na generowaniu klas użytkowych, które je stosują. Masz więc narzędzie, które zastosuje podstawowy kolor tła, który jest jak kolor podstawowy, a następnie kolor podstawowy, który jest kolorem tekstu. Następnie możesz wygenerować kilka żetonów odstępów dla marginesu dopełnienia i tego typu rzeczy. Wykonują tylko jedną pracę. Po prostu dodają tę jedną regułę odstępów, tę jedną regułę koloru i to wszystko.
Andy: Ale masz też inne narzędzia. Dobrym przykładem jest narzędzie opakowujące. Co to zrobi, to ustawi maksymalną szerokość elementu, a następnie umieści lewy i prawy margines automatyczny, aby umieścić go w środku rzeczy. Więc ma tylko jedną pracę i po prostu robi to wydajnie i dobrze.
Andy: Masz więc swoje globalne style, wykonałeś wiele ustawień typografii i dużo miejsca na podłodze. Twoja kompozycja daje wtedy kontekst i układ. Następnie narzędzia stosują tokeny bezpośrednio do elementów, aby nadać im styl, którego potrzebujesz. Tak jak nagłówek, na przykład, mówisz: „Chcę, żeby to było tego rozmiaru i chcę, żeby miało to wprowadzenie i chcę, żeby miało tę miarę”. Wtedy w tym momencie… to właśnie mówiłem o blokach… potem idziesz dalej w dół stosu i już wykonałeś większość pracy w tym miejscu.
Andy: Dają ci więc ten naprawdę wydajny sposób pracy, a ponieważ HTML również płynie w dół potoku, naprawdę fajnie jest rozdzielić obciążenie na HTML, a nie na CSS, jak zauważyłem. Kiedyś naprawdę wdawałem się w lekcje użyteczności, jak w tym starym, zrzędliwym stylu „Och, oddzielenie obaw”, ale myślę, że to naprawdę przyzwoity sposób pracy. W artykule wspominam, że naprawdę podoba mi się Tailwind CSS. Myślę, że to działa i naprawdę lubię używać go do pisania produktów, ponieważ mogę naprawdę szybko coś opublikować. Ale myślę, że to po prostu trochę za daleko, tak jak Tailwind, podczas gdy ja lubię rzucać deszcz, gdy wykracza to poza zastosowanie jednej reguły do klasy. Więc myślę, że to wszystko. Czy ty?
Drew: Więc tak, dużo mówisz w artykule o tokenach projektowych, o czym rozmawialiśmy w Smashing Podcast z Jiną Anne w trzecim odcinku, myślę, że tak było. Wygląda więc na to, że tokeny projektowe są naprawdę podstawowym aspektem.
Andy: Tak. O Boże, tak. Bardzo dobrze pamiętam, kiedy Jina zajmowała się Lightning Design System, ponieważ w tym czasie budowałem system projektowania lub coś, co przypominało system projektowania, i walczyliśmy o zgodę kierownictwa na to. Kiedy wyszedł Lightning Design System, dosłownie wysłałem im link po linku i powiedziałem: „To właśnie robimy. Budujemy system projektowania. Do tego właśnie Salesforce obecnie go używa”. Pamiętam, że jej praca w tamtym czasie pomogła mi wnieść rzeczy przez drzwi.
Andy: W takim razie kwestie związane z projektowaniem zawsze tkwiły we mnie jako naprawdę dobry sposób na zastosowanie tych zasad. Ponieważ jestem projektantem z zawodu, więc po prostu widzę, że ta organizacja i zdolność do organizowania i tworzenia jednego źródła prawdy są naprawdę przydatne, ponieważ jest to coś, czego tak naprawdę nie mieliśmy w projektowaniu cyfrowym, zwłaszcza w Adobe. era pracy z Photoshopem i innymi rzeczami, po prostu nie mieliśmy tego luksusu. Mieliśmy go w formie drukowanej w Pantone Book, ale nie mieliśmy go w wersji cyfrowej z losowymi kodami szesnastkowym w całym sklepie.
Andy: Więc to jest po prostu świetne. Uwielbiam ten poziom kontroli. Właściwie myślę, że to pomaga w kreatywności, ponieważ nie myślisz już o nieważnych rzeczach, myślisz tylko o tym, co z tym robisz.
Drew: Czy implementacja tych tokenów projektowych ma szczególne znaczenie w przypadku podejścia? Czy zawsze są to niestandardowe właściwości CSS?
Andy: Myślę, że to bardzo ważny punkt w CUBE. Niektóre z odpowiedzi, które otrzymałem, ludzie trochę się z tym zmagali. Nie ma w nim żadnej wzmianki o technologii. Jedyną spójną technologią jest CSS. Możesz to zrobić jak chcesz. Możesz to wszystko zrobić z dowolnymi rzeczami CSS i JS, które ludzie robią teraz, lub możesz to zrobić za pomocą Vanilla CSS. Mógłbyś to zrobić z Sassem. Robię to z Sassem. Mniej, jeśli nadal to robisz. Wszystkie te dostępne technologie, post CSS, wszystkie te rzeczy. Możesz zrobić, jak chcesz, to nie ma znaczenia.
Andy: Chodzi o to, że jeśli zastosujesz się do tego rodzaju konstrukcji, wszystko będzie dobrze. Taka jest idea. Jest to bardzo luźne i nie rygorystyczne, jak niektóre metodologie. Widziałem to szczególnie w przypadku BEM, ludzie naprawdę zakorzenili się w zasadach BEM do tego stopnia, że wydaje się, że nie rozwiązujesz już problemu. Myślę, że musisz być elastyczny. Powiedziałem to w tym przemówieniu w zeszłym roku. Pomyślałem: „Jeśli zbyt mocno trzymasz się broni, na dłuższą metę możesz spowodować problemy, ponieważ próbujesz podążać określoną ścieżką i wiesz, że to już nie działa”. Zawsze powinieneś być elastyczny i pracować z systemem, a nie pracować nad nim co do joty.
Drew: Więc B, B to Block. Mówiłeś o tym pomyśle, że zanim dojdziesz do poziomu bloków, większość wszystkiego powinna być na swoim miejscu, a wtedy stylizacja na poziomie bloków jest tak naprawdę związana tylko z rzeczywistymi szczegółami konkretnego komponentu. Ogólnie rzecz biorąc, czy koncepcja bloku jest podobna do tego, co ludzie będą znali?
Andy: Och, absolutnie, tak. Więc wyobraź sobie swój komponent BEM i wyjmij z niego wszystkie wizualne rzeczy, i to jest to, co pozostaje, w zasadzie, blok. To właśnie próbowałem wyrazić, kiedy po raz pierwszy zacząłem myśleć o tej metodologii. Blok to tak naprawdę C, to kompozycja, ale to sprawia, że jest to naprawdę trudne, ponieważ wchodzisz na terytorium rekurencyjne i myślę, że mózgi ludzi by eksplodowały. Ale tak naprawdę to jest blok, to właściwie kolejna warstwa kompozycyjna, ale bardziej rodzaj ścisłego kontekstu, tak jak twoja karta, twój przycisk, twoja karuzela, jeśli to jest to, co nadal lubisz robić, i tego typu rzeczy.
Andy: To jest jak konkretna rzecz, składnik, a następnie wewnątrz tego ustalasz określone zasady, których ma przestrzegać, naprawdę ignorując resztę, więc nie… Możesz zastosować tokeny w blokach i robię to nadal, ale tak naprawdę jest bardziej zorientowany na układ, jest blokiem, o ile z nimi pracuję, a przynajmniej braniem tokena i stosowaniem go w określony sposób, jak status najechania przycisku, takie tam. Więc naprawdę twój blok powinien być malutki, zanim do nich dojdziesz, tak naprawdę nie powinny w ogóle robić wiele.
Drew: Więc może być tak mały jak hiperłącze.
Andy: Tak.
Drew: Ale może to być także złożona kolekcja innych klocków?
Andy: Tak. Jak coś w rodzaju modułu. Zdecydowanie możesz to zrobić. Ponieważ, znowu, wracamy do kompozycyjnego aspektu tego, że cokolwiek się w nim znajduje, nie powinno mieć znaczenia. Dobrym tego przykładem jest karta. Tak więc zawartość karty jest, powiedzmy, nagłówkiem, podsumowaniem i przyciskiem. Tak naprawdę nie powinieneś skupiać się na tych trzech elementach. Powinieneś powiedzieć: „Spójrz, wszystko, co akurat znajdzie się w treści, ma jakieś reguły przepływu i jakieś reguły układu kompozycyjnego”, a wtedy nie ma znaczenia, co tam umieścisz. Możesz zdecydować, że chcesz umieścić obraz w tej treści i powinien po prostu działać, powinien wyglądać dobrze.
Andy: To jest cały sens pracy z CSS. To bardzo wyrozumiały sposób pracy z CSS. Ułatwiasz sobie życie, będąc mniej sztywnym, ponieważ gdy rzeczy przypadkowo znajdują się w czymś, co się zdarzy, nie wygląda to przerażająco, jak mogłoby się wydawać, gdybyś był bardziej konkretny w różnych sprawach. znaleziony.
Drew: Zdecydowanie potrzebuję dużo wybaczenia wokół mojego CSS!
Andy: Wiem, że tak!
Drew: Na zdrowie! Więc to jest B. Ostatnią rzeczą jest E: E to Wyjątek. Teraz nie mówimy o komunikatach o błędach, prawda?
Andy: Nie, nie. To rodzaj-
Drew: Nie mówimy o wyjątkach JavaScript.
Andy: Tak, tak. W tym momencie nie powinno być tego. W każdym razie powinnam mieć nadzieję, że nie, w przeciwnym razie naprawdę jesteś w tym momencie w lesie: nie sądzę, że będę w stanie ci pomóc! Cała idea tego jest… więc stworzyłeś kontekst za pomocą swojego bloku, a wyjątek jest dokładnie taki, to jest jak wyjątek od reguły: więc odwrócona karta lub może to być przycisk ducha. Więc znasz te przyciski, które właśnie mają ramkę i przezroczyste tło? Byłby to wyjątek, ponieważ przycisk prawdopodobnie ma jednolity kolor tła, a następnie kolor etykiety. Tworzy to więc rodzaj odrębnego stanu zmienności.
Andy: Powodem, dla którego robię to z atrybutami danych, a nie klasami, jest to, że a) myślę, że fajnie jest mieć rozróżnienie. Więc kiedy skanujesz dużo kodu HTML, możesz zobaczyć dane, coś z myślami, myślisz: „Dobrze, w porządku, coś na pewno się zmieniło w tym elemencie”. Inną rzeczą jest to, że bardzo fajnie jest dać JavaScriptowi dostęp do tego stanu i na odwrót. Dlatego bardzo lubię stosować stan z atrybutami danych w JavaScript. Myślę, że w gruncie rzeczy do tego służą, rodzaj warstwy komunikacyjnej. Harmonia między nimi wydaje się działać naprawdę dobrze.
Andy: Dobrym przykładem jest powiedzmy, że masz komunikat o stanie, a JavaScript doda dane. Stan to sukces, błąd, informacja lub coś takiego. Możesz się do tego podłączyć za pomocą stylów wyjątków w CSS. Więc wiesz, że jest to wyjątek komponentu stanu i jest sprzeczny ze stanem domyślnym. Więc jest to po prostu bardzo przydatny sposób pracy z rzeczami. Jest przewidywalny z obu stron: jest przewidywalny po stronie CSS i jest również przewidywalny po stronie JavaScript.
Drew: Myślę, że to całkiem miłe, że coś, czego nie dają nazwy klas, jest właściwością i wartością. Więc jeśli chcesz mieć coś takiego, jakim jest stan i może to być sukces, porażka, ostrzeżenie lub co masz, możesz konkretnie zająć się tą właściwością stanu i odwrócić jej wartość. Podczas gdy przy dużej, długiej liście nazw klas, jeśli manipulujesz nimi na przykład w JavaScript, będziesz musiał spojrzeć na każdą z nich i dodać tam logikę biznesową, która mówi: „Mogę tylko ustawić jeden z nich” i co się stanie, jeśli dwie z tych klas zostaną zastosowane do tego samego elementu? Nie możesz tego uzyskać za pomocą atrybutu danych, ma tylko jedną wartość.
Andy: Tak. To dobry sposób na powiedzenie tego, tak. Odkryłem, że praca w ten sposób jest bardzo pomocna.
Drew: To całkiem interesujące. Nie wydaje mi się, żebym widział inne metodologie, które stosują takie podejście. Czy to jest całkowicie unikalne dla CUBE, robiąc to?
Andy: Może być. Naprawdę nie zwracam uwagi na inne rzeczy, które powinienem zrobić. Ktoś inny prawdopodobnie to robi. Powiem ci teraz, to był najbardziej kontrowersyjny aspekt tego. Niektórym ludziom naprawdę nie podobał się pomysł wykorzystania atrybutów danych. Rzecz w tym, że i jak odpowiadam, rób, co chcesz. Nie mówimy Ci, abyś robił coś w określony sposób, to tylko sugestie. Jeśli chcesz robić wyjątki w klasach CSS, takich jak modyfikatory, pozbądź się siebie. Policja CUBE nie będzie pukać do twoich drzwi. Jest absolutnie w porządku.
Andy: CUBE to myślenie, to struktura. Stosujesz tę strukturę tak, jak chcesz, z jakim narzędziem lub jakąkolwiek technologią chcesz. Dopóki utrzymujesz spójność, to jest ważna rzecz.
Drew: Więc nie ma czegoś takiego jak czysty CUBE?
Andy: Sposób, w jaki to piszę, to czysty CUBE, Drew. Wszyscy inni to tylko podróbka, to tylko słaba imitacja.
Drew: Poza tobą nikt nie może powiedzieć: „To nie jest podręcznik CUBE”.
Andy: Nie, to wszystko. Nikt nie może temu zaprzeczyć, prawda? Więc tak, pójdę z tym. Daje ci trochę siły lub coś w tym stylu.
Drew: Czy możesz mieszać i łączyć podejście CUBE z innymi metodologiami? Czy możesz używać bitów BEM?
Andy: Tak, tak sądzę. Trochę się nad tym zastanawiałem, bo niedługo zrobię na nim więcej rzeczy, bo stał się dość popularny, więc ludzie będą chcieli więcej pracy. Jedną rzeczą, której zamierzam się przyjrzeć, jest podejście do metodologii CUBE z czymś istniejącym.
Andy: Więc są dwa przeciwległe końce skali. Dobre pytanie, które ludzie zadawali, brzmi: „Jak to działa z każdym układem, innymi rzeczami?” Zasadniczo każdy layout to C. Tym jest każdy layout, jest to warstwa kompozycyjna. Potem ktoś inny zapytał: „Jak to działa z czymś takim jak Atomic Web Design, jak ich rzeczy, które zrobił Brad Frost? To tak, że możesz rozbić te kawałki i zastosować je na każdym poziomie. Atomic Design sprowadza się do najdrobniejszych szczegółów. Abstrahuje to do używania, dobrze, dobrze, mogę to zastosować za pomocą narzędzi, więc myślę, że cząsteczki. Mogę to zastosować za pomocą narzędzi, a to przekłada to, co już wiesz, na nieco inną strukturę pracy.
Andy: Naprawdę, to zmiana nazwy dla wielu rzeczy. Niczego tu nie wymyśliłem, po prostu, jak mówię, po prostu ukradłem rzeczy, które lubię. Uwielbiam sposób, w jaki myśli się o niektórych rzeczach związanych z Atomic Design. To naprawdę dobra robota. I BEM. To, co zrobił Harry, CSS odwróconego trójkąta, pomyślałem, że było naprawdę fajne. Więc po prostu wyszczerbiłem kawałki, które lubię z każdego z nich i połączyłem je wszystkie razem w tę inną hybrydową rzecz, podejście. Myślę, że więcej w przyszłości.
Drew: Czy podejście CUBE można zastosować do istniejących projektów, które już mają CSS, czy jest to coś, od czego naprawdę potrzebujesz zacząć nowy projekt?
Andy: To bardzo zależy. Więc jeśli masz zadanie typu bootstrap i masz po prostu tysiące linii niestandardowego CSS, w który zdecydowanie byłem wcześniej zaangażowany, to myślę, że możesz próbować ugasić pożar butelką wody. punkt. But if you… say, for instance, if you've got a rough BEM setup and it's gone a bit layer-y, you could use CUBE to refactor and actually pull it back into shape again.
Andy: It depends, the answer to that one. But it's doable, as with everything. If you really want it to work, Drew, you can do it if you want, can't you? The world is our oyster!
Drew: Especially if your BEM site's gone layer-y.
Andy: Yeah. Nothing worse than a layer-y BEM site!
Drew: I've noticed in the examples that you've given… and I've got an eagle eye, I've seen you've been doing this for a while… a lot of your class values in the HTML attribute are wrapped in square brackets.
Andy: Oh, God, yeah. Tell you what, Drew-
Drew: What is that about? O czym to jest?
Andy: I'll tell you what, if there's ever one thing that I've done in my whole career that's just been absolutely outrageously controversial… and you follow me on Twitter, you've seen what comes out of my mouth… it's those bloody brackets! My, God! People either love them or hate them. They're Marmite, they are.
Andy: The reason I do them is a grouping mechanism. So if you look at the way that they're structured, the way I do it is, block at the start and then I'll do a utilities after that. Then what I might do is, in between a block group and a utility group, there might be another block class. So a good example of that would be… we'll go back to the card again. But then say that there's a specific block called a CTA, like a call to action. You might have that applied to the card as well, and then your utilities are enforcing the design attributes, so the colors and all that business. So then you've got three groups of stuff.
Andy: When you come to it, if you've got that order in your head each time, you know, okay, right, this first group's blocks. Oh, that's looks like another block. I've got that one. Then it's like, right, they're definitely utility classes. Then what I might even do is, if there's a lot of design token implementation, have that in a separate group. So it's just very clear what each group is doing, and there's a separation inside of the classes there as well. I've found it really helpful. Some people find it incredibly offensive. It's definitely a do it if you want to do it. Definitely you don't have to do it.
Andy: It's quite funny, when I published that article, so many people finished halfway through to ask me, “What is it with these brackets?” I was like, “Did you finish the article? Because there's a big section at the end where it explains exactly what they're doing,” to the point where I actually had to write a bit in the middle of the article of, “If the brackets are essentially doing your head in, click here and I'll skip you all the way down to that explanation bit so you can just read about them.” It can be quite controversial.
Andy: When I've worked on really, really complex front-ends… and we did a little bit of stuff together, didn't we, last year?
Drew: Tak.
Andy: You've seen the sort of design implementation on that project that we were on. It requires that sort of grouping because there's just so much going on at the time, there's so much different stuff happening. I've just found it really, really useful over the years, and also get lots of questions about it, to the point where I was almost going to write just one page on my website that I could just fire people to to answer the question for them.
Drew: Slash, what's with the brackets?
Andy: Yeah. Slash, brackets. Have you seen that new Hey Email thing that's just come out? They've bought a domain of itsnotatypo.com, just to answer the whole Imbox, like im with an M rather than an in. Basically, I was like, “I think I need to do that,” like, whatswiththebrackets.com, and just do a one-pager about it.
Drew: It strikes me that the approach with brackets actually could be something that might be useful when using things like Tailwind or something that has a lot of classes because that can-
Andy: Yeah. Oh, God, yes.
Drew: You have classes that are addressing your break points and what have you, and then you'll have things that are for layout, things that are for color or type, or what have you. So it might also be a useful way of dealing in situations like that.
Andy: I'd definitely agree with that. A good analogy… not analogy. A good bit of info about Tailwind is that I actually quite like Tailwind. I've used that on very big projects. The one thing that really opened my eyes to Tailwind though was when I saw a junior developer try to work out what was going on, and it was really, really eye-opening because they just didn't have a clue what was happening.
Andy: I think that's one problem I've found with these sort of over-engineered approaches, which I think it's fair to say Tailwind is, is that there's a certain skill level that is required to work with it. I know the industry tends to have an obsession with seniority now, but there's still people that are just getting into the game that we need to accommodate, and I think having stuff that's closer to the language itself is more helpful in those situations because they're probably learning material that is the language as it is. So I think it's just a bit more helpful. Especially having a diverse team of people as well. Just food for thought for everyone.
Drew: People might look at all the different methodologies that are out there and say, “This is evidence that CSS is terrible and broken, that we need… all these problems have to be solved by hacking stuff on top. We need tools to fix bits of CSS. We need strict procedures for how we implement it, just to get it to work.” Should the platform be adapting itself? Do we need new bits of CSS to try and solve these problems or are we all right just hacking around and making up funny acronyms?
Andy: I think the power of CSS, I think, is its flexibility. So if you're going to program CSS, a lot of the knowledge is less of the syntax and more of the workings of a browser and how it works. I think that might be a suggestion, that the problem is that people might not have learnt CSS quite as thoroughly as they thought they might have learnt it, who created these problems. I've seen that in evidence myself. I spotted a spacing mechanism that had been invested, which was very complicated, and I thought, “This person has not learnt what padding is because padding would actually fix this problem for them, understanding how padding works and the box model.” That's not to be snidey about it.
Andy: We work in an industry now that moves at an even faster pace than it has done previously and I think there's a lot less time for people to learn things in detail. But, on that front, I think CSS still does have work to do in terms of the working group, who I think do a bloody good job. A great, shining example of their work was the Grid spec which was just phenomenal. The way that rolled out in pretty much every browser on day one, I thought that was so good.
Andy: But we've got more work to do, I think, and I think maybe the pace might need to increase a little, especially with stuff like container queries, we all love talking about them. Stuff like that I think would help to put CSS in a different light with people, I think. But I think CSS is brilliant, I love it. I've never had a problem with it in lots of years really. I do find some of the solutions a bit odd, but there you go.
Drew: What's the response been like to CUBE since you published the article?
Andy: Mind-blowing. I honestly published it as just supporting material, and that's all I expected it to be, and it's just blown up all over the place. A lot of people have been reading it, asking about it, been really interested about it. There's definitely more to come on it.
Andy: I did say in the article, I said, “Look, if people are actually quite interested in this, I'll expand on this post and actually make some documentation.” I've got bits of documentation dotted around all over the place, but to sort of centralize that, and then I was thinking of doing some workshops and stuff. So there's stuff to go. It's how Every Layout started as well. We both had these scattered ideas about layout and then we sort of merged them together. So something like that, I suppose, will come in the future.
Drew: Are there any downsides that you're aware of to using CUBE? Are there problems that it doesn't attempt to solve?
Andy: Yeah. This accent, Drew, it just won't go way, no matter what I do! In all seriousness, I think CUBE's got as close as I can get to being happy with the front-end, which is saying a lot, I think. You never know, things might change again. This has evolved over more recent years. Give it another five years, I'll probably be struggling with this and trying something else. I think that's the key point, is to just keep working on yourself and working on what you know and how you approach things.
Andy: This definitely won't work for everyone as well, I know that for a fact. I know that from my comments. I don't expect it to work for everyone. I don't expect anything to work for everyone. It's the same with JavaScript stuff: some people like the reactive stuff and some people don't. It is what it is. We're all people at the end of the day, we all have different tastes. It's all about communicating with your teammates at the end of the day, that's the important thing.
Drew: I know you as a very talented designer and developer and you, like many of us, you're just working on real projects all day, every day. But you've recently started publishing on this site, Piccalilli, which is where the CUBE CSS introduction article was. So Piccalilli is kind of a new venture for you, isn't it? What's it all about?
Andy: Very kind of you to say, Drew. You've actually worked with me, so that's high praise. But the Piccalilli thing is an evolution. So I'm a freelancer. I do client work, but I think this has become apparent with the pandemic, that that is not the most sustainable thing in the world in some industries. I think freelancing can be very, very tough, as a developer and designer. It's something that I've been doing it for so long now, 10 years… well, 12 years now actually.
Andy: Miałem ochotę zrobić coś nieco innego i wykorzystać posiadaną wiedzę i dzielić się nią z ludźmi. Zawsze byłem bardzo otwarty i dzieliłem się, i chciałem to sformalizować. Stworzyłem więc Piccalilli do pisania tutoriali, ale głównie do kursów, które tworzę: to jest główne mięso i ziemniaki. A potem jest biuletyn, który jest… ludzie naprawdę lubią biuletyn, ponieważ co tydzień dzielę się fajnymi rzeczami, które znalazłem w Internecie. To jest kręgosłup. Po prostu idzie naprawdę dobrze. To w zasadzie miejsce, w którym chcę widzieć siebie, jak robię coraz więcej w pełnym wymiarze godzin, w miarę upływu lat, jak sądzę.
Drew: Więc co dalej z Piccalilli? Czy masz coś, co wychodzisz?
Andy: Dzięki za otwarte drzwi, Drew! Zanim to nagranie wyjdzie, pierwszy kurs będzie już dostępny na żywo: Learn Eleveny from Scratch i właśnie tam dowiemy się, jak zbudować witrynę Gatsby! Nie, dowiesz się, jak zbudować witrynę Eleveny. Więc zaczynasz z całkowicie pustym katalogiem, nic w nim nie ma, jest pusty, a na końcu kończysz z naprawdę ładną stroną agencji. Uczymy się w nim wszelkiego rodzaju. Dowiesz się, jak naprawdę chodzić do miasta z Eleveny. Pobieramy dane zdalne z miejsc. Używamy CUBE CSS, aby zbudować dla niego naprawdę fajny front-end.
Andy: Jeśli chcesz dostać się do Jamstack i chcesz dostać się do generatorów statycznych stron, albo po prostu jak zbudować fajną stronę internetową, mam nadzieję, że jest to po prostu bardzo przydatny kurs. Obecnie jest edytowany w ciągu jednego centymetra swojego życia, o którym mówimy. Mam nadzieję, że będzie fajnie i użytecznie. Ale to nagromadzenie wielu rzeczy, które robiłem przez ostatnie kilka lat. Więc powinno być zabawnie.
Andy: Więc kup to, a zrobię kod rabatowy, zrób jak smashingpod za 40% zniżki, a dostaniesz go, gdy się ukaże.
Drew: Niesamowite. Połączymy to. Czy wiesz już, jak poprawnie przeliterować Piccalilli?
Andy: Byłem z Chrisem i Davem podczas ShopTalk Show i powiedziałem tam: „Jeśli jest jakaś rzecz, do której chciałbyś mnie zatrudnić, to napisanie Piccalilli ręcznie za pierwszym razem, nawet o tym nie myśląc”, ponieważ mam napisałem to słowo tyle razy, że po prostu wiem dokładnie, jak je przeliterować na pamięć. Więc odpowiedź na twoje pytanie brzmi tak.
Drew: No cóż, wciąż walczę, tyle ci powiem!
Andy: To trudne. O Boże. Całkowicie współczuję. Dużo czasu zajęło mi nauczenie się pisowni, ale jest to jedno z tych słów w naszym słowniku. W tym roku staram się przeliterować konieczne bez popełnienia błędu ortograficznego!
Drew: Więc nauczyłem się wszystkiego o CUBE CSS. O czym się ostatnio dowiedziałeś, Andy?
Andy: Wiesz co? To cię zaskoczy, Drew. MySQL jest tym, o czym ostatnio się dowiedziałem. Więc w zasadzie Piccalilli jest całkowicie publikowana samodzielnie. Jest to witryna Eleventy, ale kryje się za nią API, a za nią baza danych MySQL. Rzeczy, które dają ludziom kupione treści, wymagają dość mocnych zapytań. Więc właściwie zainwestowałem w trochę MySQL… zwłaszcza różnicę między złączeniami, z których nie zdawałem sobie sprawy, że istnieje różnica między każdym typem złączenia. To było naprawdę przydatne i zaowocowało dość szybkimi interakcjami z bazą danych.
Andy: Kiedyś prowadziłem coś, co nazywało się Front-End Challenges Club, a kiedy pierwszy raz go uruchomiłem, po prostu się zawalił i umarł sam, ponieważ MySQL był co najmniej tandetny. Więc naprawdę się tego nauczyłem, ponieważ w ogóle nie jestem osobą backendową, jestem popychaczem pikseli. Więc zdecydowanie nie leży to w mojej gestii. To bardziej twoja szyja w lesie, prawda? Uważam, że to naprawdę fajne, MySQL. Naprawdę lubię to pisać. To naprawdę fajny język instruktażowy, prawda?
Drew: Jest, jest świetnie. Nauczyłem się SQL w szkole.
Andy: Łał!
Drew: Teraz rozmawiamy jakieś 20 lat temu.
Andy: Czy w tamtych czasach mieli komputery?
Drew: Tak, tak. Musieliśmy wietrzyć-
Andy: Czy musiałeś pisać to odręcznie?
Drew: Musieliśmy je zlikwidować! Zrobiliśmy. Ale, mówię ci, dla programisty jest to podobne do uczenia się tabliczki mnożenia: jedna z tych rzeczy, która wydaje się trochę uciążliwa, ale kiedy już wprawisz się biegle, po prostu staje się użyteczna od czasu do czasu.
Andy: Tak. Z pewnością. Są też naprawdę namacalne różnice. Naprawdę widzisz różnicę w prędkości. Naprawdę lubię pracować z Node, ponieważ jest to naprawdę szybkie, ale Node i MySQL to po prostu… niezbyt powszechny wybór, ale myślę, że to całkiem dobry wybór. Myślę, że to działa naprawdę dobrze. Więc jestem z tego zadowolony. Jak wiesz, nie lubię pisać PHP. Więc to nigdy nie będzie możliwe.
Drew: Jeśli, drogi słuchaczu, chciałbyś usłyszeć więcej od Andy'ego, możesz śledzić go na Twitterze, gdzie jest w hankchizljaw. Możesz znaleźć Piccalilli na piccalil.li, gdzie znajdziesz również artykuł opisujący CUBE CSS, a my oczywiście dodamy linki do wszystkich tych w notatkach z programu.
Drew: Dzięki za przybycie do nas dzisiaj, Andy. Czy miałeś jakieś słowa pożegnalne?
Andy: Bądź bezpieczny i noś maskę.