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

Tạo đường "lượn sóng" cho landing page với công cụ Haikei

0 0 18

Người đăng: Trần Xuân Thắng

Theo Viblo Asia

Đôi lúc ghé thăm những trang landing page ở những web phổ biến, có bao giờ bạn bắt gặp phần dải phân cách giữa các section thay vì đường kẻ ngang đơn giản, thì lại là một đường cong "lượn sóng" mượt mà? Bạn có thắc mắc họ đã làm thế nào, và làm sao để đem những chi tiết độc đáo đó vào landing page của chính bạn, để làm tăng thêm vẻ mềm mại và tự nhiên cho landing page của bạn?

Có rất nhiều cách để làm ra dải phân cách kể trên, nhưng trong bài này mình xin hướng dẫn một cách đơn giản và nhanh gọn với công cụ Haikei miễn phí.

Chuẩn bị

Để thuận tiện cho việc hướng dẫn trong bài, mình có chuẩn bị nhanh trước cho bạn một trang landing page đơn giản ban đầu để thực hành với Tailwind CSS 3 như sau:

<!doctype html>
<html> <head> <meta charset="utf-8"> <title>Untitled</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <script src="https://cdn.tailwindcss.com"></script> </head> <body> <header class="h-[80vh] bg-blue-600 flex flex-col md:flex-row items-center justify-center md:justify-between overflow-hidden"> <div class="p-8 flex-0"> <div class="bg-blue-200 h-10 w-[18rem] mb-4"></div> <div class="bg-blue-300 h-5 w-[20rem] mb-1"></div> <div class="bg-blue-300 h-5 w-[24rem] mb-1"></div> <div class="bg-blue-300 h-5 w-[14rem]"></div> </div> <div class="hidden md:block h-[80%] flex-0"> <div class="translate-x-6 rounded-lg w-[800px] h-full bg-blue-700 flex flex-col overflow-hidden shadow-lg shadow-blue-900/30"> <div class="w-full h-8 bg-blue-800 flex gap-1 items-center p-3"> <div class="rounded-full h-4 w-4 bg-blue-300"></div> <div class="rounded-full h-4 w-4 bg-blue-300"></div> <div class="rounded-full h-4 w-4 bg-blue-300"></div> </div> </div> </div> </header> <section class="min-h-[80vh] bg-white flex flex-col lg:flex-row gap-4 justify-between items-center py-16 max-w-screen-lg mx-auto overflow-hidden"> <div class="flex flex-col items-center"> <div class="rounded-lg w-36 h-36 bg-gray-200 mb-3"></div> <div class="w-[16rem] h-5 bg-gray-100 mb-1"></div> <div class="w-[13rem] h-5 bg-gray-100"></div> </div> <div class="flex flex-col items-center"> <div class="rounded-lg w-36 h-36 bg-gray-200 mb-3"></div> <div class="w-[16rem] h-5 bg-gray-100 mb-1"></div> <div class="w-[13rem] h-5 bg-gray-100"></div> </div> <div class="flex flex-col items-center"> <div class="rounded-lg w-36 h-36 bg-gray-200 mb-3"></div> <div class="w-[16rem] h-5 bg-gray-100 mb-1"></div> <div class="w-[13rem] h-5 bg-gray-100"></div> </div> </section> <section class="min-h-[80vh] bg-yellow-200 flex flex-col items-center justify-center py-16"> <div class="bg-yellow-400 h-8 w-[18rem] mb-8"></div> <div class="bg-yellow-300 h-5 w-[27rem] mb-1"></div> <div class="bg-yellow-300 h-5 w-[27rem] mb-1"></div> <div class="bg-yellow-300 h-5 w-[27rem] mb-1"></div> <div class="bg-yellow-300 h-5 w-[27rem] mb-1"></div> <div class="bg-yellow-300 h-5 w-[27rem] mb-1"></div> <div class="bg-yellow-300 h-5 w-[20rem] mb-1"></div> </section> <footer class="bg-gray-800 min-h-[10vh] py-16 flex flex-col items-center justify-center"> <div class="bg-gray-600 h-5 w-[10rem]"></div> </footer> </body>
</html>

Tiến hành

Tạo hình lượn sóng

Hình 1

Truy cập vào địa chỉ app.haikei.app, sau đó chọn vào công cụ Wave:

Chỉnh kích thước của hình thành 2500x150 pixel:

Đổi màu sắc lại cho tương ứng với màu nền của 2 section nối tiếp nhau. Ở ví dụ landing page của mình, nền phía trên có mã màu là #2563eb, màu nền phía bên dưới là #ffffff.

Tùy chỉnh các lựa chọn sao cho vừa với ý muốn của bạn, sau đó lưu lại hình dưới dạng SVG:

Hình 2

Sau đó đến đường để nối tiếp giữa 2 section phía dưới. Nền phía trên có mã màu #ffffff, còn nền phía dưới là #fef08a. Bạn có thể sinh ngẫu nhiên lại hình một vài lần cho đến khi vừa ý và lưu lại hình khi đã xong.

Hình 3

Tương tự với 2 hình đầu:

Tại sao lại là 2500x150 pixel?

Không phải là tạo hình SVG có chiều rộng lên đến 2500 pixel sẽ quá thừa với nhiều thiết bị và sẽ tốn nhiều dung lượng, làm chậm web hơn? Mình xin được bao biện cho hành động này bằng 3 ý:

  • Hầu hết người dùng hiện nay có chiều rộng màn hình không nhiều hơn 2500 pixel
  • Vì là hình dạng vector (SVG) nên 2500 pixel không phải là vấn đề quá lớn. Thực chất, các hình bạn tạo ra theo các bước trên đều không quá 2KB dung lượng.
  • Nếu để hình SVG có chiều rộng bé hơn, bạn có thể sẽ phải stretch hình để vừa với chiều ngang của viewport của trình duyệt. Tuy nhiên, nhiều trình duyệt không stretch được một cách hoàn hảo hình SVG và để lại đường kẻ khác màu, làm giảm thẩm mỹ của thành quả của chúng ta.

Tiến hành thêm vào landing page

Trước tiên, bạn cần đổi tên các hình đã được tải ở bước trước và bỏ nó vào thư mục của project ở đường dẫn theo ý muốn.

Đoạn code để thêm vào landing page chỉ đơn giản như sau:

<!-- header -->
<div class="overflow-hidden"> <img class="max-w-none" src="./1.wave-haikei.svg" width="2500" height="150" alt="">
</div>
<!-- section 1 -->
<div class="overflow-hidden"> <img class="max-w-none" src="./2.wave-haikei.svg" width="2500" height="150" alt="">
</div>
<!-- section 2 -->
<div class="overflow-hidden"> <img class="max-w-none" src="./3.wave-haikei.svg" width="2500" height="150" alt="">
</div>
<!-- footer -->

CSS overflow: hidden giúp ẩn đi phần hình bị thừa mà không tạo ra thêm thanh scrollbar (vì hình chúng ta tạo có width dài đến 2500 pixel!), còn max-width: none giúp hình svg có thể rộng đúng với chiều rộng gốc của nó.

Thành quả cuối cùng

Kết quả cuối cùng của chúng ta sẽ trông như hình phía dưới:

Hoặc bạn có thể xem demo tại tranxuanthang.gitlab.io/landing-demo.

Còn gì khác không?

Không chỉ cho tạo hình dạng lượn sóng (wave), Haikei còn cung cấp khả năng generate ra nhiều dạng hình khác như nền với màu mờ (blur), các hình thù dị dạng (blob),... Tất cả đều được sinh ra ngẫu nhiên, tức hoàn toàn không đụng hàng với bất cứ ai khác! Bằng cách khôn khéo tận dụng nó, bạn có thể giúp landing page mà bạn đang phát triển có giao diện trông đẹp và tự nhiên hơn rất nhiều. Nếu bạn biết các giải pháp hay khác hoặc công cụ hữu ích khác thì hãy cho mình và mọi người cùng biết ở phần bình luận nhé.

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 91

- 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 56

- 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 196

- 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 50

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

Vanilla JS Project: Tính tuổi

1. Yêu cầu.

0 0 72

- 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 48