Mã nguồn trò chơi ô chữ HTML5
Gần đây, tôi đã tạo một trò chơi ô chữ CSS thuần túy được triển khai bằng cách sử dụng lưới CSS không cần JavaScript để hoạt động. Nó đã thu hút được sự quan tâm khá nhanh chóng trên CodePen. Khi viết bài này, nó đã có hơn 350 trái tim và hơn 24.000 lượt xem trang Show Hướng dẫn CSS Grid Garden tuyệt vời đã truyền cảm hứng cho tôi xây dựng thứ gì đó với các tính năng Bố cục lưới. Tôi tự hỏi liệu những tính năng này có thể được sử dụng tốt trong việc xây dựng trò chơi ô chữ hay không — sau đó tôi nghĩ, hãy thử tạo toàn bộ mà không cần sử dụng JavaScript Xây dựng bảng / lướiVì vậy, điều đầu tiên, hãy tự tạo bảng Tôi đã kết thúc với cấu trúc cơ bản sau đây, với các nhận xét HTML được bao gồm để hiển thị những gì các phần khác nhau sẽ thực hiện
Điều đó đặt khung cơ bản của chúng tôi vào vị trí để chúng tôi có thể thêm nhiều yếu tố hơn và bắt đầu tạo kiểu cho mọi thứ Sử dụng các phần tử biểu mẫu cho hình vuôngTrò chơi ô chữ tôi đang tạo là một lưới 13×13 với 44 khoảng trống, vì vậy tôi cần tạo 125 phần tử 0, mỗi phần tử có ID riêng ở định dạng 1, tôi. e. 2. Đây là những gì lưới sẽ trông như thế nàoMỗi đầu vào sẽ có một 3 và 4 của “1” để mô phỏng hành vi của trò chơi ô chữ (i. e. một chữ cái trên mỗi ô vuông). Mỗi đầu vào cũng sẽ có thuộc tính 5 để xác thực biểu mẫu HTML5 sẽ được sử dụng. Tôi tận dụng tất cả các thuộc tính HTML5 này bằng CSSSử dụng Bộ chọn anh chị em chungCác yếu tố đầu vào được sắp xếp trực quan theo nhóm (chính xác là trò chơi ô chữ). Mỗi nhóm yếu tố đầu vào đại diện cho một từ trong ô chữ. Nếu mỗi phần tử trong nhóm đó hợp lệ (có thể xác minh bằng cách sử dụng bộ chọn giả 6), thì chúng ta có thể sử dụng CSS để tạo kiểu cho một phần tử xuất hiện sau trong DOM (sử dụng bộ chọn CSS nâng cao được gọi là bộ chọn anh chị em chung) mà Do cách hoạt động của bộ chọn anh chị em và cách CSS hoạt động nói chung, phần tử này phải xuất hiện sau trong DOM. CSS chỉ có thể tạo kiểu cho các phần tử đứng sau phần tử hiện được chọn. Nó không thể nhìn ngược trong DOM (hoặc lên cây DOM) và định kiểu thứ gì đó trước phần tử hiện tại (ít nhất là tại thời điểm này) Điều này có nghĩa là tôi có thể sử dụng lớp giả 6 để tạo kiểu cho các phần tử hợp lệ
Xem Ví dụ về Bộ chọn giả hợp lệ bút của SitePoint (@SitePoint) trên CodePen Để tạo kiểu cho một phần tử sau này trong DOM là phần tử anh em của phần tử khác, tôi có thể sử dụng bộ chọn ~ (dấu ngã/anh chị em chung), e. g. 8. Bộ chọn này sẽ chọn tất cả các phần tử khớp với B, là phần tử anh em của A và xuất hiện sau A trong DOM. Ví dụ 1Với đoạn mã này, nếu tất cả các phần tử đầu vào đều hợp lệ thì sẽ hiển thị phần tử 9Xem Bút Sử dụng Bộ chọn Anh chị em để Hiển thị Thông báo theo SitePoint (@SitePoint) trên CodePen Bộ chọn anh chị em chung cực kỳ hữu ích ở đây. Để trò chơi ô chữ hoạt động, tôi cần đảm bảo rằng mọi thứ được sắp xếp theo cách cho phép tôi tận dụng bộ chọn anh chị em chung Ví dụ ô chữ đã hoàn thành đang sử dụng kỹ thuật trên, bắt đầu từ dòng 285. Tôi đã tách nó ra trong khối mã bên dưới 3Phần CSS này đảm bảo rằng nếu tất cả các phần tử đầu vào này hợp lệ thì độ mờ của phần tử 10 sẽ bị thay đổi. 11 là anh chị em của tất cả các yếu tố đầu vào và 10 là con của 11 nên có thể chọn bằng CSSChỉ ra câu trả lời đúngMỗi câu trả lời ô chữ (i. e. nhóm yếu tố đầu vào) có mục lưới “chỉ báo câu trả lời đúng” ( 14) tương ứng. Các mục lưới này được đặt phía sau các thành phần đầu vào trên trục z và được ẩn bằng cách sử dụng 15. Khi một từ chính xác được nhập vào, thì mục lưới chỉ báo câu trả lời đúng sẽ được hiển thị bằng cách thay đổi 16 thành 17, như đoạn mã bộ chọn lớp giả ở trên minh họaKỹ thuật này được lặp lại cho từng nhóm “từ” của các phần tử đầu vào. Vì vậy, điều này có nghĩa là tạo thủ công từng quy tắc CSS cho từng thành phần đầu vào trong nhóm từ và sau đó chọn mục lưới chỉ báo câu trả lời đúng tương ứng. Như bạn có thể tưởng tượng, điều này làm cho CSS phát triển nhanh chóng Vì vậy, cách tiếp cận hợp lý sẽ là tạo tất cả các quy tắc CSS hiển thị/ẩn các mục lưới chỉ báo câu trả lời đúng cho tất cả các câu trả lời đầu mối theo chiều ngang (ngang qua). Sau đó, bạn sẽ làm tương tự cho các câu trả lời theo chiều dọc Những thách thức của hệ thống lướiGiống như tôi, nếu bạn đang cố gắng sử dụng càng ít CSS càng tốt, bạn sẽ nhanh chóng nhận ra rằng bạn không thể có các vùng lưới chồng chéo trong cùng một hệ thống lưới mà không cần phải khai báo rõ ràng. Họ chỉ có thể ngồi cạnh nhau (1 ngang và 1 xuống chia sẻ một ô vuông ở trên cùng bên phải của bảng và điều này là không thể khi sử dụng một lưới CSS để bố trí tất cả các mục chỉ báo câu trả lời đúng) Giải pháp là bọc từng mục lưới chỉ báo câu trả lời đúng theo chiều ngang (ngang) trong hệ thống lưới riêng của nó và từng mục lưới chỉ báo câu trả lời đúng theo chiều dọc (xuống dưới) trong một mục khác. Bằng cách này, tôi vẫn có thể sử dụng CSS để chọn chúng (sử dụng bộ chọn anh chị em chung) và chúng sẽ không can thiệp lẫn nhau và làm hỏng bố cục của lưới Các mục Bố cục lưới CSS hoạt động tương tự như các phần tử khối nội tuyến. Về cơ bản, điều này có nghĩa là nếu bạn chỉ định hai mục lưới chiếm cùng một không gian, thì mục thứ hai sẽ chạy xung quanh mục đầu tiên và xuất hiện sau mục đó trong lưới Xem Ví dụ về Mô-đun Bố cục Lưới Bút của SitePoint (@SitePoint) trên CodePen Trong ví dụ trên, mục lưới đầu tiên rộng bảy cột và kéo dài từ cột đầu tiên đến cột thứ bảy. Mục lưới thứ hai có nghĩa là bắt đầu ở cột thứ 4 và kéo dài đến cột thứ 9. Lưới CSS không thích điều này nên nó bao sang hàng tiếp theo. Ngay cả khi bạn chỉ định 18 trong mục thứ hai, mục đó sẽ được ưu tiên và sau đó di chuyển mục lưới đầu tiên sang hàng thứ haiNhư đã giải thích ở trên, tôi đã tránh điều này bằng cách có nhiều lưới cho các mục ngang và dọc. Có thể tránh tình trạng này bằng cách chỉ định khoảng cách hàng và cột cho từng phần tử, nhưng tôi đã sử dụng phương pháp trên để giảm lượng CSS và cũng để có cấu trúc HTML dễ bảo trì hơn Kiểm tra đầu vào thư hợp lệMỗi phần tử đầu vào có một thuộc tính 19 với một biểu thức chính quy làm giá trị của nó. Biểu thức chính quy khớp với chữ hoa hoặc chữ thường cho hình vuông đó 4Điều này không lý tưởng vì câu trả lời nằm trong HTML. Tôi muốn ẩn câu trả lời trong CSS, nhưng tôi không thể tìm ra cách nào để thực hiện việc này thành công. Tôi đã thử kỹ thuật sau 5Nhưng điều này sẽ không làm việc. Bộ chọn thuộc tính sẽ chọn phần tử dựa trên nội dung thực sự bên trong HTML và không xem xét các thay đổi trực tiếp. Vì vậy, tôi đã phải sử dụng cách tiếp cận lớp giả 6 được nêu chi tiết ở trên và do đó (và thật khó chịu) phơi bày các câu trả lời trong chính HTMLLàm nổi bật manh mối khi di chuộtTất cả các manh mối ngang (ngang) được bao bọc trong một 31, cũng như các manh mối dọc (xuống dưới). Các phần tử 31 gói này là anh em ruột của các phần tử 0 trong lưới ô chữ. Điều này được thể hiện trong cấu trúc HTML được liệt kê ở trên trong khối mã trước đó. Điều này giúp dễ dàng chọn (các) đầu mối chính xác tùy thuộc vào yếu tố đầu vào nào đang được tập trung/di chuộtĐối với điều này, mỗi phần tử 0 cần các kiểu 35, 36 và 37 để làm nổi bật đầu mối liên quan bằng cách áp dụng màu nền khi người dùng tương tác với phần tử 0 5Đánh số các manh mốiCác số cho manh mối được định vị bằng cách sử dụng mẫu Lưới CSS. Đây là một ví dụ về HTML, viết tắt 6Sau đó, CSS trông giống như thế này 7Mỗi số được đặt ở vị trí bắt đầu của nhóm phần tử đầu vào (hoặc từ) có liên quan của nó. Số này sau đó được tạo thành chiều rộng và chiều cao của 1 ô vuông lưới để nó chiếm ít không gian nhất có thể trong lưới. Nó có thể chiếm ít chỗ hơn bằng cách triển khai CSS Grid theo cách khác ở đây, nhưng tôi đã chọn thực hiện theo cách này Hộp kiểm “Kiểm tra ô vuông hợp lệ”Ở đầu ô chữ, bạn sẽ thấy hộp kiểm có nhãn “Kiểm tra ô vuông hợp lệ”. Điều này cho phép người dùng kiểm tra xem một số chữ cái có đúng không, ngay cả khi một từ đã cho sai Tạo cái này khá đẹp vì nó là một quy tắc CSS làm cho tất cả các ô vuông hợp lệ được tô sáng. Đó là sử dụng hack hộp kiểm để chọn tất cả các phần tử đầu vào hợp lệ nằm sau hộp kiểm đã chọn trong DOM Đây là mã 8Phần kết luậnĐiều đó bao gồm tất cả các kỹ thuật chính được sử dụng trong bản demo. Như một bài tập, điều này cho bạn thấy CSS đã tiến xa như thế nào trong những năm gần đây. Có rất nhiều tính năng chúng ta có thể sáng tạo với. Tôi nóng lòng muốn thử và đẩy các tính năng mới khác đến giới hạn Nếu bạn muốn loay hoay với CSS từ bài viết này, tôi đã đưa tất cả các mã ví dụ vào bộ sưu tập CodePen. Bạn có thể tìm thấy Câu đố ô chữ CSS đầy đủ đang hoạt động tại đây Chia sẻ bài viết nàyAdrian Roworth Adrian là nhà phát triển web front-end làm việc tại Scotland. Trong cuộc đời làm việc của mình, Adrian thích sử dụng CSS và JavaScript theo những cách mới lạ và sáng tạo. Khi anh ấy không viết mã, anh ấy dành thời gian chơi guitar và trống |