Responsive Web Design (RWD)
สวัสดีครับ สำหรับบทความนี้ เราจะมาพูดถึงเรื่องเกี่ยวกับ Responsive Web Design (RWD) ที่สำคัญสำหรับนักพัฒนาเว็บไซต์ ซึ่งจะนำเสนอการเข้าถึงเว็บไซต์ที่ดีให้กับผู้ใช้ ทำให้เว็บไซต์สามารถปรับได้ทุกรูปแบบของอุปกรณ์
ในบทความนี้ คุณจะได้รับรู้ถึง RWD คืออะไร, เหตุผลที่ต้องใช้ RWD, ประโยชน์และข้อจำกัดของการพัฒนาเว็บไซต์ด้วย Responsive Web Design รวมทั้งจะได้รับคำแนะนำและแนวทางการทำที่เพียงพอเพื่อทำให้เว็บไซต์ของคุณเป็น Responsive Web Design พร้อมกับตัวอย่างการเขียนโค้ดที่ใช้งานง่าย
Responsive Web Design คืออะไร และทำไมต้องมี
Responsive Web design หรือ RWD เป็นตัวช่วยในการพัฒนาเว็บไซต์ โดยจะมีจุดมุ่งหมายเพื่อให้ผู้ใช้งานสามารถเข้าชมเว็บไซต์ได้อย่างมีประสิทธิภาพ รวมถึงเว็บไซต์สามารถแสดงผลได้อย่างดีบนทุกอุปกรณ์ต่างๆ โดยเราจะใช้ Layout ที่มีความยืดหยุ่น และใช้รูปภาพที่สามารถปรับขนาดได้ ซึ่งคุณสามารถทำการพัฒนาเว็บไซต์ด้วยการเขียนเว็บไซต์โดยใช้ HTML และ CSS ในการควบคุมการแสดงผลเป็นหลัก เพื่อให้แยกการแสดงผลได้อย่างสวยงามตามทุกขนาดของหน้าจอ ไม่ว่าจะเป็นสมาร์ทโฟน แท็บเล็ต แล็ปท็อป และคอมพิวเตอร์ หรืออื่นๆ เป็นต้น
เหตุผลที่จำเป็นต้องใช้ Responsive Web Design (RWD)
- มีการใช้งานหลายอุปกรณ์ในการเข้าถึงเว็บไซต์ โดยผู้คนใช้เว็บไซต์ด้วยหลายอุปกรณ์ เช่น คอมพิวเตอร์ทั้งตั้งโต๊ะและพกพา หรือ แท็บเล็ต และ มือถือ
- การปรับตัวตามความหลากหลายของขนาดหน้าจอ โดยขนาดหน้าจอของอุปกรณ์แต่ละตัวมีความหลากหลาย
- การปรับการแสดงผลของข้อมูล บางครั้ง ข้อมูลบางประการอาจไม่เหมาะสมที่จะแสดงในขนาดหน้าจอที่เล็กเกินไป
ประโยชน์ของการพัฒนาเว็บไซต์ด้วย Responsive Web Design
- พัฒนาเว็บไซต์เพียงแค่ครั้งเดียว จะสามารถรองรับได้ทุกอุปกรณ์
- เพิ่มความรวดเร็วในการดูแล หรือจัดการเว็บไซต์
- ประหยัดเวลาและค่าใช้จ่าย โดยทำหน้าต่างแยกกันระหว่าง Mobile และ Desktop site
- ได้รับการรับรองจาก Google ซึ่งจะช่วยติด Index google ในหน้าเดียว โดยได้ทั้งสองหน้าพร้อมกัน คือแบบ Desktop และ Mobile site
- สร้างประสบการณ์การใช้งานที่ดีให้กับผู้เข้าชมเว็บไซต์
ข้อจำกัดของการพัฒนาเว็บไซต์ด้วย Responsive Web Design
- สำหรับการเขียนโค้ดให้สามารถรองรับหลาย Devices พร้อมกัน อาจทำให้เกิดปัญหาได้ เช่น โทรศัพท์มือถือมีหน้าจอขนาดเล็ก
- ในการซ่อนเนื้อหาที่ไม่มีความจำเป็น เช่น โฆษณาต่างๆ ซึ่งในบางเว็บบราวเซอร์อาจจะยังมีการโหลดข้อมูลเหล่านี้และเข้ามาแสดงผลอยู่ด้วย
- ในเรื่อง Image Resizing ที่ไม่ได้ทำการไปลด File Size ของตัว Image อาจจะทำให้เวอร์ชั่นของโทรศัพท์มือถือต้องโหลดรูปแสดงผลเดียวกับบน Desktop ซึ่งทำให้เสียเวลาในการโหลดโดยไม่จำเป็น
ขั้นตอนในการทำ Responsive Web Design เป็นอย่างไร
- Media Queries
เริ่มต้นด้วยการใช้ Media Queries เพื่อนช่วยให้คุณสามารถกำหนดสไตล์ของเว็บไซต์ของคุณ ให้เปลี่ยนแปลงตามขนาดหน้าจอ ใน CSS คุณสามารถใช้ @media
rule เพื่อกำหนดสไตล์สำหรับขนาดหน้าจอที่แตกต่าง
- ข้อดี : ช่วยให้นักพัฒนาเว็บไซต์มีความยืดหยุ่นในการปรับแต่งสไตล์ CSS
- การใช้งาน : นักพัฒนาสามารถใช้
@media
rule ในCSS
เพื่อกำหนดเงื่อนไขและปรับสไตล์ตามขนาดหน้าจอที่ต้องการ
@media only screen and (max-width: 768px) {
/* ปรับการแต่งสไตล์สำหรับขนาดหน้าจอน้อยกว่าหรือเท่ากับ 768px */
body {
font-size: 14px;
}
/* เพิ่มการปรับแต่งอื่น ๆ ตามต้องการ */
}
2. Grid Systems และ Flexbox
Grid Systems และ Flexbox เป็นเครื่องมือที่มีประสิทธิภาพ สำหรับช่วยในการจัดวางหน้าเว็บไซต์ให้ Responsive โดย Grid Systems ช่วยในการสร้างโครงสร้างหลายคอลัมน์และ Flexbox ช่วยในการจัดการองค์ประกอบในลักษณะของแถวหรือคอลัมน์ เป็นต้น
- ข้อดี : Flexbox ทำให้การจัดวางขององค์ประกอบในเว็บไซต์เป็นเรื่องง่าย มีความยืดหยุ่นและให้ความสามารถในการจัดการพื้นที่ได้อย่างอิสระ
- การใช้งาน: Flexbox ใช้สำหรับจัดการกับองค์ประกอบในลักษณะของแถวหรือคอลัมน์ และ Grid Layout ใช้สำหรับการจัดลำดับแบบกริด เช่น
display: flex
และflex
properties เป็นต้น
.container {
display: flex;
justify-content: space-between;
}
.column {
flex: 1;
}
3. Responsive Images
ทำให้รูปภาพของคุณปรับขนาด Responsive ได้ตามขนาดหน้าจอ โดยใช้ CSS properties เพื่อให้รูปภาพปรับขนาดได้ตามขนาดหน้าจอที่ต้องการ
- ข้อดี : ช่วยลดการโหลดข้อมูลไม่จำเป็นและสามารถปรับขนาดได้ตามความต้องการ
- การใช้งาน : ใช้
<img> tag
ร่วมกับCSS properties
เพื่อให้รูปภาพปรับขนาดตามขนาดหน้าจอ
img {
max-width: 100%;
height: auto;
}
4. Fluid Typography
ทำให้ขนาดตัวอักษรปรับตัวได้ตามขนาดหน้าจอ
body {
font-size: calc(16px + 0.5vw);
}
5. Mobile-First Design
นำเสนอการออกแบบโดยให้มุมมองเฉพาะสำหรับมือถือก่อน
@media only screen and (min-width: 768px) {
/* ปรับแต่งสไตล์สำหรับขนาดหน้าจอขนาดใหญ่ที่ขึ้น */
}
6. ทดสอบ
ใช้ Google Chrome Developer Tools เพื่อทดสอบการแสดงผลของเว็บไซต์ของคุณในหลายขนาดหน้าจอ โดยการเปิด Developer Tools และเลือก Responsive Design Mode เพื่อดูหน้าเว็บไซต์ในโหมดทดสอบ
ตัวอย่าง Code Responsive Web Design โดยใช้ React JS
เริ่มต้นโดยการติดตั้งโปรเจกต์ React JS ก่อนสิ่งที่ต้องมีคือ
- Node.js 8.10.0 หรือใหม่กว่า
- npm 5.2 หรือใหม่กว่า
ใครยังไม่มี สามารถกดดาวน์โหลดได้ที่ https://nodejs.org/en/ เวอร์ชั่นล่าสุดที่ใหม่กว่า 8.10.0 มาติดตั้งก่อนนะครับ ซึ่งการติดตั้ง Node.js เราจะได้ npm มาพร้อมกันเลย
เช็คเวอร์ชั่น Node และ npm
ไปที่ Terminal แล้วพิมพ์คำสั่ง
node -v
-------
v21.1.0
npm -v
------
10.2.0
มาเริ่มสร้างโปรเจกต์ใหม่ด้วย create-react-app กัน
เปิด Terminal แล้วพิมพ์คำสั่งดังต่อไปนี้ สำหรับคนที่ใช้ npm 5.2 ขึ้นไป
npx create-react-app my-app
cd my-app
npm start
- ใช้คำสั่ง npx create-react-app my-app (ชื่อโปรเจกต์ของเรา) เพื่อสร้างโปรเจกต์ใหม่ที่ชื่อว่า “my-app”
- ใช้คำสั่ง cd my-app เพื่อเข้าไปที่โฟลเดอร์นั้น
- เริ่มการทดสอบโปรเจกต์ ด้วยคำสั่ง npm start
- เปิดเว็บบราวเซอร์ http://localhost:3000 ก็จะเห็นเว็บของเราทำงานได้แล้ว !
ถัดไปเรามาเริ่มสร้าง Responsive Web Design กัน โดยทำการแก้ไขไฟล์ App.js
// App.js
import React from 'react';
import { useMediaQuery } from 'react-responsive';
import MediaQuery from 'react-responsive';
import { DesktopNav, MobileNav, TabletNav } from './Component';
const Container = ({ children }) => {
return (
<section>
{children}
</section>
);
};
const Navbar = ({ children }) => {
return (
<nav>
{children}
</nav>
);
};
const ContentView = () => {
return (
<div class="body-cont">
<div>
<h1>Responsive Web Design</h1>
<h2>Device Test !</h2>
<MediaQuery minWidth={992}>
<p>You are a desktop or laptop site</p>
</MediaQuery>
<MediaQuery minWidth={768} maxWidth={991}>
<p>You're a tablet or a landscape smartphone site</p>
</MediaQuery>
<MediaQuery maxWidth={767}>
<p>You're a smartphone site</p>
</MediaQuery>
</div>
</div>
);
};
const App = () => {
const isDesktop = useMediaQuery({ minWidth: 992 });
const isTablet = useMediaQuery({ minWidth: 768, maxWidth: 991 });
const isMobile = useMediaQuery({ maxWidth: 767 });
return (
<Container>
<Navbar>
{isDesktop && <DesktopNav />}
{isTablet && <TabletNav />}
{isMobile && <MobileNav />}
</Navbar>
<Container>
<ContentView />
</Container>
</Container>
);
};
export default App;
ถัดไปสร้างไฟล์ใหม่ที่ชื่อว่า Component.js
// Component.js
import * as React from "react";
export function DesktopNav() {
return (
<nav class="desktop-nav">
<a href="Home">Home</a>
<a href="About">About</a>
<a href="Contact">Contact</a>
</nav>
);
}
export function TabletNav() {
return (
<nav class="tablet-nav">
<a href="Home">
<svg viewBox="0 0 1024 1024" fill="currentColor" height="1.5em" width="1.5em">
<path d="M946.5 505L560.1 118.8l-25.9-25.9a31.5 31.5 0 00-44.4 0L77.5 505a63.9 63.9 0 00-18.8 46c.4 35.2 29.7 63.3 64.9 63.3h42.5V940h691.8V614.3h43.4c17.1 0 33.2-6.7 45.3-18.8a63.6 63.6 0 0018.7-45.3c0-17-6.7-33.1-18.8-45.2zM568 868H456V664h112v204zm217.9-325.7V868H632V640c0-22.1-17.9-40-40-40H432c-22.1 0-40 17.9-40 40v228H238.1V542.3h-96l370-369.7 23.1 23.1L882 542.3h-96.1z" />
</svg>
</a>
<a href="About">
<svg viewBox="0 0 1024 1024" fill="currentColor" height="1.5em" width="1.5em">
<path d="M928 160H96c-17.7 0-32 14.3-32 32v640c0 17.7 14.3 32 32 32h832c17.7 0 32-14.3 32-32V192c0-17.7-14.3-32-32-32zm-40 110.8V792H136V270.8l-27.6-21.5 39.3-50.5 42.8 33.3h643.1l42.8-33.3 39.3 50.5-27.7 21.5zM833.6 232L512 482 190.4 232l-42.8-33.3-39.3 50.5 27.6 21.5 341.6 265.6a55.99 55.99 0 0068.7 0L888 270.8l27.6-21.5-39.3-50.5-42.7 33.2z" />
</svg>
</a>
<a href="Contact">
<svg viewBox="0 0 1024 1024" fill="currentColor" height="1.5em" width="1.5em">
<path d="M594.3 601.5a111.8 111.8 0 0029.1-75.5c0-61.9-49.9-112-111.4-112s-111.4 50.1-111.4 112c0 29.1 11 55.5 29.1 75.5a158.09 158.09 0 00-74.6 126.1 8 8 0 008 8.4H407c4.2 0 7.6-3.3 7.9-7.5 3.8-50.6 46-90.5 97.2-90.5s93.4 40 97.2 90.5c.3 4.2 3.7 7.5 7.9 7.5H661a8 8 0 008-8.4c-2.8-53.3-32-99.7-74.7-126.1zM512 578c-28.5 0-51.7-23.3-51.7-52s23.2-52 51.7-52 51.7 23.3 51.7 52-23.2 52-51.7 52zm416-354H768v-56c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v56H548v-56c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v56H328v-56c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v56H96c-17.7 0-32 14.3-32 32v576c0 17.7 14.3 32 32 32h832c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32zm-40 568H136V296h120v56c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-56h148v56c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-56h148v56c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-56h120v496z" />
</svg>
</a>
</nav>
);
}
export function MobileNav() {
return (
<div class="dropdown">
<span>
<svg fill="none" viewBox="0 0 15 15" height="3em" width="3em">
<path
fill="currentColor"
fillRule="evenodd"
d="M7.5 3.1a.4.4 0 100 .8h7a.4.4 0 000-.8h-7zm0 2a.4.4 0 100 .8h7a.4.4 0 000-.8h-7zm-.4 2.4c0-.22.18-.4.4-.4h7a.4.4 0 010 .8h-7a.4.4 0 01-.4-.4zm.4 1.6a.4.4 0 100 .8h7a.4.4 0 000-.8h-7zm-.4 2.4c0-.22.18-.4.4-.4h7a.4.4 0 010 .8h-7a.4.4 0 01-.4-.4zM2.5 9.25L5 6H0l2.5 3.25z"
clipRule="evenodd"
/>
</svg>
</span>
<div class="dropdown-content">
<a href="Home">Home</a>
<a href="Contact">Contact</a>
<a href="About">About</a>
</div>
</div>
);
}
สุดท้ายตกแต่ง CSS ที่ไฟล์ index.css
// index.css
.body-cont {
display: flex;
justify-content: center;
align-items: center;
}
.body-cont h1 {
font-weight: 200;
font-size: 3rem;
}
.body-cont div {
text-align: center;
}
.desktop-nav {
display: flex;
justify-content: center;
align-items: center;
min-height: 10vh;
font-size: 1.4rem;
background-color: darksalmon;
}
.desktop-nav a {
color: black;
text-decoration: none;
padding: 1rem;
}
.desktop-nav a:hover {
background-color: cornflowerblue;
}
.tablet-nav {
display: flex;
justify-content: center;
align-items: center;
min-height: 10vh;
font-size: 1.4rem;
background-color: darksalmon;
}
.tablet-nav a {
color: black;
font-size: 1em;
text-decoration: none;
padding: 1rem;
}
.tablet-nav a:hover {
background-color: cornflowerblue;
}
.dropdown {
display: flex;
justify-content: left;
align-items: center;
min-height: 10vh;
font-size: 1.4rem;
padding: 1rem;
background-color: darksalmon;
}
.dropdown-content {
display: none;
position: absolute;
top: 0px;
background-color: #f9f9f9;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
padding: 12px 16px;
z-index: 1;
}
.dropdown-content a {
color: black;
display: block;
font-size: 1em;
text-decoration: none;
padding: 1rem;
}
.dropdown-content a:hover {
background-color: cornflowerblue;
}
.dropdown:hover .dropdown-content {
display: block;
margin-top: 105px;
margin-left: 30px;
}
ทำการรันโปรเจกต์ แล้วทดสอบ Responsive Web Design กัน
ไปที่ Terminal แล้วพิมพ์คำสั่ง
npm start
Desktop or Laptop site
Tablet site
Mobile site
สรุป
จบไปแล้วครับ สำหรับบทความที่กล่าวมาข้างต้น โดยตัว Responsive Web Design เป็นแนวคิดที่สำคัญในการพัฒนาเว็บไซต์ในยุคปัจจุบันนี้ โดยการใช้ Media Queries, Grid Systems, และ Flexbox, คุณสามารถปรับแต่งเว็บไซต์ของคุณให้เหมาะสมกับทุกรูปแบบของอุปกรณ์ได้อย่างง่ายดาย และสามารถทดสอบเว็บไซต์ของคุณในหลายขนาดหน้าจอเพื่อให้แน่ใจว่ามีการใช้งานที่ดีในทุกรูปแบบ ในบทความนี้เป็นเพียงแนวทางเบื้องต้น และเทคนิคพื้นฐาน ในการทำให้เว็บไซต์ของคุณเป็น Responsive แต่มันจะเพียงพอที่จะทำให้คุณสามารถเริ่มต้นกับ Responsive Web Design ในเวลาอันสั้นและกระชับชิด
…สุดท้ายท้ายสุด บทความนี้อาจไม่ได้ดีไปกว่าบทความอื่นที่เขียนเกี่ยวกับ Responsive Web Design (RWD) ผมหวังว่าทุกคนที่ได้เข้ามาอ่านบทความนี้จะได้รับประโยชน์ไม่มากก็น้อยนะครับ ถ้ามีข้อผิดพลาด หรือ ตกหล่นในส่วนไหน ก็ขออภัยมา ณ ที่นี้ด้วยครับ เจอกันใหม่ บทความหน้าครับ ขอบคุณครับ …