- vừa được xem lúc

[HTML] Bài 9 - Các thẻ hỗ trợ đồ họa & Các thuộc tính tự tạo

0 0 11

Người đăng: Semi Art

Theo Viblo Asia

Trong bài viết này, chúng ta sẽ nói về một số thẻ hỗ trợ tạo ra các phần tử sử dụng để vẽ các giao diện đồ họa linh động như các đồ thị hay giao diện của các ứng dụng phức tạp. Bên cạnh đó thì chúng ta cũng sẽ có một phần giới thiệu ngắn về các thuộc tính tự tạo để gắn vào các phần tử HTML. Các thuộc tính này được sử dụng để lưu trữ các dữ liệu dùng trong các phần mềm mà chúng ta sẽ xây dựng trên nền trình duyệt web.

Các thẻ hỗ trợ đồ họa <canvas><svg>

Thẻ <canvas> (giấy vẽ) được sử dụng để tạo ra một container cho người viết code có thể vẽ các giao diện đồ họa phức tạp bằng JavaScript. Các object mô tả phần tử <canvas> trong JavaScript cung cấp các phương thức dựng sẵn để hỗ trợ vẽ các đường, khối vuông, khối tròn, chữ, và in nội dung ảnh vào khung <canvas>.

Các <canvas> sẽ được hiển thị như các phần tử <img> trong trang web với kiểu container là inline-block. Sau khi đã được trình duyệt web hiển thị xong nội dung, các <canvas> cũng có thể được người dùng lưu lại dưới dạng tệp ảnh .png.

Do mục đích sử dụng đặc định là vẽ nội dung bằng JavaScript nên các <canvas> thường được tạo ra kèm theo id để dễ tham chiếu từ code JavaScript.

japan.html

<!doctype html>
<html lang="en">
<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Japan</title> <link rel="stylesheet" href="japan.css">
</head>
<body> <canvas id="the-canvas"></canvas>
</body>
</html>

japan.css

* { box-sizing: border-box; margin: 0; padding: 0;
} body { padding: 30px 15px; background: lightgray;
} #the-canvas { display: block; margin: 0 auto; background: white; box-shadow: 9px 12px 6px gray;
}

japan.js

var canvas = document.getElementById('the-canvas');
var context = canvas.getContext('2d'); var circle = new Path2D();
circle.arc(360, 240, 150, 0, 2 * Math.PI); context.stroke(circle);
context.fillStyle = 'crimson';
context.fill(circle);

Xem kết quả hiển thị

Trong khi <canvas> được sử dụng để tạo ra nội dung đồ họa với kích thước tĩnh với số lượng điểm ảnh không thay đổi sau khi khởi tạo pixel based; Thì <svg> ở mặt khác lại được thiết kế để trình bày các đối tượng đồ họa dạng vector được định nghĩa bởi cú pháp của một ngôn ngữ đánh dấu khác có tên là XML. Các đối tượng đồ họa vector thường được tạo ra bởi các phần mềm thiết kế đồ họa như Inkscape hay Illustrator và có thể được lưu lại với định dạng tệp .svg.

Khác với các ảnh pixel based, các đối tượng đồ họa vector không có kích thước hiển thị cố định, mà thay vào đó được định nghĩa bởi các vector tương quan. Các vector này sẽ được thu phóng linh động trên các khung ảnh với kích thước khác nhau bất kể lớn hay nhỏ cũng sẽ đều cho kết quả hiển thị mượt mà, không có hiện tượng vỡ nét, hay bị nhòe như các ảnh pixel based khi được hiển thị trên khung ảnh lớn hơn. Để làm được điều này thì các tệp .svg thực hiện lưu trữ thông tin định nghĩa các đối tượng trong khung ảnh bằng code XML có cú pháp tương đồng với HTML. Chúng ta có thể trích xuất code XML từ các tệp thiết kế đồ họa và nhúng vào trang web để sử dụng.

Ngoài tiện ích về chất lượng hiển thị thì trong trường hợp sử dụng <svg>, trình duyệt web cũng sẽ tạo ra các object mô tả các đối tượng đồ họa để chúng ta có thể gắn các hàm xử lý sự kiện tương tác với người dùng. Điều này thuận tiện hơn rất nhiều so với việc xác định vị trí người dùng click chuột trên <canvas>.

vietnam.html

<!doctype html>
<html lang="en">
<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Việt Nam</title> <link rel="stylesheet" href="vietnam.css">
</head>
<body> <div id="the-flag"> <svg width="720" height="480"> <rect x="0" y="0" width="720" height="480" fill="crimson" /> <polygon points="360,90 240,390 540,195 180,195 480,390" fill="yellow" /> </svg> </div>
</body>
</html>

vietnam.css

* { box-sizing: border-box; margin: 0; padding: 0;
} body { padding: 30px 15px; background: lightgray;
} #the-flag { display: block; width: 720px; height: 480px; margin: 0 auto; box-shadow: 6px 12px 9px gray;
}

Xem kết quả hiển thị

Các thuộc tính tự tạo data-*

HTML cho phép chúng ta tự định nghĩa các thuộc tính với tên có dạng data-* để lưu trữ dữ liệu vào các object mô phỏng các phần tử. Giá trị của các thuộc tính này có thể được truy vấn và sử dụng trong code CSS và JavaScript. Điều này cho phép chúng ta tạo ra các giao diện người dùng có khả năng tương tác linh động hơn và cung cấp trải nghiệm sử dụng tốt hơn. Đồng thời, với phương thức lưu trữ dữ liệu này, chúng ta có thể tạo ra các ứng dụng với tính năng phong phú trên nền trình duyệt web mà không cần tương tác thường xuyên với máy chủ web.

Một ứng dụng khác của các thuộc tính data-*, đó là trong các framework cung cấp các thành phần với khả năng tùy biến mạnh mẽ như Bootstrap hay Foundation, chúng ta có thể gặp các thuộc tính data-* được sử dụng làm các tham số trạng thái cho nhiều thành phần tương tác. Ví dụ như trong Bootstrap, một số thành phần có thể được tắt tính năng hỗ trợ tương tác với người dùng màn hình cảm ứng bằng cách thêm vào thuộc tính data-bs-touch="false" (hoặc true nếu muốn hỗ trợ). Điều này cung cấp cho người sử dụng framework một giao diện triển khai đơn giản mà không cần viết thêm code JavaScript để tùy chỉnh các tính năng hỗ trợ.

article.html

<!doctype html>
<html lang="en">
<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>An article</title>
</head>
<body> <article id="article" data-post-id="1001"> <h1> [HTML] Bài 9 - Các thẻ hỗ trợ đồ họa & Các thuộc tính tự tạo </h1> <p> Trong bài viết này, chúng ta sẽ nói về một số thẻ hỗ trợ tạo ra các phần tử sử dụng để vẽ các giao diện đồ họa linh động như các đồ thị hay giao diện của các ứng dụng phức tạp. Bên cạnh đó thì chúng ta cũng sẽ có một phần giới thiệu ngắn về các thuộc tính tự tạo để gắn vào các phần tử HTML... </p> </article> <script src="article.js"></script>
</body>
</html>

article.js

var article = document.getElementById('article');
var postId = article.dataset.postId;
console.log(postId);
// result: '1001'

Bài viết giới thiệu về các thẻ hỗ trợ đồ họa và các thuộc tính tự tạo của chúng ta đến đây là kết thúc. Đây cũng là bài viết cuối cùng của Series HTML trong Tự Học Lập Trình Web Một Cách Thật Tự nhiên. Mình hy vọng rằng ở thời điểm này bạn đã cảm thấy hoàn toàn tự tin để có thể tự tìm hiểu những kiến thức HTML bổ trợ khi cần thiết. Series HTML của chúng ta đã đi qua các thẻ phổ biến nhất đang được sử dụng trong các framework hiện tại. Để tiện cho việc tra cứu và sử dụng các thẻ HTML khác khi cần đến, bạn có thể lưu lại 2 liên kết tham khảo sau:

Bình luận

Bài viết tương tự

- vừa được xem lúc

Một số quy tắc và name class phổ biến cho Front-end Dev

Trong CSS, các thủ tục setting đóng vai trò to lớn, nhưng bên cạnh đó, cách đặt tên theo các từ đơn sao cho phù hợp cũng quan trọng không kém . Đặt tên rất khó, nhưng cũng rất quan trọng .

0 0 79

- vừa được xem lúc

2021, chúng ta cần tối ưu hóa việc tải hình ảnh trên web như nào?

Rất chào các bạn,. Như các bạn đã biết, trong kỉ nguyên công nghệ, song song với sự sinh ra dày đặc của các trang web mới cũng là sự biến mất của những trang web "lạc hậu" hay hoạt động kém hiệu quả.

0 0 43

- vừa được xem lúc

Tài nguyên nghiên cứu sâu Html

1. Articles and standards. . HTML 5.

0 0 183

- vừa được xem lúc

Tìm hiểu về Event.preventDefault(), Event.stopPropagation() và Event.stopImmediatePropagation()

Chúng ta thương thấy 3 method này và có thể dẫn dến bối rối và nhầm lẫn giữa chúng:. . Event.preventDefault().

0 0 36

- vừa được xem lúc

Vanilla JS Project: Tính tuổi

1. Yêu cầu.

0 0 50

- vừa được xem lúc

Thủ thuật nhỏ để căn chỉnh image với object-fit

Chào các bạn,. Có lẽ trong hành trình code của các bạn thì không ít lần gặp vấn đề méo ảnh do fix cứng cả width, height của ảnh nhỉ? Hoặc kể cả khi bạn set value cho 1 thuộc tính weigth hoặc height còn thuộc tính còn lại để auto thì nhiều lúc ảnh cũng không được hiển thị toàn vẹn cho lắm.

0 0 34