Hướng dẫn modern css reset - thiết lập lại css hiện đại

CSS reset là một file thường được thấy trong các thư mục của rất nhiều project web frontend. và ai đã và đang thiết kế giao diện website với HTML và CSS đều hiểu sự quan trọng của reset css bạn có biết nó được dùng vào mục đích gì không? Tại sao chúng ta phải cần sử dụng reset css trong thiết kế web, và cách tạo ra chúng và sử dụng dụng file reset.css như thế nào? Đó là những vấn đề mà trong bài viết hôm nay mình muốn chia sẻ với các bạn.

Show

CSS Reset là gì?

CSS Reset là một loại các rules của CSS giúp thiết lập các style của tất cả đối tượng HTML (element) theo một chuẩn nhất định. Nói đơn giản thì nó là môn võ và bạn sẽ cần tới trong tất cả các dự án có liên quan tới frontend web và application.

Bạn là một lập trình viên và phải xử lý việc giao diện hiển thị giống hệt nhau (hoặc khác nhau rất ít) trên các trình duyệt web, thì rõ ràng việc viết 1 đoạn code mà hoạt động trên tất cả trình duyệt tốt hơn là dùng các file style khác nhau cho mỗi trình duyệt chuẩn chưa?

Sử dụng CSS Reset, bạn luôn nắm thế chủ động - bạn như ông chủ, yêu cầu những trình duyệt sử dụng chung các thuộc tính CSS do bạn quy định, sau đó bạn có thể chỉnh sửa theo ý thích của mình. Quá trình làm việc cross-browser lúc này dễ dàng hơn hẳn.

Tạo reset css như nào ?

Là ta định đạng các đối thương trong HTML về một kiểu nào đó chung thường thì dưa các thẻ có định dạng margin, padding bằng 0, viền các đối tượng là none, dạng danh sách ul, ol … list-style là none, có thể qui định thêm kiểu chữ hoặc cỡ chữ tùy vào ý đồ của bạn, tuy nhiên cỡ chữ thường người cho cho 100% rồi sau đó chúng ta định dạng lại trong phần thiết kế giao diện sau đó. Ví dụ:

*{ 
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
 }

Ta cũng có thể liệt kê các thẻ html rồi định dạng lại:

html, body, div, span, applet, object, iframe,h2, h2, h3, h4, h5, h6, p{
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
}

ol, ul {
  list-style: none;
}

Tuy nhiên để tiện lợi cũng như tạo cho phần reset css được chặc chẽ và chính xác hơn mình giới thiệu những bộ reset css được nhiều người sử dụng nhất đó là do những người lập trình css trên thế giới tạo ra và chia sẻ, hiển nhiên là được update thường xuyên.

- Normalize.css

Đây là 1 file CSS tiêu chuẩn được sử dụng rất nhiều trong các thư viện Frontend Framework như Bootstrap

Bạn có thể xem file này tại đây

- CSS Reset của Eric Myer

Cái này cũng khá phổ biến và được dùng nhiều.

Bạn xem code nó ở đây

- MarkSheet CSS Reset

Các đoạn code reset rất hữu ích nếu bạn sử dụng 100% web HTML5.

Bạn xem code nó vô đây

- MiniReset.css

Một CSS Reset cũng khá hiệu quả và ok.

Bạn xem code nó click đây

Sử dụng CSS Reset:

- CSS Reset luôn đặt đầu tiên trong các file CSS

- CSS Reset luôn xử lý các element HTML

Điều này được hiểu là CSS Reset sẽ tác động tới các element như:

html, body, div, span, applet, object, iframe,h2, h2, h3, h4, h5, h6, p{
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
}

ol, ul {
  list-style: none;
}
8 chứ không phải
html, body, div, span, applet, object, iframe,h2, h2, h3, h4, h5, h6, p{
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
}

ol, ul {
  list-style: none;
}
9 hay
.button thay vì a.button.
.list li thay vì ul li hay ul.list li
0 Tức là, nhiệm vụ của CSS Reset là làm việc với các element trực tiêp chứ không phải các class hay ID nào cả. Lý do thì là bởi nó làm việc với trình duyệt, mà các trình duyệt cũng làm cách tương tự để áp đặt các style mặc định vào.

- Custom CSS Style phải gọi vào các class/ID hoặc có parent element

Bạn nên code vào:

.button thay vì a.button.
.list li thay vì ul li hay ul.list li

Việc tránh gọi các element trình duyệt mà sử dụng class/ID đóng vai trò quan trọng giúp bạn dễ dàng xử lý xung đột giữa CSS Reset và custom style.

Tuy là một phần nhỏ trong thiết kế diện web nhưng rất quan trọng, các bạn không thể có được một giao diện như ý khi bỏ qua bước này. Chúc các bạn thành công!

Giới thiệu

Bất cứ khi nào tôi bắt đầu một dự án mới, thứ tự đầu tiên của doanh nghiệp là hạ gục một số cạnh thô trong ngôn ngữ CSS. Tôi làm điều này với một bộ chức năng của các kiểu cơ sở tùy chỉnh.

Trong một thời gian dài, tôi đã sử dụng thiết lập lại CSS nổi tiếng của Eric Meyer. Đó là một đoạn CSS vững chắc, nhưng nó hơi dài ở răng vào thời điểm này; Nó đã không được cập nhật trong hơn một thập kỷ, và rất nhiều điều đã thay đổi kể từ đó!

Gần đây, tôi đã sử dụng thiết lập lại CSS tùy chỉnh của riêng mình. Nó bao gồm tất cả các thủ thuật nhỏ mà tôi đã phát hiện ra để cải thiện cả trải nghiệm người dùng và trải nghiệm tác giả CSS.

Giống như các thiết lập lại CSS khác, nó không được sử dụng khi thiết kế / mỹ phẩm. Bạn có thể sử dụng thiết lập lại này cho bất kỳ dự án nào, bất kể thẩm mỹ bạn sẽ làm.

Trong hướng dẫn này, chúng tôi sẽ thực hiện một chuyến tham quan thiết lập lại CSS tùy chỉnh của tôi. Chúng tôi sẽ đào sâu vào từng quy tắc và bạn sẽ tìm hiểu những gì nó làm và tại sao bạn có thể muốn sử dụng nó!

Không có gì khó chịu, đây là:

Nó tương đối ngắn, nhưng có rất nhiều thứ được đóng gói trong bảng kiểu nhỏ này. Hãy vào đó!

Bài kiểm tra nhỏ bất ngờ! Đo bằng đường viền màu hồng có thể nhìn thấy, phần tử

.button thay vì a.button.
.list li thay vì ul li hay ul.list li
1 trong kịch bản sau đây, giả sử không có CSS ​​nào khác được áp dụng?

Phần tử

.button thay vì a.button.
.list li thay vì ul li hay ul.list li
1 của chúng tôi có
.button thay vì a.button.
.list li thay vì ul li hay ul.list li
3. Bởi vì cha mẹ của nó rộng 200px, 100% sẽ giải quyết thành 200px.

Nhưng nó áp dụng chiều rộng 200px đó ở đâu? Theo mặc định, nó sẽ áp dụng kích thước đó cho hộp nội dung.

Nếu bạn không quen thuộc, hộp nội dung trực tuyến là hình chữ nhật trong mô hình hộp thực sự giữ nội dung, bên trong đường viền và phần đệm:

Tuyên bố

.button thay vì a.button.
.list li thay vì ul li hay ul.list li
3 sẽ đặt hộp nội dung của ____ 21 thành 200px. Phần đệm sẽ thêm 40px (20px ở mỗi bên). Biên giới thêm 4px cuối cùng (2px ở mỗi bên). Khi chúng tôi làm toán, hình chữ nhật màu hồng có thể nhìn thấy sẽ rộng 244px.

Khi chúng tôi thử và nhồi nhét một hộp 244px vào cha mẹ rộng 200px, nó đã tràn:

Mã sân chơi

Hành vi này là kỳ lạ, phải không? May mắn thay, chúng ta có thể thay đổi nó, bằng cách đặt quy tắc sau:

Với quy tắc này được áp dụng, tỷ lệ phần trăm sẽ giải quyết dựa trên hộp biên giới. Trong ví dụ trên, hộp màu hồng của chúng tôi sẽ là 200px và hộp nội dung bên trong sẽ giảm xuống còn 156px (200px - 40px - 4px).

Đây là một quy tắc bắt buộc, theo ý kiến ​​của tôi. Nó làm cho CSS đẹp hơn đáng kể để làm việc. It makes CSS significantly nicer to work with.

Chúng tôi áp dụng nó cho tất cả các yếu tố và yếu tố giả bằng bộ chọn ký tự đại diện (

.button thay vì a.button.
.list li thay vì ul li hay ul.list li
6). Trái với niềm tin phổ biến, điều này không tệ cho hiệu suất.

Liên kết đến tiêu đề này2. Xóa lề mặc định

Trình duyệt làm cho các giả định thông thường xung quanh lề. Ví dụ:

.button thay vì a.button.
.list li thay vì ul li hay ul.list li
7 sẽ bao gồm nhiều biên độ theo mặc định so với một đoạn văn.

Các giả định này là hợp lý trong bối cảnh của một tài liệu xử lý văn bản, nhưng chúng có thể không chính xác cho một ứng dụng web hiện đại.

Biên độ là một con quỷ khó khăn, và thường xuyên hơn không, tôi thấy mình ước các yếu tố không có bất kỳ mặc định nào. Vì vậy, tôi đã quyết định loại bỏ tất cả. 🔥

Nếu/khi tôi muốn thêm một số lề vào các thẻ cụ thể, tôi có thể làm như vậy trong các kiểu dự án tùy chỉnh của mình. Bộ chọn ký tự đại diện (

.button thay vì a.button.
.list li thay vì ul li hay ul.list li
6) có độ đặc hiệu cực thấp, do đó sẽ dễ dàng ghi đè quy tắc này.

Liên kết đến tiêu đề này3. chiều cao dựa trên tỷ lệ phần trăm

Bạn đã bao giờ cố gắng sử dụng chiều cao dựa trên tỷ lệ phần trăm trong CSS, chỉ để phát hiện ra rằng nó dường như không có tác dụng?

Đây là một ví dụ:

Mã sân chơi

Yếu tố

.button thay vì a.button.
.list li thay vì ul li hay ul.list li
9 có
0, nhưng phần tử hoàn toàn không phát triển!

Điều này không hoạt động vì trong bố cục dòng chảy (chế độ bố cục chính trong CSS),

1 và 
2 hoạt động theo các nguyên tắc khác nhau về cơ bản. Chiều rộng của một phần tử được tính toán dựa trên cha mẹ của nó, nhưng chiều cao của một phần tử được tính toán dựa trên con cái.

Đây là một chủ đề phức tạp, và nó vượt quá phạm vi của bài viết này. Tôi có kế hoạch viết một bài đăng trên blog về nó, nhưng trong lúc này, bạn có thể tìm hiểu tất cả về nó trong khóa học CSS của tôi, CSS cho các nhà phát triển JavaScript.

Như một bản demo nhanh, ở đây chúng ta thấy rằng phần tử

.button thay vì a.button.
.list li thay vì ul li hay ul.list li
9 của chúng ta có thể phát triển khi chúng ta áp dụng quy tắc này:

Mã sân chơi

Yếu tố

.button thay vì a.button.
.list li thay vì ul li hay ul.list li
9 có
0, nhưng phần tử hoàn toàn không phát triển!

Điều này không hoạt động vì trong bố cục dòng chảy (chế độ bố cục chính trong CSS),

1 và 
2 hoạt động theo các nguyên tắc khác nhau về cơ bản. Chiều rộng của một phần tử được tính toán dựa trên cha mẹ của nó, nhưng chiều cao của một phần tử được tính toán dựa trên con cái.

Liên kết đến tiêu đề nàyĐây là một chủ đề phức tạp, và nó vượt quá phạm vi của bài viết này. Tôi có kế hoạch viết một bài đăng trên blog về nó, nhưng trong lúc này, bạn có thể tìm hiểu tất cả về nó trong khóa học CSS của tôi, CSS cho các nhà phát triển JavaScript.

Như một bản demo nhanh, ở đây chúng ta thấy rằng phần tử

.button thay vì a.button.
.list li thay vì ul li hay ul.list li
9 của chúng ta có thể phát triển khi chúng ta áp dụng quy tắc này:

Nếu bạn đang sử dụng khung JS như React, bạn cũng có thể muốn thêm bộ chọn thứ ba vào quy tắc này: phần tử cấp độ gốc được sử dụng bởi khung.

Ví dụ: trong các dự án tiếp theo của tôi, tôi cập nhật quy tắc như sau:

4 Điều chỉnh độ cao dòng

Mã sân chơi

Yếu tố

.button thay vì a.button.
.list li thay vì ul li hay ul.list li
9 có
0, nhưng phần tử hoàn toàn không phát triển!

Điều này không hoạt động vì trong bố cục dòng chảy (chế độ bố cục chính trong CSS),

1 và 
2 hoạt động theo các nguyên tắc khác nhau về cơ bản. Chiều rộng của một phần tử được tính toán dựa trên cha mẹ của nó, nhưng chiều cao của một phần tử được tính toán dựa trên con cái.

Đây là một chủ đề phức tạp, và nó vượt quá phạm vi của bài viết này. Tôi có kế hoạch viết một bài đăng trên blog về nó, nhưng trong lúc này, bạn có thể tìm hiểu tất cả về nó trong khóa học CSS của tôi, CSS cho các nhà phát triển JavaScript.

Như một bản demo nhanh, ở đây chúng ta thấy rằng phần tử

.button thay vì a.button.
.list li thay vì ul li hay ul.list li
9 của chúng ta có thể phát triển khi chúng ta áp dụng quy tắc này:

Nếu bạn đang sử dụng khung JS như React, bạn cũng có thể muốn thêm bộ chọn thứ ba vào quy tắc này: phần tử cấp độ gốc được sử dụng bởi khung.

Ví dụ: trong các dự án tiếp theo của tôi, tôi cập nhật quy tắc như sau:

4 Điều chỉnh độ cao dòngApple disabled subpixel antialiasing across the operating system. I'm guessing they realized that it was doing more harm than good on modern hardware.

4 kiểm soát khoảng cách thẳng đứng giữa mỗi dòng văn bản trong một đoạn văn. Giá trị mặc định khác nhau giữa các trình duyệt, nhưng nó có xu hướng là khoảng 1,2.

Số đơn vị này là một tỷ lệ dựa trên kích thước phông chữ. Nó hoạt động giống như đơn vị

5. Với 
4 là 1,2, mỗi dòng sẽ lớn hơn 20% so với kích thước phông chữ của phần tử.

Đây là vấn đề: Đối với những người mắc chứng khó đọc, những dòng này được đóng gói quá gần nhau, khiến nó khó đọc hơn. Các tiêu chí WCAG nêu rõ rằng chiều cao dòng phải là ít nhất 1,5.

Hướng dẫn modern css reset - thiết lập lại css hiện đại

Bây giờ, con số này có xu hướng tạo ra các dòng khá lớn trên các tiêu đề và các yếu tố khác với loại lớn:

Hướng dẫn modern css reset - thiết lập lại css hiện đại

Bạn có thể muốn ghi đè giá trị này trên các tiêu đề. Sự hiểu biết của tôi là các tiêu chí WCAG có nghĩa là cho văn bản "cơ thể", không phải tiêu đề.

Mã sân chơi

Liên kết đến tiêu đề nàyYếu tố .button thay vì a.button. .list li thay vì ul li hay ul.list li 9 có 0, nhưng phần tử hoàn toàn không phát triển!

Điều này không hoạt động vì trong bố cục dòng chảy (chế độ bố cục chính trong CSS),

1 và 
2 hoạt động theo các nguyên tắc khác nhau về cơ bản. Chiều rộng của một phần tử được tính toán dựa trên cha mẹ của nó, nhưng chiều cao của một phần tử được tính toán dựa trên con cái.

Đây là một chủ đề phức tạp, và nó vượt quá phạm vi của bài viết này. Tôi có kế hoạch viết một bài đăng trên blog về nó, nhưng trong lúc này, bạn có thể tìm hiểu tất cả về nó trong khóa học CSS của tôi, CSS cho các nhà phát triển JavaScript.

Như một bản demo nhanh, ở đây chúng ta thấy rằng phần tử

.button thay vì a.button.
.list li thay vì ul li hay ul.list li
9 của chúng ta có thể phát triển khi chúng ta áp dụng quy tắc này:

Nếu bạn đang sử dụng khung JS như React, bạn cũng có thể muốn thêm bộ chọn thứ ba vào quy tắc này: phần tử cấp độ gốc được sử dụng bởi khung.

Ví dụ: trong các dự án tiếp theo của tôi, tôi cập nhật quy tắc như sau:

4 Điều chỉnh độ cao dòng

Nếu một hình ảnh có kích thước "gốc" là 800 × 600, phần tử

4 cũng sẽ rộng 800px, ngay cả khi chúng ta đưa nó vào cha mẹ rộng 500px.

Quy tắc này sẽ ngăn chặn hình ảnh phát triển vượt ra ngoài container của nó, cảm giác như hành vi mặc định hợp lý hơn nhiều đối với tôi.

Liên kết đến tiêu đề này7. Kế thừa phông chữ cho các điều khiển biểu mẫu

Đây là một điều kỳ lạ khác: Theo mặc định, các nút và đầu vào không kế thừa các kiểu đánh máy từ cha mẹ của họ. Thay vào đó, họ có phong cách kỳ lạ của riêng họ.

Ví dụ,

6 sẽ sử dụng phông chữ Monospace hàng hóa hệ thống. Đầu vào văn bản sẽ sử dụng phông chữ Sans-serif của hệ thống. Và cả hai sẽ chọn kích thước phông chữ nhỏ kính hiển vi (13.333px trong Chrome).monospace font. Text inputs will use the system-default sans-serif font. And both will choose a microscopically-small font size (13.333px in Chrome).

Như bạn có thể tưởng tượng, rất khó để đọc văn bản 13px trên thiết bị di động. Khi chúng tôi tập trung một đầu vào với kích thước phông chữ nhỏ, trình duyệt sẽ tự động phóng to, để văn bản dễ đọc hơn.

Thật không may, đây không phải là một kinh nghiệm tốt:

Nếu chúng ta muốn tránh hành vi tự động này, các đầu vào cần có kích thước phông chữ ít nhất 1REM / 16px. Đây là một cách để giải quyết vấn đề:

Điều này khắc phục sự cố Auto-Zoom, nhưng đó là một hỗ trợ ban nhạc. Thay vào đó, hãy giải quyết nguyên nhân gốc: đầu vào hình thức không nên có kiểu chữ riêng của họ!

7 là một tốc ký hiếm khi được sử dụng, đặt ra một loạt các thuộc tính liên quan đến phông chữ, như 
8, 
9 và 
0. Bằng cách đặt nó thành 
1, chúng tôi hướng dẫn các yếu tố này phù hợp với kiểu chữ trong môi trường xung quanh của chúng.

Miễn là chúng ta không chọn kích thước phông chữ nhỏ đáng ghét cho văn bản cơ thể của chúng ta, điều này giải quyết tất cả các vấn đề của chúng ta cùng một lúc. 🎉

Trong CSS, văn bản sẽ tự động bao bọc dòng nếu không có đủ không gian để phù hợp với tất cả các ký tự trên một dòng.

Theo mặc định, thuật toán sẽ tìm kiếm các cơ hội bọc mềm của Google; Đây là những ký tự mà thuật toán có thể phân chia. Trong tiếng Anh, cơ hội bọc mềm duy nhất là khoảng trắng và dấu gạch nối, nhưng điều này thay đổi từ ngôn ngữ này sang ngôn ngữ khác.

Nếu một dòng không có bất kỳ cơ hội bọc mềm nào và nó không phù hợp, nó sẽ khiến văn bản tràn ra:

Mã sân chơi

Điều này có thể gây ra một số vấn đề bố cục khó chịu. Ở đây, nó thêm một thanh cuộn ngang. Trong các tình huống khác, nó có thể khiến văn bản chồng chéo các yếu tố khác hoặc trượt phía sau hình ảnh/video.

Thuộc tính

2 cho phép chúng tôi điều chỉnh thuật toán bao bọc dòng và cho phép sử dụng các gói cứng khi không tìm thấy cơ hội kết thúc mềm: có thể tìm thấy cơ hội kết thúc:

Mã sân chơi

Điều này có thể gây ra một số vấn đề bố cục khó chịu. Ở đây, nó thêm một thanh cuộn ngang. Trong các tình huống khác, nó có thể khiến văn bản chồng chéo các yếu tố khác hoặc trượt phía sau hình ảnh/video.

Thuộc tính

2 cho phép chúng tôi điều chỉnh thuật toán bao bọc dòng và cho phép sử dụng các gói cứng khi không tìm thấy cơ hội kết thúc mềm: có thể tìm thấy cơ hội kết thúc:

Không có giải pháp nào là hoàn hảo, nhưng ít nhất là gói khó khăn sẽ không gây rối với bố cục!

Cảm ơn Sophie Alpert đã đề xuất một quy tắc tương tự! Cô ấy đề nghị áp dụng nó cho tất cả các yếu tố, đó có lẽ là một ý tưởng tốt, nhưng không phải là thứ mà tôi đã thử nghiệm cá nhân.

Bạn cũng có thể thử thêm thuộc tính

3:

Liên kết đến tiêu đề này4 sử dụng dấu gạch nối (bằng các ngôn ngữ hỗ trợ chúng) để biểu thị kết thúc khó khăn. Nó cũng làm cho kết thúc khó khăn phổ biến hơn nhiều.

Nó có thể đáng giá nếu bạn có các cột văn bản rất đẹp, nhưng nó cũng có thể hơi mất tập trung. Tôi đã chọn không đưa nó vào thiết lập lại, nhưng nó đáng để thử nghiệm!

9. Bối cảnh xếp chồng rễ

Điều cuối cùng này là tùy chọn. Nói chung chỉ cần thiết nếu bạn sử dụng khung JS như React.

Như chúng ta đã thấy trong những gì mà The Heck, Z-Index ??, thuộc tính

5 cho phép chúng ta tạo ra một bối cảnh xếp chồng mới mà không cần thiết lập 
6.

Liên kết đến tiêu đề nàyĐiều này có lợi vì nó cho phép chúng tôi đảm bảo rằng các yếu tố ưu tiên cao nhất định (phương thức, thả xuống, chú giải công cụ) sẽ luôn hiển thị trên các yếu tố khác trong ứng dụng của chúng tôi. Không có lỗi ngữ cảnh xếp chồng lạ, không có cuộc đua vũ trang Z-Index.

Bạn nên điều chỉnh bộ chọn để phù hợp với khung của bạn. Chúng tôi muốn chọn phần tử cấp cao nhất mà ứng dụng của bạn được hiển thị bên trong. Ví dụ: created-react-ứng dụng sử dụng

7, do đó, bộ chọn chính xác là 
8.

Sản phẩm hoàn chỉnh của chúng tôi

Đây là thiết lập lại CSS, ở định dạng thân thiện với bản sao:you own this code, and it should grow along with you.

Hãy thoải mái sao chép/dán điều này vào các dự án của riêng bạn! Nó được phát hành mà không có bất kỳ hạn chế nào, vào phạm vi công cộng (mặc dù nếu bạn muốn giữ liên kết đến bài đăng trên blog này, tôi sẽ đánh giá cao nó!).

Đặt lại CSS của tôi khá ngắn (chỉ có 11 khai báo!), Nhưng tôi đã cố gắng dành toàn bộ bài đăng trên blog để nói về chúng. Và thành thật mà nói, tôi muốn nói nhiều hơn nữa! Chúng tôi chỉ gãi bề mặt trong một loạt các nơi.

CSS là một ngôn ngữ phức tạp. Trừ khi bạn bật mui xe và tìm hiểu những gì đang thực sự xảy ra dưới đó, ngôn ngữ sẽ luôn cảm thấy hơi khó lường và không nhất quán. Khi mô hình tinh thần của bạn không đầy đủ, bạn bị ràng buộc gặp phải một số vấn đề.

Tuy nhiên, nếu bạn dành một chút thời gian để tìm hiểu cách ngôn ngữ thực sự hoạt động, mọi thứ trở nên trực quan hơn rất nhiều và có thể dự đoán được. Tôi thích viết CSS những ngày này!

Trong vài năm qua, tôi đã tập trung vào việc giúp các nhà phát triển JS thay đổi mối quan hệ của họ với CSS. Tôi đã đóng gói tất cả mọi thứ tôi biết vào một khóa học trực tuyến toàn diện, tương tác có tên CSS cho các nhà phát triển JavaScript.CSS for JavaScript Developers.

Và ngay bây giờ, giảm 50% cho Thứ Sáu Đen! Đây thực sự là đợt giảm giá đầu tiên tôi đã có kể từ khi khóa học ra mắt năm ngoái. Nếu bạn ước bạn là một trong những người thích/hiểu CSS, tôi đã thực hiện khóa học này dành riêng cho bạn!

Hướng dẫn modern css reset - thiết lập lại css hiện đại

Bạn có thể tìm hiểu tất cả về nó trên trang chủ khóa học: https://css-for-js.dev
https://css-for-js.dev

Cập nhật mới nhất

Ngày 20 tháng 11 năm 2022

Lượt truy cập