HTML Responsive Web Design


Responsive Web Design คือการสร้างหน้าเว็บที่แสดงผลได้เหมาะสมกับทุกอุปกรณ์ ซึ่งจะมีการปรับขนาดหน้าจอแสดงผลของเว็บไซต์ (Viewport) โดยอัตโนมัติ



Responsive Web Design คืออะไร ?

Responsive Web Design คือการใช้ HTML และ CSS เพื่อปรับขนาด, ซ่อน, ย่อ/ขยาย เว็บไซต์อัตโนมัติทำให้เว็บไซต์ดูดีในทุกขนาด (เดสก์ท็อป แท็บเล็ต และโทรศัพท์)


การตั้งค่า Viewport

ในการที่จะทำ Responsive Website คุณควรจะเพิ่มแท็ก <meta> ในหน้าเว็บของคุณ

ตัวอย่าง

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>

<h2>การตั้งค่า Viewport</h2>
<p>ตัวอย่างนี้ไม่ได้ทำอะไรเลยนอกจากแสดงวิธีเพิ่ม Viewport Meta Tag</p>

</body>
</html>

การตั้งค่าวิวพอร์ตของหน้าเว็บจะให้คำแนะนำแก่เบราว์เซอร์เกี่ยวกับวิธีควบคุมขนาดของหน้าเว็บ

นี่คือตัวอย่างของหน้าเว็บที่ไม่มี Viewport Meta Tag กับหน้าเว็บที่มี Viewport Meta Tag

ที่ไม่มี Viewport Meta Tag

มี Viewport Meta Tag


Responsive Images

Responsive Images คือรูปภาพที่ปรับขนาดให้พอดีกับเบราว์เซอร์ทุกขนาด

การใช้ Tag Width

ถ้าใช้ Tag width เป็น 100% รูปภาพจะตอบสนองและเพิ่มขนาดขึ้นและลง

ตัวอย่าง

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>

<h2>Responsive Image</h2>
<p>เมื่อใช้คุณสมบัติของ Tag width กำหนดเป็นค่าเปอร์เซ็นต์ รูปภาพจะขยายขนาดขึ้นและลงเมื่อปรับขนาดหน้าต่างเบราว์เซอร์ ปรับขนาดหน้าต่างเบราว์เซอร์เพื่อดูผลลัพธ์</p>

<img src="images/img_girl.jpg" style="width:100%;">

</body>
</html>

โปรดสังเกตว่าในตัวอย่างด้านบน สามารถปรับขนาดรูปภาพให้ใหญ่กว่าขนาดดั้งเดิมได้ เป็นดีกว่าคือการใช้ max-width

การใช้คุณสมบัติ max-width

หากใช้ max-width ตั้งค่าคุณสมบัติเป็น 100% รูปภาพจะย่อขนาดลงหากจำเป็น แต่จะไม่ขยายขนาดให้ใหญ่กว่ารูปขนาดดั้งเดิม

ตัวอย่าง

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>

<h2>Responsive Image</h2>
<p>"max-width:100%" ป้องกันไม่ให้รูปภาพมีขนาดใหญ่กว่าขนาดดั้งเดิม อย่างไรก็ตาม หากคุณทำให้หน้าต่างเบราว์เซอร์เล็กลง รูปภาพจะยังคงลดขนาดลง</p>
<p>ปรับขนาดหน้าต่างเบราว์เซอร์เพื่อดูผลลัพธ์</p>

<img src="images/img_girl.jpg" style="max-width:100%;height:auto;">

</body>
</html>

แสดงภาพที่แตกต่างกันให้ขึ้นอยู่กับความกว้างของเบราว์เซอร์

Element HTML <picture> ช่วยให้คุณสามารถกำหนดรูปภาพต่างๆ สำหรับขนาดหน้าต่างเบราว์เซอร์ต่างๆ

ลองปรับขนาดหน้าต่างเบราว์เซอร์เพื่อดูว่าภาพด้านล่างเปลี่ยนแปลงไปตามความกว้าง

ตัวอย่าง

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>

<h2>แสดงภาพที่แตกต่างกันขึ้นอยู่กับขนาดความกว้างของเบราว์เซอร์</h2>
<p>ลองปรับขนาดความกว้างของเบราว์เซอร์และรูปภาพจะเปลี่ยนที่ขนาด 600px และ 1500px</p>

<picture>
  <source srcset="images/img_smallflower.jpg" media="(max-width: 600px)">
  <source srcset="images/img_flowers.jpg" media="(max-width: 1500px)">
  <source srcset="images/flowers.jpg">
  <img src="images/img_flowers.jpg" alt="Flowers" style="width:auto;">
</picture>

</body>
</html>

Responsive Text Size

ขนาดข้อความสามารถกำหนดได้ด้วยหน่วย “vw” ซึ่งหมายถึง “ความกว้างของวิวพอร์ต”

ด้วยวิธีนี้ขนาดข้อความจะเป็นไปตามขนาดของหน้าต่างเบราว์เซอร์

ตัวอย่าง

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>

<h1 style="font-size:10vw;">Responsive Text</h1>

<p style="font-size:5vw;">ปรับขนาดหน้าต่างเบราว์เซอร์เพื่อดูว่าปรับขนาดข้อความอย่างไร</p>

<p style="font-size:5vw;">ใช้หน่วย "vw" เมื่อปรับขนาดข้อความ 10vw จะกำหนดขนาดเป็น 10% ของความกว้าง viewport</p>

<p>viewport คือขนาดหน้าต่างเบราว์เซอร์ 1vw = 1% ของความกว้างวิวพอร์ต ถ้า viewport กว้าง 50 ซม. 1vw คือ 0.5 ซม.</p>

</body>
</html>

การใช้ Media Queries

Media Queries เป็นหนึ่งในวิธีการทำเว็บไซต์ Responsive คุณสามารถกำหนดรูปแบบการแสดงผลที่แตกต่างกันเพื่อให้เหมาะกับขนาดเบราว์เซอร์ที่แตกต่างกัน

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
* {
  box-sizing: border-box;
}

.left {
  background-color: #2196F3;
  padding: 20px;
  float: left;
  width: 20%; /* The width is 20%, by default */
}

.main {
  background-color: #f1f1f1;
  padding: 20px;
  float: left;
  width: 60%; /* The width is 60%, by default */
}

.right {
  background-color: #04AA6D;
  padding: 20px;
  float: left;
  width: 20%; /* The width is 20%, by default */
}

/* Use a media query to add a break point at 800px: */
@media screen and (max-width: 800px) {
  .left, .main, .right {
    width: 100%; /* The width is 100%, when the viewport is 800px or smaller */
  }
}
</style>
</head>
<body>

<h2>Media Queries</h2>
<p>ลองปรับขนาดเบราว์เซอร์เพื่อดูความแตกต่างของหน้าเมนู</p>

<p>เช็คให้ชัวร์ว่าคุณปรับขนาดต่ำกว่า 800px จะเห็นการเปลี่ยนแปลง</p>

<div class="left">
  <p>เมนูด้านซ้าย</p>
</div>

<div class="main">
  <p>เนื้อหาหลัก</p>
</div>

<div class="right">
  <p>เนื้อหาด้านขวา</p>
</div>

</body>
</html>

Responsive Web Design – Frameworks

CSS Frameworks ยอดฮิตส่วนใหญ่รองรับ Responsive Design ใช้งานง่ายและใช้ฟรี

Bootstrap

Framework CSS ยอดนิยมอีกตัวหนึ่งคือ Bootstrap ใช้ HTML, CSS และ jQuery เพื่อสร้าง Responsive Web Pages

ตัวอย่าง

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
  </head>
<body>

<div class="container-fluid p-5 bg-primary text-white text-center">
  <h1>Bootstrap Page</h1>
  <p>ปรับขนาดเบราว์เซอร์เพื่อดูผลลัพธ์</p> 
</div>
  
<div class="container mt-5">
  <div class="row">
    <div class="col-sm-4">
      <h3>คอลัมน์ 1</h3>
      <p>โปรเจ็กเตอร์เวเฟอร์ คอนแทคโปลิศ ซิม นอร์ทราเมนสเก็ตช์คูลเลอร์...</p>
      <p>ภูมิทัศน์วาริชศาสตร์เป็นไงไฟต์ สหัสวรรษเบญจมบพิตร สลัมโค้ชสะบึมส์เฟรม ไลฟ์ แพนงเชิญจิ๊ก...</p>
    </div>
    <div class="col-sm-4">
      <h3>คอลัมน์ 2</h3>
      <p>โปรเจ็กเตอร์เวเฟอร์ คอนแทคโปลิศ ซิม นอร์ทราเมนสเก็ตช์คูลเลอร์...</p>
      <p>ภูมิทัศน์วาริชศาสตร์เป็นไงไฟต์ สหัสวรรษเบญจมบพิตร สลัมโค้ชสะบึมส์เฟรม ไลฟ์ แพนงเชิญจิ๊ก...</p>
    </div>
    <div class="col-sm-4">
      <h3>คอลัมน์ 3</h3>
      <p>โปรเจ็กเตอร์เวเฟอร์ คอนแทคโปลิศ ซิม นอร์ทราเมนสเก็ตช์คูลเลอร์...</p>
      <p>ภูมิทัศน์วาริชศาสตร์เป็นไงไฟต์ สหัสวรรษเบญจมบพิตร สลัมโค้ชสะบึมส์เฟรม ไลฟ์ แพนงเชิญจิ๊ก...</p>
    </div>
  </div>
</div>

</body>
</html>