Trước khi chúng ta tìm hiểu cách xử lý các kiểu và lớp của JavaScript – đây là một quy tắc quan trọng. Hy vọng rằng nó đủ rõ ràng, nhưng chúng ta vẫn phải đề cập đến nó
Nói chung có hai cách để tạo kiểu cho một phần tử
- Tạo một lớp trong CSS và thêm nó.
4alert[document.body.className]; // main page
- Viết thuộc tính trực tiếp vào
5.alert[document.body.className]; // main page
6alert[document.body.className]; // main page
JavaScript có thể sửa đổi cả lớp và thuộc tính
alert[document.body.className]; // main page
5Chúng ta nên luôn ưu tiên các lớp CSS hơn
alert[document.body.className]; // main page
5. Cái sau chỉ nên được sử dụng nếu các lớp “không thể xử lý nó”Ví dụ:
alert[document.body.className]; // main page
5 được chấp nhận nếu chúng ta tính toán động tọa độ của một phần tử và muốn đặt chúng từ JavaScript, như thế nàylet top = /* complex calculations */;
let left = /* complex calculations */;
elem.style.left = left; // e.g '123px', calculated at run-time
elem.style.top = top; // e.g '456px'
Đối với các trường hợp khác, như làm cho văn bản có màu đỏ, thêm biểu tượng nền – hãy mô tả điều đó trong CSS và sau đó thêm lớp [JavaScript có thể làm điều đó]. Điều đó linh hoạt hơn và dễ hỗ trợ hơn
Tên lớp và Danh sách lớp
Thay đổi lớp là một trong những hành động thường được sử dụng nhất trong tập lệnh
Vào thời cổ đại, có một giới hạn trong JavaScript. một từ dành riêng như
// add a class
document.body.classList.add['article'];
alert[document.body.className]; // main page article
0 không thể là một thuộc tính đối tượng. Hạn chế đó hiện không tồn tại, nhưng vào thời điểm đó không thể có tài sản
// add a class
document.body.classList.add['article'];
alert[document.body.className]; // main page article
0, như
// add a class
document.body.classList.add['article'];
alert[document.body.className]; // main page article
2Vì vậy, đối với các lớp, thuộc tính trông tương tự
// add a class
document.body.classList.add['article'];
alert[document.body.className]; // main page article
3 đã được giới thiệu.
// add a class
document.body.classList.add['article'];
alert[document.body.className]; // main page article
4 tương ứng với thuộc tính
// add a class
document.body.classList.add['article'];
alert[document.body.className]; // main page article
0Ví dụ
alert[document.body.className]; // main page
Nếu chúng ta gán thứ gì đó cho
// add a class
document.body.classList.add['article'];
alert[document.body.className]; // main page article
4, nó sẽ thay thế toàn bộ chuỗi lớp. Đôi khi đó là những gì chúng ta cần, nhưng thường thì chúng ta muốn thêm/xóa một lớpCó một tài sản khác cho điều đó.
// add a class
document.body.classList.add['article'];
alert[document.body.className]; // main page article
7
// add a class
document.body.classList.add['article'];
alert[document.body.className]; // main page article
7 là một đối tượng đặc biệt với các phương thức để
// add a class
document.body.classList.add['article'];
alert[document.body.className]; // main page article
9 một lớp duy nhấtVí dụ
// add a class
document.body.classList.add['article'];
alert[document.body.className]; // main page article
Vì vậy, chúng tôi có thể hoạt động trên cả chuỗi lớp đầy đủ bằng cách sử dụng
alert[document.body.className]; // main page
90 hoặc trên các lớp riêng lẻ bằng cách sử dụng
alert[document.body.className]; // main page
91. Những gì chúng tôi chọn phụ thuộc vào nhu cầu của chúng tôiPhương pháp của
alert[document.body.className]; // main page
91
93 – thêm/xóa lớpalert[document.body.className]; // main page
94 – thêm lớp nếu nó không tồn tại, nếu không thì xóa nóalert[document.body.className]; // main page
95 – kiểm tra lớp đã cho, trả vềalert[document.body.className]; // main page
96alert[document.body.className]; // main page
Bên cạnh đó,
alert[document.body.className]; // main page
91 có thể lặp lại, vì vậy chúng ta có thể liệt kê tất cả các lớp với
alert[document.body.className]; // main page
98, như thế này
alert[document.body.className]; // main page
9kiểu phần tử
Thuộc tính
alert[document.body.className]; // main page
99 là một đối tượng tương ứng với những gì được viết trong thuộc tính
alert[document.body.className]; // main page
00. Cài đặt
alert[document.body.className]; // main page
01 hoạt động tương tự như khi chúng ta có trong thuộc tính
alert[document.body.className]; // main page
5 một chuỗi
alert[document.body.className]; // main page
03Đối với thuộc tính nhiều từ, camelCase được sử dụng
alert[document.body.className]; // main page
0Ví dụ
alert[document.body.className]; // main page
5thuộc tính tiền tố
Các thuộc tính tiền tố của trình duyệt như
alert[document.body.className]; // main page
04,
alert[document.body.className]; // main page
05 cũng tuân theo quy tắc tương tự. một dấu gạch ngang có nghĩa là chữ hoaVí dụ
alert[document.body.className]; // main page
8Đặt lại thuộc tính kiểu
Đôi khi chúng tôi muốn gán một thuộc tính kiểu và sau đó xóa nó
Chẳng hạn, để ẩn một phần tử, chúng ta có thể đặt
alert[document.body.className]; // main page
06Sau đó, chúng tôi có thể muốn xóa
alert[document.body.className]; // main page
07 như thể nó chưa được đặt. Thay vì
alert[document.body.className]; // main page
08, chúng ta nên gán một chuỗi rỗng cho nó.
alert[document.body.className]; // main page
09
alert[document.body.className]; // main page
3Nếu chúng ta đặt
alert[document.body.className]; // main page
07 thành một chuỗi trống, thì trình duyệt sẽ áp dụng các lớp CSS và kiểu dựng sẵn của nó một cách bình thường, như thể không có thuộc tính
alert[document.body.className]; // main page
07 nào như vậy cảNgoài ra còn có một phương pháp đặc biệt cho điều đó,
alert[document.body.className]; // main page
52. Vì vậy, chúng tôi có thể loại bỏ một tài sản như thế này
alert[document.body.className]; // main page
7Viết lại toàn bộ với
53
alert[document.body.className]; // main page
Thông thường, chúng tôi sử dụng
alert[document.body.className]; // main page
54 để gán các thuộc tính kiểu riêng lẻ. Chúng tôi không thể đặt kiểu đầy đủ như
alert[document.body.className]; // main page
55, vì
alert[document.body.className]; // main page
56 là một đối tượng và nó chỉ đọcĐể đặt kiểu đầy đủ dưới dạng chuỗi, có một thuộc tính đặc biệt
alert[document.body.className]; // main page
53
alert[document.body.className]; // main page
3Thuộc tính này hiếm khi được sử dụng vì phép gán như vậy sẽ loại bỏ tất cả các kiểu hiện có. nó không thêm, nhưng thay thế chúng. Đôi khi có thể xóa một cái gì đó cần thiết. Nhưng chúng tôi có thể sử dụng nó một cách an toàn cho các phần tử mới, khi chúng tôi biết rằng chúng tôi sẽ không xóa một kiểu hiện có
Điều tương tự có thể được thực hiện bằng cách thiết lập một thuộc tính.
alert[document.body.className]; // main page
58Lưu ý các đơn vị
Đừng quên thêm các đơn vị CSS vào các giá trị
Chẳng hạn, chúng ta không nên đặt
alert[document.body.className]; // main page
59 thành
alert[document.body.className]; // main page
80, mà nên đặt thành
alert[document.body.className]; // main page
81. Nếu không nó sẽ không hoạt động
alert[document.body.className]; // main page
0Xin lưu ý. trình duyệt “giải nén” thuộc tính
alert[document.body.className]; // main page
82 ở dòng cuối cùng và suy ra
alert[document.body.className]; // main page
83 và
alert[document.body.className]; // main page
84 từ nóphong cách tính toán. getComputingStyle
Vì vậy, sửa đổi một phong cách là dễ dàng. Nhưng làm thế nào để đọc nó?
Chẳng hạn, chúng ta muốn biết kích thước, lề, màu sắc của một phần tử. Làm thế nào để làm nó?
Thuộc tính
alert[document.body.className]; // main page
5 chỉ hoạt động trên giá trị của thuộc tính
alert[document.body.className]; // main page
00, không có bất kỳ tầng CSS nàoVì vậy, chúng tôi không thể đọc bất cứ thứ gì đến từ các lớp CSS bằng cách sử dụng
alert[document.body.className]; // main page
99Ví dụ ở đây
alert[document.body.className]; // main page
5 không thấy lề
alert[document.body.className]; // main page
1…Nhưng điều gì sẽ xảy ra nếu chúng ta cần, chẳng hạn như tăng số tiền ký quỹ lên _______389?
Có một phương pháp khác cho điều đó.
alert[document.body.className]; // main page
30Cú pháp là
alert[document.body.className]; // main page
2elementElement để đọc giá trị cho. pseudoA pseudo-element nếu được yêu cầu, ví dụ như
alert[document.body.className]; // main page
31. Một chuỗi trống hoặc không có đối số có nghĩa là chính phần tử đóKết quả là một đối tượng có kiểu, như
alert[document.body.className]; // main page
99, nhưng bây giờ đối với tất cả các lớp CSSVí dụ
alert[document.body.className]; // main page
3Giá trị được tính toán và giải quyết
Có hai khái niệm trong CSS
- Giá trị kiểu được tính toán là giá trị sau khi tất cả các quy tắc CSS và kế thừa CSS được áp dụng, là kết quả của phân tầng CSS. Nó có thể trông giống như
33 hoặcalert[document.body.className]; // main page
34alert[document.body.className]; // main page
- Giá trị kiểu đã giải quyết là giá trị cuối cùng được áp dụng cho phần tử. Các giá trị như
35 hoặcalert[document.body.className]; // main page
36 là tương đối. Ví dụ, trình duyệt lấy giá trị được tính toán và làm cho tất cả các đơn vị cố định và tuyệt đối.alert[document.body.className]; // main page
37 hoặcalert[document.body.className]; // main page
38. Đối với các thuộc tính hình học, các giá trị được phân giải có thể có một dấu chấm động, nhưalert[document.body.className]; // main page
39alert[document.body.className]; // main page
Cách đây đã lâu,
alert[document.body.className]; // main page
30 đã được tạo ra để nhận các giá trị được tính toán, nhưng hóa ra các giá trị được phân giải thuận tiện hơn nhiều và tiêu chuẩn đã thay đổiVì vậy, ngày nay ________ 430 thực sự trả về giá trị đã phân giải của thuộc tính, thường là trong _______ 472 cho hình học
30 yêu cầu tên tài sản đầy đủ
alert[document.body.className]; // main page
Chúng ta nên luôn yêu cầu chính xác tài sản mà chúng ta muốn, chẳng hạn như
alert[document.body.className]; // main page
74 hoặc
alert[document.body.className]; // main page
75 hoặc
alert[document.body.className]; // main page
76. Nếu không, kết quả chính xác không được đảm bảoChẳng hạn, nếu có thuộc tính
alert[document.body.className]; // main page
77, thì chúng ta nên lấy gì cho
alert[document.body.className]; // main page
78? Các kiểu được áp dụng cho liên kết
79 bị ẩn
alert[document.body.className]; // main page
Các liên kết đã truy cập có thể được tô màu bằng cách sử dụng lớp giả CSS ________ 479
Nhưng
alert[document.body.className]; // main page
30 không cấp quyền truy cập vào màu đó, vì nếu không, một trang tùy ý có thể tìm hiểu xem người dùng có truy cập một liên kết hay không bằng cách tạo liên kết đó trên trang và kiểm tra các kiểuJavaScript có thể không thấy các kiểu được áp dụng bởi
alert[document.body.className]; // main page
79. Ngoài ra, có một hạn chế trong CSS cấm áp dụng các kiểu thay đổi hình học trong
alert[document.body.className]; // main page
79. Điều đó để đảm bảo rằng không có cách nào khác để một trang xấu kiểm tra xem một liên kết đã được truy cập hay chưa và do đó phá vỡ quyền riêng tưBản tóm tắt
Để quản lý các lớp, có hai thuộc tính DOM
90 – giá trị chuỗi, tốt để quản lý toàn bộ các lớpalert[document.body.className]; // main page
91 – đối tượng có phương thứcalert[document.body.className]; // main page
36, tốt cho các lớp riêng lẻalert[document.body.className]; // main page
Để thay đổi phong cách
Thuộc tính
5 là một đối tượng có kiểu dáng camelCased. Đọc và ghi vào nó có cùng ý nghĩa với việc sửa đổi các thuộc tính riêng lẻ trong thuộc tínhalert[document.body.className]; // main page
00. Để xem cách áp dụngalert[document.body.className]; // main page
39 và những thứ hiếm khác – có một danh sách các phương pháp tại MDNalert[document.body.className]; // main page
Thuộc tính
53 tương ứng với toàn bộ thuộc tínhalert[document.body.className]; // main page
00, chuỗi phong cách đầy đủalert[document.body.className]; // main page
Để đọc các kiểu đã giải quyết [đối với tất cả các lớp, sau khi tất cả CSS được áp dụng và các giá trị cuối cùng được tính toán]