Comparing Modern CSS Solutions (Tailwind vs MUI vs Bootstrap vs Chakra vs...)

Theo - t3β€€gg
5 Oct 202235:58

Summary

TLDRA passionate and thought-provoking exploration of the role of UI libraries and frameworks in web development. The speaker delves into the benefits of Tailwind CSS and how it revolutionized their approach to building user interfaces. They contrast Tailwind with other popular solutions like Material UI, styled-components, and Chakra UI, highlighting the unique advantages of Tailwind's CSS utility-first approach. The discussion touches on topics such as design flexibility, developer experience, and the importance of prioritizing user experience over reliance on opinionated libraries. With a mix of insightful analysis and personal anecdotes, this video offers a fresh perspective on the challenges and opportunities in crafting exceptional web applications.

Takeaways

  • 🌐 The speaker categorizes UI libraries/frameworks into three main types: CSS extensions (like Sass, Less, Tailwind), behavior libraries (like Headless UI, Radix UI), and style systems (like Bootstrap, Material UI).
  • 🎨 The speaker strongly advocates for using Tailwind CSS as it gives developers more control over styling, is easy to use, and doesn't impose a ceiling on design quality like other UI libraries.
  • 🚫 The speaker argues against using opinionated UI libraries like Material UI or Bootstrap as they limit the potential design quality and often require extensive workarounds when their built-in components don't meet requirements.
  • 🧩 The speaker recommends combining libraries from different categories (e.g. Tailwind for styling, Headless UI for behavior) to build a custom UI system tailored to the project's needs.
  • πŸ’‘ The speaker believes front-end developers should take ownership of the styling and UI architecture instead of relying on third-party libraries that dictate the structure.
  • 🧠 The speaker highlights the cognitive overhead of learning and working with complex UI libraries like Material UI or Chakra UI, which require developers to understand the library's internals and conventions.
  • πŸš€ The speaker finds that Tailwind CSS allows for a more efficient and enjoyable development experience, enabling developers to focus on building great user interfaces without being constrained by the limitations of a particular library.
  • 🎨 The speaker emphasizes the importance of separating logic, behavior, and styles in components, and appreciates Tailwind's approach of keeping these concerns separated while allowing flexibility in how they are combined.
  • 🀝 The speaker notes that Tailwind is appreciated by designers, back-end developers, and front-end developers alike, making it a more collaborative and inclusive solution for building user interfaces.
  • 🌟 The speaker believes that users deserve the best possible user experience, which can be achieved by taking control of the UI architecture and not settling for the limitations imposed by third-party libraries.

Q & A

  • What are the three core types of UI libraries discussed in the script?

    -The three core types of UI libraries discussed are: 1) Extensions of CSS (like Sass, Less, and Tailwind), 2) Behavior libraries (also known as headless UI libraries, like Radix, react-aria), and 3) Style systems (component libraries with built-in styles, like Tailwind UI, Daisy UI, Material UI).

  • What is the main difference between Tailwind and Material UI (MUI)?

    -Tailwind is an extension of CSS that provides a better way to write CSS, while Material UI is a style system that offers pre-designed components with built-in styles. Tailwind allows developers to build their own style system, while MUI limits the quality of design to its opinions and predefined components.

  • Why does the author prefer Tailwind over other UI libraries?

    -The author prefers Tailwind because it makes them faster at developing style systems, improves their CSS skills, and doesn't impose a ceiling on the quality of their application. Additionally, Tailwind is loved equally by designers, back-end developers, and the author themselves.

  • What is the catch with using Tailwind?

    -The catch with Tailwind is that it's inline CSS, so everything is defined at a component level by default, making it less reusable by design. However, developers can choose to break out reusable styles if needed.

  • How does the author describe the experience of using styled-components?

    -The author describes the experience of using styled-components as painful and bottlenecking the developer experience. It forces developers to rip out DOM elements just to apply styles, making it difficult to track down the source of UI bugs and breaking other parts of the application when making changes.

  • What is the author's opinion on using component libraries like Material UI?

    -The author believes that using component libraries like Material UI can limit the maximum quality of the application. They argue that as front-end developers, they should own their style systems and solutions, rather than being limited by external dependencies.

  • What is the role of behavior libraries (like Radix, react-aria) in the context of UI development?

    -Behavior libraries handle the behaviors of UI components, such as dropdowns, modals, and accessibility requirements. They don't define styles but ensure that the components behave correctly on the DOM according to expectations and accessibility needs.

  • How does the author suggest combining different types of UI libraries?

    -The author suggests combining Tailwind (an extension of CSS) with Tailwind UI or Daisy UI (style systems built on top of Tailwind), and using behavior libraries like headless UI or Radix to handle component behaviors. This approach allows developers to build their own style system while ensuring correct component behavior and accessibility.

  • What is the author's stance on writing user interfaces and owning the style system?

    -The author emphasizes the importance of front-end developers owning their style systems and solutions. They believe that as developers building user interfaces, they should not bottleneck the quality of their applications by relying solely on external dependencies that limit their control over the design and architecture.

  • What advice does the author give to those who find Tailwind challenging or prefer not to write user experiences?

    -For those who find Tailwind challenging or prefer not to write user experiences, the author suggests trying Daisy UI (a style system built on top of Tailwind). If that doesn't work, they recommend using Material UI, but with the understanding that it comes with a limit on the maximum quality of the application.

Outlines

00:00

🌐 An Introduction to UI Libraries and Frameworks

The paragraph introduces the topic of UI libraries and frameworks, specifically discussing the author's journey with different solutions like Bootstrap, styled components, Material UI, Chakra UI, Radix, and React Aria. It highlights the author's initial disinterest in Tailwind CSS but eventual love for it after using it on a team project. The paragraph sets the stage for exploring the roles and types of UI libraries.

05:01

😑 Misconceptions About Tailwind and Material UI

This paragraph addresses the common misconceptions about Tailwind CSS and Material UI. It emphasizes that Tailwind is a better way to write CSS, providing a more flexible and customizable approach than opinionated component libraries like Bootstrap. The author argues that comparing Tailwind to Material UI doesn't make sense as they serve different purposes. Tailwind enables developers to build their own style system, while Material UI enforces a predefined set of styles and components.

10:01

πŸ“ Categorizing UI Libraries and Frameworks

The paragraph categorizes UI libraries and frameworks into three core types: extensions of CSS (like Sass and Less, including Tailwind), behavior libraries (like Headless UI, Radix, and React Aria), and style systems (like Tailwind UI, Daisy UI, and Mantine). It explains the differences between these types and discusses the importance of building a component library for consistency across an application. The author advocates for using solutions that combine Tailwind with libraries like Tailwind UI or Daisy UI for better control and flexibility.

15:02

🧩 Understanding the Roles of Behavior Libraries and Style Systems

This paragraph delves deeper into the roles of behavior libraries and style systems. It clarifies that behavior libraries like Radix UI and React Aria handle accessibility and interaction behaviors, while style systems like Tailwind UI and Daisy UI manage the visual styles. The author emphasizes the importance of separating these concerns and using the appropriate tools for each aspect of UI development.

20:04

πŸš€ The Power and Flexibility of Tailwind CSS

The paragraph discusses the author's approach to writing CSS with Tailwind, which they call "Zen mode CSS." It highlights how Tailwind allows for faster and more consistent styling without enforcing a specific design system. The author contrasts this with the limitations of style systems like Material UI, which impose a predefined range of design possibilities. The paragraph also touches on the benefits of using Tailwind in combination with behavior libraries like Headless UI.

25:06

πŸ—οΈ Architectural Considerations with UI Libraries

This paragraph examines the architectural implications of using different UI libraries. It highlights how solutions like Material UI and styled components force developers to structure their applications around the library's architecture, potentially leading to bottlenecks and limitations. In contrast, Tailwind allows developers to own their application's architecture and make decisions about how to break down and organize components and styles.

30:07

πŸ’š The Benefits of Tailwind and Embracing CSS

The paragraph outlines the benefits of using Tailwind CSS and embracing the responsibility of styling applications. The author argues that as front-end developers, they should own their style systems and not be limited by external dependencies. Tailwind is praised for making the author faster at developing style systems, improving their CSS skills, and not enforcing a ceiling on the quality of their applications. Additionally, the paragraph highlights how Tailwind is loved by designers, back-end developers, and the author alike.

35:08

πŸŽ‰ Concluding Thoughts and Recommendations

In the concluding paragraph, the author encourages viewers to try Tailwind CSS or consider alternatives like Daisy UI if they don't want to directly write styles. However, the author cautions against adopting libraries like Material UI, which can limit the maximum potential quality of an application. The paragraph emphasizes that users deserve better than being constrained by opinionated libraries and encourages front-end developers to take ownership of their style systems and user experiences.

Mindmap

Keywords

πŸ’‘UI Libraries

UI Libraries refer to pre-built sets of user interface components and utilities that developers can use to construct websites and applications. The video discusses different types of UI Libraries, such as CSS extensions (Sass, Less, Tailwind), behavior libraries (Headless UI, Radix UI, React Aria), and style systems (Tailwind UI, Daisy UI, Material UI). These libraries aim to streamline the development process by providing reusable UI elements and design patterns.

πŸ’‘Tailwind CSS

Tailwind CSS is a utility-first CSS framework that provides a set of low-level utility classes to build custom user interfaces. The video presenter is a strong advocate of Tailwind and discusses how it has changed their approach to styling and building user interfaces. Tailwind is presented as a CSS extension that offers greater flexibility and control over styling compared to more opinionated component libraries like Material UI or Bootstrap.

πŸ’‘Component Libraries

Component Libraries are collections of pre-built UI components that developers can use in their applications. The video emphasizes the importance of having a centralized component library to maintain design consistency across an application. However, the presenter argues for building one's own component library or using libraries built on top of more flexible CSS primitives like Tailwind, as opposed to relying solely on opinionated component libraries like Material UI.

πŸ’‘CSS

CSS (Cascading Style Sheets) is a style sheet language used to describe the presentation of a document written in a markup language like HTML. The video highlights the importance of understanding and mastering CSS for front-end developers. It argues that Tailwind CSS enables developers to write CSS more efficiently and consistently, while avoiding the pitfalls of overly abstracted component libraries that can limit design flexibility.

πŸ’‘Design Systems

Design Systems are collections of reusable components, design patterns, and style guidelines that help ensure consistency and coherence across an application or suite of applications. The video discusses the tradeoffs between different approaches to building design systems, such as using opinionated component libraries, custom CSS-based systems, or a combination of both. The presenter advocates for owning and building one's own design system to maintain control over the architecture and quality of the user interface.

πŸ’‘Inline Styles

Inline styles refer to the practice of applying styles directly to HTML elements using the `style` attribute. The video argues that inline styles, which were previously frowned upon, can be a valid and efficient approach when used judiciously. Tailwind CSS, in particular, encourages the use of inline utility classes to style components, as opposed to relying on external stylesheets or CSS-in-JS approaches like styled-components.

πŸ’‘Accessibility

Accessibility refers to the practice of ensuring that websites and applications are usable by people with disabilities, including those with visual, auditory, motor, or cognitive impairments. The video discusses the importance of using behavior libraries like Headless UI or Radix UI, which encode accessibility best practices into their components, ensuring that users with disabilities can interact with the application effectively.

πŸ’‘Developer Experience

Developer Experience (DX) refers to the overall experience and productivity of developers when working with a particular technology, framework, or tooling. The video argues that Tailwind CSS and building one's own design system improve the developer experience by providing more control, flexibility, and a better understanding of the underlying CSS and architecture. In contrast, opinionated component libraries can bottleneck the developer experience by imposing limitations and requiring intimate knowledge of the library's inner workings.

πŸ’‘Zen Mode

The presenter uses the term "Zen Mode" to describe the experience of writing styles with Tailwind CSS. It refers to a state of flow and focus, where developers can quickly and efficiently style components without being bogged down by complex abstractions or external stylesheets. The video suggests that Tailwind CSS enables developers to achieve this "Zen Mode" state, leading to increased productivity and better-looking software solutions.

πŸ’‘Architecture

Architecture refers to the overall structure, organization, and design of a software system or application. The video emphasizes the importance of owning and controlling the architecture of one's application, particularly when it comes to the user interface. The presenter argues that relying too heavily on opinionated component libraries can limit architectural flexibility and force developers to conform to the library's design decisions, potentially hindering the quality and scalability of the application.

Highlights

Tailwind is a better way to do CSS and own the style system, as opposed to using opinionated pre-designed components from libraries like Bootstrap or Material UI.

Material UI limits the quality of design by capping how good an application can be, while Tailwind expands the range of achievable design quality.

As front-end developers, we should own our style systems and solutions, building applications that aren't limited by the libraries we choose.

Tailwind makes writing CSS consistent, fast, and enjoyable, entering a 'Zen mode' for styling, unlike previous frustrating experiences.

Material UI, styled-components, and Chakra UI force developers to break out components and styles in ways that bottleneck the application's architecture and development experience.

Tailwind allows developers to own the architecture and relationships between components, logic, and styles, without being limited by external dependencies.

The catch with Tailwind is that styles are defined at the component level by default, which can be less reusable by design but significantly improves the developer experience.

Headless UI and Radix UI provide unstyled, accessible components for building behaviors, while Tailwind, Daisy UI, and Mantine handle the styling aspect.

Tailwind UI shows how to combine Tailwind with headless UI components, providing both styles and behaviors.

Styled-components pushed forward the ability to build component systems in React, but ultimately forces developers to break out styles in a way that harms the architecture.

Inline styles, as enabled by React Native, are actually good for quickly and efficiently applying styles to user interfaces.

Developers should separate the logic and behavior of a component from its styles, making the styles section focused on presentation and the user experience.

Tailwind made the speaker care more about styling and user experiences, as opposed to previously shrugging off the conversation.

Tailwind is loved equally by designers, back-end focused developers, and front-end developers, unifying different roles in building user interfaces.

Users deserve better than being limited by the maximum quality enforced by libraries like Material UI, which is a scary thing to adopt.

Transcripts

play00:00

let's talk about UI libraries and

play00:02

Frameworks and how we build our user

play00:04

interfaces in web applications

play00:08

I am pretty well known for my love of

play00:10

Tailwind what I don't think I'm known

play00:12

for as much is my history with other UI

play00:14

Frameworks and specifically the lack of

play00:17

care I had for most of them when I

play00:19

started doing web development the go-to

play00:22

solution was bootstrap and it was fine

play00:24

when I got back into web development and

play00:26

got into the react World we were just

play00:29

starting to move into styled components

play00:30

and it was fine I then started playing

play00:33

with things like material UI chakra for

play00:35

a bit dove into Radix and react Aria a

play00:38

whole bunch but this thing kept popping

play00:40

up called tailwind and I looked at it

play00:41

it's like oh this looks like bootstrap

play00:42

but worse I don't think I'm going to be

play00:44

interested in this so I ignored it for a

play00:46

while then I used it on a team that I

play00:48

was working on because another one of

play00:50

the developers liked it and generally

play00:51

when I'm running a team I don't care

play00:52

enough about UI Frameworks to take a

play00:54

strong stance and I would let other

play00:56

teammates bring on the things they cared

play00:57

about and holy [Β __Β ] I fell in love with

play00:59

Tailwind fast it didn't feel like a

play01:02

component Library like this big

play01:03

opinionated thing forcing me to do stuff

play01:06

in a certain way it was way more focused

play01:09

it was just CSS but easier to write and

play01:12

it's fully changed my understanding of

play01:15

what the role of libraries is in my UI

play01:18

design and I wanted to go over a bit how

play01:21

I have changed my own thinking on what a

play01:23

UI Library even is much less like its

play01:26

role in a code base and how we build

play01:28

around them what are the types of

play01:30

component libraries

play01:32

let me open up everyone's favorite app

play01:34

Quick component

play01:36

or I should say rather than the

play01:38

component Library UI libraries I think

play01:40

that there are three core types

play01:43

we have extensions of CSS this would be

play01:46

things like SAS less and I will argue

play01:50

throughout this Tailwind we have

play01:52

Behavior libraries otherwise known as

play01:54

headless UI libraries pretty often

play01:57

things like headless UI

play02:00

Radix

play02:02

react Arya and there's tons others that

play02:04

I'm sure I'm forgetting and glossing

play02:06

over and I apologize to all of them this

play02:07

is less about any one specific Library

play02:09

more about the types of libraries and

play02:11

how to make good decisions around them

play02:13

the third and one that I see people

play02:16

talking about the most often is style

play02:19

systems so component or so libraries

play02:22

that have styles built in things like

play02:25

Tailwind UI Daisy UI Mantine and you

play02:30

could argue that mui Falls here but

play02:32

we're going to go into that in a bit so

play02:34

I wanted to start with the premise that

play02:35

these are the three core types of

play02:39

libraries that exist or at the very

play02:41

least the three spaces that a library

play02:44

can exist within that all said libraries

play02:47

don't have to live in exclusively one of

play02:49

these so here I made a quick Venn

play02:51

diagram splitting these three types up

play02:53

into CSS plus plus so things that are

play02:56

like CSS but better Behavior libraries

play02:58

which are things that encode behaviors

play03:00

like a drop down a button focus and all

play03:03

of the chaotic accessibility types of

play03:05

things behind that and then style

play03:07

systems which are things like bootstrap

play03:09

that are very much component systems

play03:13

that you apply on top of your Dom to

play03:15

quickly just drop some things into these

play03:17

like we can put Tailwind in here but we

play03:21

could also throw like sass in here for

play03:23

Behavior libraries I mentioned Radix

play03:26

headless UI react Arya

play03:29

so react Arya

play03:33

all right reactor is not one of these

play03:35

this is bootstrap it's probably the best

play03:37

thing for here I think it's very

play03:39

important to recognize where the tools

play03:42

you're looking at using and comparing

play03:44

fall on a chart like this also throw

play03:46

Tailwind I guess actually telling you if

play03:49

it's somewhere more interesting the

play03:50

thing that I keep having come up that

play03:52

has been increasingly frustrating to me

play03:54

is material UI mui and people keep

play03:57

asking me why am I using tailwind and

play03:59

not using mui why would I use Tailwind

play04:01

when it's basically just bootstrap when

play04:03

I could use mui instead do you see why I

play04:05

get confused when people say Tailwind is

play04:07

like bootstrap so you should use my UI

play04:10

instead do you see why this line of

play04:12

questioning annoys me it does not make

play04:15

any sense at all Tailwind is a better

play04:18

way to do CSS I picked Tailwind because

play04:20

I want to do some CSS I want to have a

play04:22

stylus system that I own I want to build

play04:24

my own style system using Talent

play04:27

bootstrap is a style system itself a

play04:29

single class in Tailwind usually results

play04:32

in one line of code of CSS so if I go to

play04:36

the Tailwind docs quick and I'll just

play04:38

pick a random piece we'll go to justify

play04:40

content you see here all the justifies

play04:42

mapped to exactly one line of CSS now

play04:45

let's go to the bootstrap docs they have

play04:47

some amount of like helpers in their uh

play04:51

layout stuff like these are kind of

play04:53

helpers

play04:54

however what they expect you to use are

play04:56

their buttons

play04:57

button

play04:59

let's see how much CSS it provides they

play05:00

don't even tell us in here button

play05:02

primary adds all of this [Β __Β ] button ads

play05:05

all of this [Β __Β ] can you customize

play05:07

bootstrap sure are you going to have fun

play05:10

customizing 50 lines of CSS because you

play05:14

want to change how the button behaves

play05:15

and you committed to bootstrap no you're

play05:17

gonna have a miserable time bootstrap

play05:18

gives you opinionated pre-designed

play05:21

components that if you're happy with

play05:23

cool but the reason people kept going to

play05:25

bootstrap was a combination of CSS being

play05:28

hard to write design being hard to pick

play05:30

up and developers being lazy one of

play05:33

those has been resolved by tailwind and

play05:35

developers can who are lazy are more

play05:37

likely to you or get things done

play05:39

properly with tailwind and then there

play05:41

are also now Solutions like Daisy UI

play05:43

which I bring up a lot on stream because

play05:45

Daisy UI is built on top of Tailwind

play05:47

instead of being built on top of

play05:49

traditional CSS which means you can take

play05:53

a component here use their button and

play05:56

underneath it is a bunch of Tailwind

play05:57

classes and you can even here take a

play06:00

look at the HTML I thought they actually

play06:01

dumped the CSS that it creates for you

play06:03

generally though the cool part of Daisy

play06:06

UI is that rather than being built on

play06:07

top of CSS with tons of chaotic stuff

play06:09

jcwise built on top of Tailwind

play06:11

personally I prefer the way Tailwind UI

play06:13

does this I mean yeah I'm a Tailwind

play06:15

Fanboy but tail and UI although it costs

play06:17

money I'll be clear yes this costs money

play06:19

does good design cost money it's the

play06:21

thing you'll learn quickly as you like

play06:22

start running companies and Building

play06:23

Things the code examples here like the

play06:25

stuff you get from Taylor UI you don't

play06:27

npm install it don't npm install your

play06:30

style system please don't npm install

play06:31

your style system your website deserves

play06:34

better they just give you the source

play06:35

code

play06:36

so when I use Tailwind UI I go through

play06:39

here I look at these class names and

play06:41

then I copy paste things into my code

play06:42

base and that's how you use Tailwind UI

play06:45

it's great yes I did buy it I actually

play06:46

bought the team license at ping because

play06:48

it was worth it for us it is something

play06:50

we use heavily we care a lot about so we

play06:52

bought the team license fun fact word

play06:55

wraps a Thing If long lines are the

play06:57

thing your character you're complaining

play06:59

about

play07:00

you just don't write

play07:02

a lot of UI like lines get long this

play07:05

lets me write everything very fast I

play07:08

I'll go into pros and cons of all these

play07:09

Solutions in a bit but I want to keep

play07:11

placing things where they they live and

play07:13

discussing the the value that they bring

play07:15

in those places so in here we can put

play07:17

Tailwind UI because it is very

play07:19

specifically a style system but it shows

play07:21

you how to combine headless UI and

play07:23

Tailwind which is really interesting

play07:24

because Tailwind UI is arguably here but

play07:27

it lives here it looks like honestly if

play07:29

we were to put Master somewhere it would

play07:31

probably go here because it's trying to

play07:32

be a combination of a style system and

play07:34

building their own virtual CSS language

play07:36

it's interesting I'm not sure how I feel

play07:38

about it just yet but it's a very

play07:40

interesting development and I'm excited

play07:42

to see where it goes what else is there

play07:43

uh Mantine I think Mantine is basically

play07:46

just like a new flavor of mui focus on

play07:50

react 100 plus components yeah it looks

play07:53

like Mantine definitely fits within here

play07:55

so I'm gonna do something important

play07:56

we're going to label this section here

play07:58

this is component libraries a harsh

play08:01

reality is most companies need a

play08:03

component library of some form whether

play08:06

it's one that they built themselves or

play08:08

it's one that they npm installed from

play08:10

somewhere else component libraries allow

play08:13

for a centralized place to unify a

play08:16

design language across an application so

play08:18

buttons consistently look the same so

play08:20

drop downs consistently look the same

play08:23

Etc I would argue this is our job as

play08:25

front-end developers we are building

play08:27

user interfaces I personally think we

play08:30

are giving up one of the most important

play08:32

parts when we npm install a solution

play08:35

from here and even if you don't want to

play08:37

build your own component Library I think

play08:40

it gives you significantly more control

play08:42

and flexibility if you use the component

play08:45

libraries that are built they're the

play08:47

style systems that are built on top of a

play08:48

better CSS primitive so if you combine

play08:50

something like Tailwind with Tailwind UI

play08:52

or use tail ended headlessy why to build

play08:54

your own thing or grab Daisy UI which I

play08:57

guess kind of fits like here and here

play08:59

it's using Tailwind but what Daisy UI

play09:01

itself is just here but by using tail

play09:03

end it fits between the two but using

play09:05

these types of solutions to get you to

play09:07

here

play09:08

because we all kind of want to live in

play09:10

the middle we all have to be in the

play09:11

middle to some extent with the things

play09:13

that we built entailment is just giving

play09:15

us this one thing here and I think this

play09:17

is where a lot of the pushback on

play09:18

Tailwind comes from is people think it's

play09:20

here and they get mad because they don't

play09:22

like things here it's not here and they

play09:24

get mad because it doesn't do the things

play09:25

that are here and they're used to being

play09:27

here and they don't see any reason to

play09:30

leave I think those are the core reasons

play09:32

why Tailwind gets so much [Β __Β ] and I

play09:34

think all of those are are pretty unfair

play09:36

and come from a place of bias the bias

play09:38

being I don't have to think about my

play09:40

Styles or we're building websites we're

play09:42

building interfaces we're building user

play09:43

experiences we should think about our

play09:45

styles to me not doing this would be the

play09:48

equivalent of a back-end engineer not

play09:50

thinking about their data like you

play09:51

should think a decent bit about where

play09:53

your data goes and how you work with it

play09:55

there are packages that will make that

play09:56

easier for sure but abstracting that

play09:58

away into something like this just means

play10:00

you have to learn way weirder [Β __Β ] when

play10:03

you have a problem that the libraries

play10:05

that are provided do not solve there

play10:07

have not been any problems we have had

play10:09

at ping with Tailwind that we couldn't

play10:11

solve with Tailwind or around Tailwind

play10:14

very easily when it comes to heavier

play10:17

component libraries you need to know

play10:19

them very well and you need to know

play10:20

their limitations very well in order to

play10:22

work around them at all simple things

play10:24

like resetting a sub input in a field or

play10:27

in a form in mui requires an intimate

play10:30

knowledge of react and intimate

play10:32

knowledge of forms and an intimate

play10:34

knowledge of mui's weird prop passing

play10:36

behaviors so you can actually get a ref

play10:38

down to the input underneath those

play10:40

problems are pretty damn common in mui

play10:44

land and in this component Library space

play10:47

when I have those problems I go to my

play10:49

designer developer team that builds the

play10:52

component library right now that team is

play10:54

Brynn previously that team was a

play10:56

fantastic group of Engineers at twitch

play10:58

but you should own this even if you

play11:00

aren't particularly familiar yet with

play11:02

how to build these things maybe for your

play11:05

first ever app if you're okay with

play11:07

things not working exactly exactly how

play11:08

you need them to npm install mui use

play11:11

that for a little bit and as soon as you

play11:13

start running into problems and

play11:14

frustrations on your next project drop

play11:16

it there is very little need for anyone

play11:19

other than like a back-end leaning

play11:21

developer that's trying to ignore the

play11:22

front end as much as possible to use

play11:24

something like mui I don't want to shout

play11:26

out one person in particular the one mui

play11:28

user that I'm okayish with him using mui

play11:31

Aiden the creator of fossibot he's a

play11:33

back-end engineer he wants to focus on

play11:35

back-end engineering he wants to build

play11:36

Crazy infrastructure and crappy

play11:39

interfaces to get to it mui lets him do

play11:41

that very very quickly on a website that

play11:43

looks

play11:44

but that was the goal mui and things

play11:46

like it are choosing to limit the

play11:48

quality of your design to the opinions

play11:51

of mui and what it's providing

play11:55

so if we were to do another my favorite

play11:57

chart types a spectrum now let's say we

play11:59

have zero ugly on the other side we have

play12:02

10 beautiful I think all of these

play12:04

Solutions enable very different ranges

play12:06

of capability so let's start with just

play12:09

vanilla CSS I think vanilla CSS can get

play12:13

you

play12:14

this whole range easily I think

play12:16

something like Tailwind cuts off the

play12:19

lower half with some of the opinions

play12:20

encoded if you really want to you can

play12:22

make Tailwind ugly but it's like it

play12:24

takes a good bit of effort because the

play12:26

things it provides are solid so Tailwind

play12:28

gives you a slightly better starting

play12:30

point in terms of how ugly your things

play12:31

can be like makes consistency much

play12:33

easier and then gives you a way higher

play12:36

cap something like material UI starts

play12:39

you off at a slightly better place but

play12:41

it caps off incredibly hard because at

play12:45

that point you're gutting mui and

play12:46

building your own thing you can do that

play12:48

I'm not going to say you can't I'm just

play12:49

going to say you'd be way better off

play12:51

starting with almost anything else that

play12:53

is not going to be the best path to what

play12:55

your goals are I can I can promise you

play12:58

that much and if we look at what our

play13:00

other Solutions do we have in here yeah

play13:02

don't use bootstravis 2022 you know

play13:04

better I think this summarizes this

play13:06

particular point I wanted to make that

play13:07

like Tailwind greatly expands the range

play13:11

of quality of design that you can create

play13:14

but you are creating it material UI is

play13:17

committing to live within a certain

play13:19

range and depending on your goals like

play13:21

if your goal is I've been here for too

play13:24

long and I want out right now maybe

play13:26

material UI is an okay solution but if

play13:29

your goal is to build something and move

play13:31

it to the right as hard far as you can

play13:33

over time material UI is not going to

play13:35

help you get there all material UI is

play13:37

going to do is get you out of this range

play13:39

once you're out of that range it's very

play13:41

limited with how much further it's going

play13:43

to help you I think there's one more

play13:44

important sub-branch to go on here and

play13:47

somebody just called it out in chat

play13:48

styled components actually we'll go back

play13:50

to talk about somebody else asked I

play13:51

apparently I wasn't clear enough what

play13:52

the difference between headless UI and

play13:54

Daisy UI that's a very good point I want

play13:56

to be very clear about the difference

play13:57

between these things these are CSS these

play14:00

are JavaScript these change how things

play14:02

look these change how things work Daisy

play14:05

UI is a bunch of pre-written Tailwind

play14:08

classes so that you have a button that

play14:11

looks a certain way headless UI is a

play14:13

bunch of unstyled components and hooks

play14:16

to make a drop down look and work the

play14:20

right way with accessibility to make a

play14:22

modal look and work the right way with

play14:23

accessibility these are how you actually

play14:26

construct the elements on the Dom with

play14:28

behaviors in JavaScript that handle your

play14:32

like behaviors for your components these

play14:36

are how they look I would argue these

play14:38

two have way less in common than

play14:39

anything else I I hope this helps

play14:40

clarify the difference between them but

play14:42

something like Tailwind UI for example

play14:44

in their code

play14:46

uh this one doesn't have it uh maybe if

play14:49

I use react it will

play14:51

no it won't on some of the examples in

play14:53

Tailwind UI uh I don't know if they're

play14:55

going to show any here maybe they have

play14:57

like one drop down or something okay so

play14:59

this might work uh the heading maybe

play15:01

they have code in this one

play15:04

yes they do so in here you see menu and

play15:06

transition are being imported from

play15:07

headless UI that's because these

play15:10

components include behaviors they don't

play15:13

include Styles so when you do menu as

play15:15

div you're using menu the JavaScript

play15:19

helper that the Tailwind team wrote as

play15:22

part of headless UI

play15:24

to make this correctly appear in the Dom

play15:27

as a menu nav element such that these

play15:30

buttons behave correctly and these

play15:32

transitions introduce and remove items

play15:34

correctly according to Ada expectations

play15:38

and accessibility needs so this is the

play15:42

JavaScript behaviors that you should be

play15:43

writing in order to make your things

play15:45

accessible and behave correctly provided

play15:48

as a component Library if you go to like

play15:50

Radix UI or react Aria I think Radix UI

play15:53

is the one that I see people talking

play15:55

about the most that's pretty dope Radix

play15:58

UI does not have any Styles at all they

play16:00

even call it out here it's unstyled

play16:02

accessible components for building high

play16:03

quality Design Systems and web apps in

play16:05

react these Primitives handle things

play16:08

like an accordion so when you open and

play16:10

close it

play16:11

things appear underneath and still

play16:14

adhere to

play16:15

expectations around Aria labeling and

play16:17

such

play16:19

this doesn't Define how it looks at all

play16:22

this purely makes it behave correctly

play16:25

and it does

play16:26

nothing else Behavior libraries are for

play16:28

how things behave style systems are for

play16:30

how things look CSS plus is for how you

play16:34

make them look a certain way somebody

play16:35

asked what do I do if I need a date

play16:36

picker or a similar component with

play16:38

Tailwind usually I start on Tailwind UI

play16:40

it looks like they don't have a date

play16:42

picker so a Google search react dick

play16:43

picker I look at this I can see if it's

play16:46

fine and I use it date Pickers are the

play16:49

weirdest example ever because date

play16:51

Pickers uniquely suck and should be

play16:53

provided by the browser and aren't

play16:55

I would npm install a date picker

play16:57

because it's a very complex piece of UI

play16:58

I don't feel like [Β __Β ] building it

play17:00

falls in a very very unique category in

play17:04

that way oh we did not talk about chakra

play17:06

so if I understand correctly chakra also

play17:10

falls under here but it like Blends into

play17:12

the style system a bit I've only played

play17:14

this chakra a bit and kind of annoyed me

play17:15

oh it looks like it has a very it almost

play17:18

looks like this actually

play17:19

chakra's exactly like Mantine no Mantine

play17:22

is way more like fully featured

play17:25

components like it has a hundred plus

play17:27

components

play17:28

this is not that that chakra has like 20

play17:31

components at most if I recall yeah they

play17:34

don't have anywhere near as much stuff

play17:36

ah it kind of is all three though

play17:38

because it has its weird like CSS plus

play17:41

Syntax for its margin definitions and

play17:43

[Β __Β ] it kind of has Styles built in that

play17:46

you have to be familiar with to work

play17:47

around it has hooks for behaviors and

play17:50

things like that when I said we want to

play17:52

be here I meant we want to build here we

play17:55

want to build the thing by combining the

play17:56

best parts from these areas I I have

play17:59

tried or I haven't tried Mantine I've

play18:01

tried chakra a little bit and it felt

play18:03

like

play18:03

another component system to learn and

play18:06

another CSS solution to learn and

play18:09

another style system to learn another

play18:11

Spectrum we could look at here of like a

play18:14

vertical it's CSS and on the top here

play18:17

it's some weird [Β __Β ] and on this

play18:21

spectrum tailwind's pretty low

play18:23

it's pretty close to just being CSS I'd

play18:26

even say bootstraps not too much further

play18:27

I hope it starts a little further but

play18:29

something like chakra just hangs out up

play18:31

here alongside mui like these aren't

play18:35

like when you learn chakra or mui you're

play18:38

learning chakra and mui when you learn

play18:40

Tailwind you're getting better at CSS if

play18:43

your goal is to avoid CSS if you want to

play18:45

like draw a line here and say I will

play18:47

never go below here because I'm a

play18:49

back-end developer I don't care about

play18:51

what lives underneath there sure go hang

play18:53

out in this land telling me you use

play18:55

chakra UI and that it's like Tailwind

play18:57

but better is like telling primogen

play19:00

you're using node.js it's like rust but

play19:02

better we care too much to feel that way

play19:04

which is the difference in goals and

play19:06

objectives here it's just it's so much

play19:08

to learn I don't know if you all don't

play19:10

see it because you've been using it a

play19:12

bunch

play19:13

but use color mode value is a hook

play19:18

that is specific to chakra that you have

play19:21

to know and understand the behaviors of

play19:24

and then combine with additional react

play19:26

hooks that live within react and then

play19:28

understand how these all interact with

play19:30

the components that are provided and the

play19:33

behaviors inherent to that it took me a

play19:36

bit to figure out how you actually enter

play19:37

like trigger this like tabs has an on

play19:40

change that calls with an index and I

play19:44

guess whatever you put in tab list is

play19:46

inferred as the children that tabs will

play19:48

call with but is there a way for me to

play19:50

put a custom value here instead of an

play19:52

index maybe I want to pass like an ID

play19:54

and have the ID get put here instead if

play19:58

I did that there's no way it would be

play19:59

typesafe because the definition isn't

play20:01

smart enough to go that way but no you

play20:04

need to understand chakra

play20:07

deeply to use chakra if you use chakra

play20:11

every day and you've never used these

play20:12

then you're installing a bunch of

play20:14

JavaScript that you're not using I can't

play20:17

say for sure how tree shakeable chakra

play20:19

is but by the the string slash

play20:21

JavaScript nature my assumption is not

play20:24

very like I cannot imagine a lot of

play20:26

these behaviors being tree shaken

play20:28

because they're keys on the props and

play20:30

the components that you're using the

play20:32

lock in here is absurd the not just like

play20:34

code base locking but brain lock-in you

play20:37

start to to use your brain the chakra

play20:39

way not the browser way with Tailwind

play20:42

you're only using the things that you

play20:44

use when you add a new class name and

play20:46

Tailwind or in your UI when you're using

play20:49

Tailwind the tail and compiler sees that

play20:51

and it adds that Tailwind

play20:54

into the CSS file that gets compiled out

play20:57

time for the styled components rant

play20:59

style components was very important

play21:02

styled components

play21:04

pushed forward the rate at which we as

play21:08

developers could build our own component

play21:10

systems in things like react and big

play21:13

applications when at twitch we moved

play21:16

away from Rolling our own chaotic State

play21:18

[Β __Β ] to build our own component library

play21:21

and started using styled components as

play21:22

the way to apply and change Styles and

play21:24

components style components was a pretty

play21:26

powerful primitive for building a

play21:27

component library at a place like twitch

play21:29

so revolutionized how we build component

play21:33

Libs in react this is also the problem

play21:36

with styled components similar to

play21:40

storybook it is only good at that styled

play21:44

components were talked about very very

play21:47

positively by many people including

play21:49

myself because it was one of the easiest

play21:52

ways to build a component system to have

play21:54

a blob of I'll pull up some code

play21:57

examples for us to look at so here's an

play21:59

example of a styled component in a

play22:01

styled component you can just write CSS

play22:05

like these little back ticks and also

play22:07

call the props that get passed in that

play22:10

are properties maybe you have like in

play22:12

this case primary which adds in

play22:14

background white color black what's

play22:16

funny here is the even in their example

play22:19

here it is improperly highlighting

play22:22

things like this should be highlighted

play22:24

the green color and it's not or this

play22:25

shouldn't be highlighted green and it is

play22:27

it's funny that like the home page

play22:29

example doesn't parse correctly for a

play22:32

highlighter because it is such a

play22:33

bastardization of CSS and JS it is a

play22:37

messy combination of the two

play22:39

and the type scripts like definitions

play22:42

around it can be obnoxious as well the

play22:46

reason I bring this all up

play22:48

is because when I had to make a button

play22:50

that had

play22:52

15 different properties and those

play22:54

properties resulted in slightly

play22:55

different CSS this was one of the best

play22:57

ways to do that and for a while it was

play23:00

the only quality way to do that the

play23:02

problem is what if I have

play23:04

a div in line and I want to add two

play23:08

classes to that quicker I want to add

play23:09

two properties to that quick I want to

play23:10

add flex and I want it to align right

play23:13

now I have to take that div break it out

play23:15

from the return make a styled const I

play23:19

have to come up with a name which is one

play23:20

of the hardest underrated Parts you have

play23:21

to come up with a name for whatever

play23:22

you've broken out this container to be

play23:24

now this container is named Flex right

play23:27

and I have made cons Flex right equal

play23:29

style dot div apply all of those

play23:32

properties then render that in the

play23:33

component then I have another component

play23:35

that needs to flex left instead I shrug

play23:38

I copy paste the flex right I rename it

play23:40

Flex left I change the one property and

play23:42

I reuse that until when do you just

play23:44

write a string the harshest reality that

play23:47

we got out of styled components and

play23:49

honestly I think style components for it

play23:51

the best thing we learned from style

play23:54

components inline styles are actually

play23:58

good for a long time

play24:00

we hate it inline Styles inline styles

play24:03

are actually good I personally learned

play24:06

this when I started doing more react

play24:07

native Dev and inline styles were pretty

play24:10

much the only way to do things inline

play24:12

Styles enabled us to quickly and

play24:16

efficiently apply styles to a thing when

play24:18

we were building our user interfaces and

play24:21

the philosophy I quickly developed let

play24:23

me just write a quick demo component

play24:25

here the thing that I learned from react

play24:28

native very quickly that made me a much

play24:30

faster react developer when I started

play24:32

thinking about things this way man did I

play24:35

get way faster as a developer this is

play24:38

the section that describes how a thing

play24:40

looks

play24:40

this is the section that describes what

play24:43

the thing does

play24:44

and if you do your best to think about

play24:46

your components in this way suddenly

play24:48

class equals a bunch of [Β __Β ] goes here

play24:53

you just feel less bad about it because

play24:55

that's the role of this section the goal

play24:58

of your return Isn't to look pretty as a

play25:01

developer it's to look pretty for the

play25:03

user this is the part that describes

play25:05

what the user sees I couldn't give less

play25:08

of a [Β __Β ]

play25:09

about what this looks like as a

play25:10

developer as long as it's readable

play25:12

understandable and my developers can

play25:14

make changes quickly within it and here

play25:17

is where the logic goes for behaviors

play25:19

like logic fetching data whatever else

play25:22

and this control flow below the return

play25:24

is what your how it looks above the

play25:26

return is what it does means that being

play25:29

forced to break out const special div

play25:33

equals style dot div display flex line

play25:39

items right this just sucks like being

play25:43

forced to move this out of your

play25:45

component flow is good if you were going

play25:47

to anyways if everything you're doing in

play25:49

here is a reused piece

play25:52

sure but the vast majority of the time

play25:55

I'm building user interfaces I'm

play25:56

spending more time on the padding and

play25:58

the flex behaviors than I am on the

play26:00

button styled components specializes in

play26:03

making reusable buttons we specialize in

play26:05

making user interfaces the reason

play26:07

Tailwind is great is it keeps you from

play26:10

having to think about your logic your

play26:12

components your breakdowns and all this

play26:13

other [Β __Β ] when you're just trying to

play26:15

make the thing look right for the first

play26:16

time I stopped thinking outside of all

play26:19

of these parts and when I had logic I

play26:22

was here when I had Styles I was here

play26:23

otherwise I was done and that was so

play26:26

nice I started to like CSS way more when

play26:30

I started thinking in this way when I

play26:32

stopped having to go to a different file

play26:33

and I stopped having to join things out

play26:34

when I stopped having to reference a doc

play26:36

and see how Mantine feels about this

play26:39

type of way like I could just write the

play26:42

style full-on Zen mode and once you get

play26:44

used to the Tailwind syntax and cheat

play26:46

she's like this just show you all the

play26:48

class themes super quick so you could

play26:50

scroll through it fast I just keep this

play26:51

open on my monitor on the side when I

play26:53

was learning tailwind and it's very

play26:55

quick to be in here and see like flexbox

play26:58

Flex

play27:00

you can click display and see Flex

play27:03

display flex and line flex and line Flex

play27:04

it's very nice to quickly see the class

play27:07

names that you need and not have to like

play27:08

dig through a big dock to find them

play27:10

highly recommend something like this as

play27:13

you get started but what you'll see here

play27:14

is almost all of these map to one class

play27:17

of CSS I got way better at CSS because

play27:21

of this and funny enough

play27:24

the Tailwind docks

play27:26

I mentioned I'm not in them too much

play27:28

there is one exception I use the

play27:30

Tailwind docks a ton when I am not using

play27:33

Tailwind because I'm not in tailwind and

play27:35

I want to remember what the actual CSS

play27:37

that class does is usually colors like I

play27:39

want to like I want to use red 700 so

play27:42

I'll hop in here and grab the red 700

play27:44

hex if I want to do like if I remember

play27:47

like the one thing that you could argue

play27:49

is maybe worse is I don't think in real

play27:51

padding amounts anymore like I don't

play27:53

think in 24px I think in Tailwinds

play27:57

padding this is customization I don't

play27:58

want the customization I just want I'll

play28:00

just go to the cheat sheet because this

play28:02

is easy for things like this cool

play28:03

padding is right here and you can see P1

play28:05

is 0.25 REM P2 is 0.5 M8 Etc so I just

play28:10

think about these people are asking if

play28:12

there's a catch with Tailwind kind of

play28:14

the catch is it's inline CSS so

play28:18

everything's defined at a component

play28:20

level unless you break out they're like

play28:23

like an individual component level

play28:24

unless you break those out so it's more

play28:27

reusable by default but less reusable by

play28:30

Design which is an interesting

play28:32

compromise to make

play28:34

but it does make life significantly

play28:37

better once you buy into it you get to

play28:39

Define your own boundaries a lot of this

play28:41

is an argument of how do you want to

play28:43

break up your styles from your

play28:45

components the way I like to think of

play28:47

things is

play28:48

I have a component and this component

play28:50

inside of it it has logic and beneath

play28:53

that logic or I guess arguably next to

play28:54

logic so component has within it logic

play28:57

and styles so I like to think that a

play29:00

component and this all lives within my

play29:02

application I like this I like that my

play29:05

app has components that contain logic

play29:08

and styles these can contain

play29:10

sub-components that contain logic and

play29:11

styles but I get to choose the breakdown

play29:13

from here if I want to move the Styles

play29:15

out and then import them in

play29:18

I can do that

play29:19

if I want to move this logic and style

play29:22

out make a sub component and then pull

play29:24

them in there I can it's my choice but

play29:27

by default

play29:29

it's incredibly simple

play29:31

my components have logic and styles if

play29:33

we have a app that uses mui then we have

play29:37

a separate box out here that is mui and

play29:40

this box has a bunch of these mini logic

play29:43

style component combos that I have to

play29:45

use to make

play29:48

my component

play29:50

so in here I might just have [Β __Β ]

play29:53

like this one actually I know what I can

play29:55

do that I'm like this nice and funny

play29:56

we'll do one layer of that one which

play29:58

contains a layer of this one

play30:01

which contains this one again

play30:05

and this one next to it and if anybody

play30:07

thinks this isn't what happens in

play30:08

component libraries you're wrong this is

play30:11

what it feels like to use mui this is

play30:13

what you're doing and you have to know

play30:15

about this box well enough to take these

play30:18

parts and drag them into your

play30:19

application your architecture of your

play30:22

app is based on material UI and how it

play30:25

decides to break things up you cannot

play30:28

architect your application outside of

play30:30

how mui designed their architecture with

play30:32

something like Tailwind because it's

play30:34

just the CSS part you can choose where

play30:37

the breakdowns occur you can choose how

play30:38

to architect things you own your

play30:40

architecture and as a front-end

play30:41

developer I want to own that

play30:44

architecture I want to be in control of

play30:46

the relationships between these things I

play30:48

want to have Primitives that I can

play30:49

assemble in the ways I need to develop

play30:52

great software for my users I do not

play30:54

want to bottleneck the quality of my

play30:57

application of my architecture of my

play30:58

development and of my users experiences

play31:00

on an external dependency I want the

play31:03

only bottleneck for the quality of my

play31:04

app to be my developers and when you use

play31:07

something like material UI

play31:09

you are bottlenecking the quality of

play31:12

your UI on the Developers

play31:14

or on the material UI instead of your

play31:16

developers and when you use something

play31:17

like styled components or I guess in

play31:19

this case mui your

play31:22

forced to break things out in a way that

play31:24

makes your architecture worse than it

play31:26

theoretically could be I'm going to make

play31:27

one last one here of app that uses

play31:30

styled components the big difference

play31:32

here you would probably Define a

play31:34

different thing for this lower class

play31:36

because you wouldn't realize that was

play31:37

reusable and you would build all of this

play31:40

chaos internally inside of your app in

play31:43

another directory so we will name this

play31:46

slash components and pretty much

play31:48

everything you do either goes in there

play31:49

or goes above this file so I'll call

play31:52

this component dot TSX and this is like

play31:55

the actual component you're rendering

play31:56

you might have one of these defined in

play31:58

the same file this is a really hard

play32:00

control flow to follow if I am building

play32:02

an application and I want to figure out

play32:04

like let's say I have a UI bug and

play32:07

something's too wide I want to figure

play32:09

out why it's too wide I inspect the CSS

play32:10

on the browser and I see it has a

play32:13

certain CSS property

play32:14

I go to this file

play32:16

component.tsx that has that component

play32:18

and I can't see that class name anywhere

play32:20

or anything that would logically be

play32:22

including it so I go component by

play32:24

component I go to the component from our

play32:26

component library and style components

play32:28

until I find the thing that's applying

play32:30

that line of CSS I don't want and then I

play32:32

delete it and it breaks something else

play32:34

somewhere else it's painful your

play32:36

developer experience now is bottlenecked

play32:39

by how well you architect these things

play32:41

and how good your developers know that

play32:44

architecture you have a bottleneck your

play32:46

delivery your ability to solve bugs and

play32:49

generally architect applications is now

play32:52

bottlenecked on the way style components

play32:55

forces you to rip out a Dom element just

play32:58

to apply styles to it it's rough

play33:01

if you are building this already and

play33:03

you've committed to building something

play33:04

like this as a company style components

play33:06

wasn't kind of is an okay primitive to

play33:09

do that I think there are now Solutions

play33:10

like vanilla extract that do a way

play33:12

better job at that I am pretty happy

play33:17

with how vanilla extract solves these

play33:20

particular problems I don't think it's

play33:22

like a necessary solution but it is an

play33:24

option for sure and if you want to have

play33:27

an architecture problem you should think

play33:29

through the architecture problem

play33:31

if you don't you should probably just

play33:35

use Tailwind have I covered the things I

play33:37

wanted to cover with this do I go deeper

play33:39

on why I like Tailwind I feel like I've

play33:40

covered like I've touched on Tailwind

play33:42

enough throughout this that I don't need

play33:43

to go deeper on it but generally

play33:45

Tailwind is the easiest way to write CSS

play33:47

in a consistent way it has a lot of

play33:49

really nice behaviors within it it is

play33:51

the first time I have not just felt good

play33:53

but felt great writing styles after a

play33:56

decade of web development and various

play33:57

Solutions Tailwind makes me very very

play34:01

fast at Styles and it's the first time I

play34:04

I call it Zen mode CSS and that's really

play34:07

how it feels you just go fast and

play34:09

deliver great looking software Solutions

play34:12

like material UI styled components and

play34:15

chakra even Mantine and these new

play34:17

component libraries I keep seeing and

play34:19

hearing about solve a very specific

play34:20

problem I don't want to style my

play34:23

application I think that as front-end

play34:25

developers we should sum amount own our

play34:28

style systems and our Solutions and

play34:29

build applications that aren't limited

play34:31

by the libraries that we choose the

play34:33

reason I like Tailwind is it's the first

play34:34

style solution that makes me faster at

play34:36

developing style systems makes me better

play34:39

at CSS and doesn't force me at a new cap

play34:43

of how good my application can be it

play34:45

doesn't enforce a ceiling for the

play34:47

quality of what I can ship unlike all

play34:49

these other Solutions too tailwind's the

play34:51

first design solution that my designer

play34:53

my back end focus devs and I myself all

play34:57

love equally it is so cool in those ways

play35:00

so yeah sure you could view this video

play35:03

as a love letter to Tailwind but it

play35:05

really is it made me care so much more

play35:07

about these things when before I would

play35:09

just shrug at the conversation so

play35:11

seriously tailwind's changing a lot of

play35:13

things and how we architect our

play35:15

applications if you haven't already

play35:17

tried it give it a shot and if you find

play35:19

after that that you just still hate

play35:21

writing user experiences and want to get

play35:23

back to back end

play35:24

give Daisy UI a shot and if that doesn't

play35:27

work for you sure use mui but generally

play35:30

mui and things like it are a scary thing

play35:33

to adopt because you are choosing the

play35:35

new maximum for how good your

play35:37

application can be and I think our users

play35:38

deserve better than that thank you again

play35:40

taking the time to watch this one

play35:41

subscribe on YouTube if you haven't

play35:43

already very surprisingly low number of

play35:45

you have and we're so close to hitting

play35:46

that 40K mark

play35:49

had a lot of fun with this rant the

play35:51

community contributed heavily to make

play35:52

this one happen and appreciate y'all

play35:54

immensely see you in the next one peace

Rate This
β˜…
β˜…
β˜…
β˜…
β˜…

5.0 / 5 (0 votes)

Related Tags
Web DevelopmentUI LibrariesTailwindBootstrapReactStyled ComponentsDesign SystemsFront-EndCSSComponent Library