Bài tập lớn Nhập môn điện toán - Bài tập lớn 3: Tìm hiểu về Responsive Web Design - Nguyễn Xuân Trực

TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH  
KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH  
NHẬP MÔN ĐIỆN TOÁN  
Bài tập lớn 3  
Tìm hiểu về Responsive Web Design  
GVHD: PGS.TS Quản Thành Thơ ([email protected])  
Đặng Xuân Kiệt Cáp ([email protected].vn)  
Thành viên: Nguyễn Xuân Trực - 1513804  
Trương Minh Tâm - 1512936  
Hồ Chí Minh, 01/2020  
Trường Đại học Bách Khoa – Đại học Quốc Gia TP. Hồ Chí Minh  
Khoa Khoa học và Kỹ thuật Máy tính  
Mục lục  
3
3
3
3
4
4
4
5
5
5
1.1 Đặt vấn đề . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
1.2 Responsive Web Desgin là gì? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
1.3 Lịch sử hình thành . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
1.4 Tầm quan trọng của Responsive Web Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
1.4.1 Đáp ứng nhu cầu thực tế . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
1.4.2 Hiệu quả kinh tế . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
1.4.3 Được Google Search khuyến khích, lợi ích cho SEO . . . . . . . . . . . . . . . . . . . . . .  
1.4.4 Sử dụng công nghệ tuy mới mà “cũ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
1.5 Quy tắc khi thực hiện Responsive Web Design . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
5
5
5
5
6
6
6
7
7
7
7
7
8
8
8
2.1 CSS3 Media Queries – Hỗ trợ các khung nhìn khác nhau . . . . . . . . . . . . . . . . . . . . . . .  
2.1.1 Media Query là gì? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
2.1.2 Media Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
2.1.3 Cú pháp Media Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
2.1.4 Một số Media Feature quan trọng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
2.1.4.a width, height . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
2.1.4.b decide-width, decide-height . . . . . . . . . . . . . . . . . . . . . . . . . .  
2.1.4.c aspect-ratio và device-aspect-ratio . . . . . . . . . . . . . . . . . . . . . .  
2.1.4.d resolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
2.1.4.e orientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
2.1.4.f Một số thuộc tính khác . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
2.2 Fluid Layouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
2.2.1 Khái niệm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
2.2.2 Các thành phần của Flexbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
2.2.3 Một số thuộc tính của Flexbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10  
2.2.3.a flex-direction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10  
2.2.3.b flex-wrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10  
2.2.3.c order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11  
2.2.3.d flex-grow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11  
2.2.3.e flex-shrink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12  
2.2.3.f flex-basis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12  
2.2.3.g justify-content . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12  
2.3 Responsive images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13  
13  
Bài tập lớn 3 - Nhập môn điện toán , 2019-2020  
Page 1/14  
Trường Đại học Bách Khoa – Đại học Quốc Gia TP. Hồ Chí Minh  
Khoa Khoa học và Kỹ thuật Máy tính  
Danh sách hình vẽ  
Các thành phần của Flexbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
3
4
4
8
Các giá trị của thuộc tính justify-content . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13  
Bài tập lớn 3 - Nhập môn điện toán , 2019-2020  
Page 2/14  
Trường Đại học Bách Khoa – Đại học Quốc Gia TP. Hồ Chí Minh  
Khoa Khoa học và Kỹ thuật Máy tính  
1 Tìm hiểu chung về Responsive Web Design  
1.1 Đặt vấn đề  
Sự phát triển nhanh chóng của các thiết bị kết nối internet (laptop, tablet, smartphone, . . . ) đặt ra một  
yêu cầu cấp bách cho những người thiết kế web: giao diện trang web phải thích nghi được trên bất kể thiết bị  
nào, như Iphone, iPad, netbook, BlackBerry, Kindle,. . . hay kể cả những chiếc điện thoại có màn hình nhỏ. Và  
trong những năm tới, với tốc độ phát triển smartphone như hiện nay, rõ ràng sẽ còn rất nhiều thiết bị được  
đưa ra thị trường với vô vàng các ràng buộc mới và kích thước màn hình khác nhau. Đây là một bài toán rất  
đau đầu cho nhiều người thiết kế web hiện nay. Vậy có nên phát triển nhiều phiên bản khác nhau cho từng loại  
thiết bị, như cách facebook đã làm?  
Hình 1: Giao diện trang web phải đáp ứng được nhiều loại thiết bị khác nhau  
Rõ ràng đó không phải là một lựa chọn tốt, bởi với vô vàng các thiết bị hiện tại, chúng ta đã rất khó để  
đáp ứng hết từng đấy thiết bị. Chưa kể trong tương lai, hàng loạt thiết bị mới ra đời, những thiết bị hiện tại  
có thể sẽ bị lỗi thời. Chúng ta liên tục phải thiết kế lại, như vậy chúng ta sẽ tốn rất nhiều chi phí và thời gian  
cho việc thiết kế lại, bảo trì, nâng cấp.  
Thực vậy, hàng loạt đồ công nghệ khủng ồ ạt ra đời cộng với nhu cầu xài web trên di động của người dùng  
ngày càng gia tăng, đồng nghĩa với việc chúng ta phải thiết kế trang web như thế nào để đáp ứng tất cả các  
kích thước màn hình khác nhau. Từ đó, một khái niệm mới ra đời - Responsive Web Design (RWD).  
1.2 Responsive Web Desgin là gì?  
Responsive Web Design là một thuật ngữ ám chỉ phương pháp thiết kế website cho khả năng hiển thị tương  
thích với mọi kích thước của thiết bị. Nói cách khác, bố cục của các trang web sẽ tự đáp ứng theo hành vi của  
người dùng và môi trường hiển thị. Môi trường ở đây chính là kích thước của trình duyệt, hướng xoay hoặc kích  
thước của thiết bị, còn thiết bị đa phần sẽ là những thiết bị di động như tablet hoặc smartphone.  
Hiểu một cách đơn giản nhất, Web Responsive là phong cách thiết kế Website, sao cho phù hợp với tất cả  
các thiết bị cũng như mọi độ phân giải màn hình. Vậy nên, một trang Web đẹp trên máy tính, nhưng khi xem  
trên tablet, điện thoại lại lộn xộn, không cân đối về hình ảnh, bố cục, bài viết thì chắc chắn không thể gọi là  
Web Responsive.  
Lưu ý rằng, Responsive Web Design chỉ sử dụng HTML và CSS. Responsive Web Design không phải là một  
chương trình hoặc đoạn mã JavaScript.  
1.3 Lịch sử hình thành  
Trang web đầu tiên được thiết kế có tính đáp ứng khi thay đổi kích thước trình duyệt là Audi.com vào năm  
2001. Tuy nhiên, lúc này nó chỉ đáp ứng tốt cho trình duyệt Internet Explorer. Đến năm 2008, một loạt các  
thuật ngữ mới xuất hiện dùng để mô tả cách bố cục trang web. Có thể kể đến như “flexible”, “liquid”, “fluid”,  
and “elastic”. Mãi đến cuối năm 2008 đầu 2009, CSS3 Media Query được khai sinh. Đây là tính năng làm tiền  
đề cho kỹ thuật RWD sau này.  
Bài tập lớn 3 - Nhập môn điện toán , 2019-2020  
Page 3/14  
         
Trường Đại học Bách Khoa – Đại học Quốc Gia TP. Hồ Chí Minh  
Khoa Khoa học và Kỹ thuật Máy tính  
Khi Ethan Marcotte cho ra đời thuật ngữ RWD thì đến năm 2012, RWD đã đứng vị trí thứ hai trong danh  
sách “Top Web Design Trends for 2012” bởi tạp chí net magazine. Đến năm 2013, Mashable gọi đây là năm  
của RWD. Hầu hết các website đều chuyển sang RWD vì nó mang hiệu quả kinh tế hơn thay vì phát triển ứng  
dụng mobile. Và đến ngày nay, thuật ngữ RWD được phổ biến rộng rãi. Có một điều gần như tuyệt đối khi một  
trang web mới xuất hiện, nó đều được thiết kế theo hướng này.  
Hình 2: Ethan Marcotte – cha đẻ của thuật ngữ Responsive Web Design  
1.4 Tầm quan trọng của Responsive Web Design  
1.4.1 Đáp ứng nhu cầu thực tế  
Với sự bùng nổ của sự phát triển các thiết bị di động, người dùng smartphone ngày càng tăng trưởng một  
cách nhanh chóng. Theo số liệu của dammio.com về người dùng Internet Việt Nam vào tháng 10/2018, có 72%  
người dùng sử dụng smartphone để truy cập Internet. Như vậy, nhu cầu sử dụng Internet nói chung ngày càng  
tăng và đặc biệt là có một lượng lớn người dùng truy cập Internet từ thiết bị di động. Vì thế, áp dụng RWD  
chính là đang đáp ứng với nhu cầu thực tế.  
Hình 3: Số liệu thống kê về thiết bị sử dụng Internet ở Việt Nam năm 2018 - Theo dammio.com  
1.4.2 Hiệu quả kinh tế  
Trước đây, các nhà phát triển phải xây dựng ít nhất hai giao diện cho trang web. Một dành cho PC, một  
dành cho di động. Hoặc thậm chí một số nhà phát triển còn phải xây dựng ứng dụng mobile. Điều này gây tốn  
kém về mặt chi phí. Chưa kể trên các ứng dụng hoặc giao diện riêng, việc hiển thị dữ liệu chưa chắc đã giống  
nhau. Vì thế nhà phát triển có thể gặp khó khăn trong việc quản lý.  
Bài tập lớn 3 - Nhập môn điện toán , 2019-2020  
Page 4/14  
         
Trường Đại học Bách Khoa – Đại học Quốc Gia TP. Hồ Chí Minh  
Khoa Khoa học và Kỹ thuật Máy tính  
Đối với RWD, với nguyên lý là một mã nguồn nhưng đa giao diện, tương thích tốt trên nhiều thiết bị. Mặc  
dù chúng ta không thể lường trước được kích thước của thiết bị. Nhưng với RWD, chuyện này là hoàn toàn khả  
thi. Từ đó tiết kiệm công sức và chi phí cho nhà phát triển.  
1.4.3 Được Google Search khuyến khích, lợi ích cho SEO  
Từ năm 2015, Google Search ưu tiên hiển thị các trang web có giao diện RWD. Thay đổi này với mong  
muốn các trang web hướng tới người dùng hơn. Với mong muốn các kết quả tìm được sẽ có nội dung văn bản dễ  
friendly) và nhập URL trang web. Kết quả hiển thị sẽ cho biết mức độ thân thiện của website. Nếu website  
không thân thiện với di động, thứ hạng trang có thể giảm đáng kể. Một khi trang web hỗ trợ RWD, cụ thể là  
thân thiện với di động, thứ hạng sẽ được tái xử lý.  
1.4.4 Sử dụng công nghệ tuy mới mà “cũ”  
Đối với các nhà phát triển web, RWD là một công nghệ mới. Tuy nhiên, bản chất của RWD cơ bản chỉ  
sử dụng CSS3. Nghĩa là, các nhà phát triển web đã có kinh nghiệm với HTML và CSS thì việc nắm bắt RWD  
cũng sẽ rất đơn giản trong thời gian ngắn.  
1.5 Quy tắc khi thực hiện Responsive Web Design  
Nội dung trang web phải luôn nằm trong giới hạn kích thước của chiều ngang màn hình, người dùng chỉ cần  
cuộn dọc từ trên xuống để xem được hết nội dung của trang web dễ dàng. Vì vây, nếu để người dùng phải cuộn  
ngang hoặc zoom trang web mới xem được toàn bộ nội dung sẽ không phải là RWD và dẫn đến trải nghiệm  
người dùng kém. Dưới đây là một sổ quy tắc khác cần tuân thủ trong khi làm RWD:  
- Không sử dụng các phần tử HTML có chiều rộng cố định quá lớn. Ví dụ: Một hình ảnh có chiều rộng quá  
lớn so với chiều rộng của các thiết bị nhỏ thì khi hiển thị trên các thiết bị này hình ảnh sẽ bị tràn ra ngoài và  
cần phải cuộn ngang để xem được toàn bộ ảnh. Vì vậy, cần phải điều chỉnh hình ảnh sao cho phù hợp với chiều  
rộng của từng thiết bị.  
- Sử dụng CSS media queries để định dạng cho từng thiết bị có chiều rộng khác nhau. Không nên sử dụng  
các giá trị tuyệt đối như px, pt cho các phần tử mang tính bao quát trong trang, điều này sẽ làm cho nội dung  
của trang web sẽ bị tràn khi xem ở thiết bị có chiều rộng nhỏ hơn giá trị đã thiết lập. Thay vì vậy, hãy sử dụng  
các giá trị mang tính tương đối như %, ví dụ như width: 100%;  
- Sử dụng icon SVG thay cho icon hình ảnh thông thường (JPG, PNG,...). Các icon, hình ảnh dạng SVG  
sẽ không bị mờ khi thu phóng ở bất kỳ kích thước nào, điều này sẽ giúp nội dung của trang web hiển thị tốt  
nhất trên các thiết bị Retina như iPhone, iPad, Macbook,...  
2 Các kỹ thuật Responsive Web Design  
2.1 CSS3 Media Queries – Hỗ trợ các khung nhìn khác nhau  
2.1.1 Media Query là gì?  
Media Query là một trong những module mới được thêm vào trong CSS3. Nó là một sự cải thiện của Media  
Type đã có từ CSS2, bằng việc thêm vào những cú pháp query để ta có thể đáp ứng được cho nhiều thiết bị  
với nhiều kích cỡ màn hình khác nhau.  
Module Media Query hiện đã được hỗ trợ đầy đủ trong các trình duyệt hiện đại như Webkit, Firefox, Opera  
hay IE (kể từ version 9).  
2.1.2 Media Type  
Media Query là một module mở rộng của Media Type. Vì vậy, để hiểu về Media Query, trước hết ta tìm  
hiểu về Media Type.  
Media Type vốn đã có từ CSS2, nó giúp ta xác định định dạng của mỗi loại thiết bị.  
Ta có thể sử dụng Media Type theo cú pháp sau đây: @media media_type {rules}.  
Tất cả các giá trị của Media Type bao gồm:  
• all: Dùng cho tất cả các loại Media Type  
• aural: Dùng cho speech and sound synthesizers  
• braille: Dùng cho các devices liên quan đến chữ nổi (braille)  
Bài tập lớn 3 - Nhập môn điện toán , 2019-2020  
Page 5/14  
             
Trường Đại học Bách Khoa – Đại học Quốc Gia TP. Hồ Chí Minh  
Khoa Khoa học và Kỹ thuật Máy tính  
• embossed: Dùng cho các loại máy in các trang braille  
• handheld: Dùng cho các thiết bị nhỏ, thiết bị cầm tay  
• print: Dùng cho máy in  
• projection: Dùng cho các loại máy chiếu  
• screen: Dùng cho computer screen  
• tty: Dùng cho các thiết bị sử dụng fixed-pitch character grid  
• tv: Dùng cho các loại TV  
Chẳng hạn như ta có đoạn code sau:  
1
2
3
/* Ap dung cho computer screens */  
@media screen  
body  
width: 960 px;  
{
{
4
5
}
6
}
7
8
9
10  
11  
12  
/* Ap dung cho cac thiet bi cam tay nho */  
@media handheld  
body  
width: 320 px;  
{
{
}
}
2.1.3 Cú pháp Media Query  
Cú pháp của Media Query được mở rộng ra từ cú pháp của Media Type như sau:  
@media media_type (feature: value) {rules}  
2.1.4 Một số Media Feature quan trọng  
2.1.4.a width, height  
Nếu sử dụng thuộc tính này thì các css rules sẽ chỉ được áp dụng cho những trình duyệt có chiều rộng  
hoặc chiều cao đúng với thông số mà ta đã đưa ra. Chẳng hạn như @media (width: 900px) rules thì sẽ chỉ áp  
dụng cho những trình duyệt nào có kích cỡ chiều rộng đúng bằng 900px. Vì vậy, hai thuộc tính này rất ít khi  
được sử dụng. Thay vào đó người ta thêm các tiền tố min- hay max- và để được các thuộc tính sau: min-width,  
min-height, max-width, max-height. Đây là những thuộc tính cho phép thiết lập những rules cho trình duyệt  
có chiều rộng hay chiều dài nằm trong một khoảng nào đó. Ví dụ:  
1
2
/* Ap dung cho nhung browser co chieu rong <= 900 px */  
@media ( max-width: 900 px)  
{
3
4
body  
{
font-size: 16 px;  
5
}
6
}
7
8
/* Ap dung cho nhung browser co chieu rong >= 600 px */  
@media ( min-width: 600 px)  
{
9
body  
{
font-size: 14 px;  
10  
11  
12  
}
}
13 /* Ap dung cho nhung browser co chieu rong >= 800 px */  
14 @media ( min-width: 800 px)  
{
15  
16  
17  
18  
body  
{
font-size: 15 px;  
}
}
19 /* Ap dung cho nhung browser co chieu rong <= 700 px */  
20 @media ( max-width: 700 px)  
{
21  
22  
23  
24  
body  
{
font-size: 13 px;  
}
}
Lưu ý rằng, những rules khai báo sau sẽ đè lên những rules khai báo trước, vì vậy với đoạn code trên thì nếu  
trình duyệt có chiều rộng là 650px thì rule được áp dụng ở đây sẽ là font-size: 13px;, còn chiều rộng là 750px  
thì rule được áp dụng sẽ là font-size: 15px;.  
Bài tập lớn 3 - Nhập môn điện toán , 2019-2020  
Page 6/14  
     
Trường Đại học Bách Khoa – Đại học Quốc Gia TP. Hồ Chí Minh  
Khoa Khoa học và Kỹ thuật Máy tính  
2.1.4.b decide-width, decide-height  
Cũng giống như width, height hay min-width, min-height, max-width, max-height, thế nhưng với việc thêm  
device- ở phía trước thì các tính toán sẽ được dựa trên kích cỡ của thiết bị, thay vì kích cỡ của trình duyệt.  
2.1.4.c aspect-ratio và device-aspect-ratio  
Đây là những thuộc tính cho phép áp dụng các rules dựa trên tỉ lệ của trình duyệt hay tỉ lệ của thiết bị. Ta  
có thể dùng các thông số như 16/9 hay 16/10, hoặc có thể viết cả kích cỡ cụ thể ra cho dễ đọc như 1280/720  
chẳng hạn. Hai thuộc tính này cũng có thể sử dụng các tiền tố min- hay max-.  
2.1.4.d resolution  
Đây là thuộc tính đánh giá dựa trên độ phân giải của màn hình thiết bị. Thuộc tính này cũng có thể sử  
dụng các tiền tố min- hay max-. Ví dụ:  
1
2
/* Su dung don vi la dpi: dots per inch */  
@media ( max-resolution: 300 dpi)  
{
3
4
body  
{
font-size: 15 px;  
5
}
6
}
7
8
/* Su dung don vi la dpcm: dots per centimeter */  
@media ( min-resolution: 600 dpcm)  
{
9
body  
{
font-size: 14 px;  
10  
11  
12  
}
}
2.1.4.e orientation  
Đây là thuộc tính đánh giá dựa trên trạng thái của thiết bị, có 2 trạng thái: portrait (xoay dọc: khi mà  
chiều dài >= chiều rộng) và landscape (quay ngang: chiều dài < chiều rộng). Ví dụ:  
1
2
/* Ap dung khi thiet bi de doc */  
@media ( orientation: portrait)  
{
3
4
body  
{
font-size: 14 px;  
5
}
6
}
7
8
/* Ap dung khi thiet bi de ngang */  
@media ( orientation: landscape)  
{
9
body  
{
font-size: 15 px;  
10  
11  
12  
}
}
2.1.4.f Một số thuộc tính khác  
Ngoài những thuộc tính thường gặp đã liệt kê ở trên, còn một số thuộc tính khác khác, ít được sử dụng  
hơn, đó là color, color-index, monochrome, scan và grid.  
1
2
/* Ap dung cho man hinh mau */  
@media (color)  
{
3
4
body  
{
font-size: 14 px;  
5
}
6
}
7
8
/* Ap dung cho man hinh co it nhat 256 mau */  
@media ( min-color-index: 256)  
{
9
body  
{
font-size: 15 px;  
10  
11  
12  
}
}
Chúng ta thể ghép nhiều thuộc media vào trong một câu lệnh kiểm tra bằng toán tử and hoặc , (mang ý  
nghĩa của phép or). Ngoài ra, chúng ta cũng có thể sử dụng not hoặc only. Ví dụ:  
Bài tập lớn 3 - Nhập môn điện toán , 2019-2020  
Page 7/14  
         
Trường Đại học Bách Khoa – Đại học Quốc Gia TP. Hồ Chí Minh  
Khoa Khoa học và Kỹ thuật Máy tính  
1
2
/* Ap dung cho trinh duyet co chieu rong >=800px va <= 900 px */  
@media ( max-width: 900 px) and ( min-width: 800 px)  
{
3
4
body  
{
font-size: 14 px;  
5
}
6
}
7
8
/* Ap dung cho man hinh nam ngang hoac co chieu rong >=1200px */  
@media ( orientation: landscape), ( device-min-width: 1200 px)  
{
9
body  
{
font-size: 15 px;  
10  
11  
12  
}
}
13 /* Ap dung cho man hinh co ti le khong phai la 4/3 */  
14 @media not ( device-aspect-ratio: 4/3)  
{
15  
16  
17  
18  
body  
{
font-size: 15 px;  
}
}
2.2 Fluid Layouts  
2.2.1 Khái niệm  
Fluid layout là một bố cục sử dụng các giá trị tỷ lệ như một đơn vị đo lường cho các khối nội dung, hình  
ảnh, hoặc bất kỳ mục nào khác, điều này cho phép các trang web mở rộng và rút gọn tùy vào kích thước màn  
hình của người dùng.  
Từ năm 2015, có một kỹ thuật mới ra đời để xây dựng bố cục linh hoạt cho các trang web Responsive, gọi  
là Flexbox. Flexbox là một kiểu dàn trang (layout mode) mà nó sẽ tự cân đối kích thước của các phần tử bên  
trong để hiển thị trên mọi thiết bị. Nói cách khác, chúng ta không cần thiết lập kích thước của phần tử, không  
cần cho nó float, chỉ cần thiết lập nó hiển thị chiều ngang hay chiều dọc, lúc đó các phần tử bên trong có thể  
hiển thị theo ý muốn.  
Hiện nay, theo lời khuyên từ Mozilla thì chúng ta sử dụng Flexbox để thiết lập bố cục trong phạm vi nhỏ  
(ví dụ như phần Menu trong website).  
2.2.2 Các thành phần của Flexbox  
Hai thành phần quan trọng nhất trong một bố cục Flexbox là gồm container và item:  
Hình 4: Các thành phần của Flexbox  
• Container: là thành phần lớn bao quanh các phần tử bên trong, chúng ta sẽ thiết lập kiểu hiển thị inline  
(sắp xếp theo chiều ngang) hoặc kiểu sắp xếp theo chiều dọc. Khi đó, các item bên trong sẽ hiển thị dựa  
trên thiết lập của container này.  
Bài tập lớn 3 - Nhập môn điện toán , 2019-2020  
Page 8/14  
       
Trường Đại học Bách Khoa – Đại học Quốc Gia TP. Hồ Chí Minh  
Khoa Khoa học và Kỹ thuật Máy tính  
• Item: Các phần tử con của container được gọi là item, ở item chúng ta có thể thiết lập nó sẽ sử dụng bao  
nhiêu cột trong một container, hoặc thiết lập thứ tự hiển thị của nó.  
Ngoài hai thành phần chính đó, chúng ta có thể thấy hình trên còn có:  
• Main start, main end: Khi thiết lập flexbox, điểm bắt đầu của container gọi là main start và điểm kết  
thúc được gọi là main end. Điều này có nghĩa, các item bên trong sẽ hiển thị từ main start đến main end  
(hoặc là được phép hiển thị đến main end). Và chiều vuông góc của nó là cross start, cross end cũng có ý  
nghĩa tương tự nhưng luôn vuông góc với main start, main end.  
• Main axis: Trục này là trục chính để điều khiển hướng mà các item sẽ hiển thị. Như chúng ta thấy trên  
hình main axis là trục dọc nên các item sẽ hiển thị theo chiều dọc, tuy nhiên ta có thể sử dụng thuộc tính  
flex-direction để thay đổi trục của main axis và lúc đó các item sẽ hiển thị theo nó. Và cross axis luôn là  
trục vuông góc của main axis.  
• Main size: Chúng ta có thể hiểu đơn giản main size là kích thước (chiều rộng hoặc dọc) của mỗi item dựa  
theo trục main axis.  
• Cross size: Là kích thước (chiều rộng hoặc dọc) của mỗi item dựa theo trục cross axis.  
Ví dụ minh họa:  
1
2
3
<!DOCTYPE html>  
<html>  
<head>  
4
5
6
7
8
9
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
<meta charset="utf-8">  
<title> Test Flexbox </title>  
</head>  
<style>  
/** Global CSS **/  
. container  
background: red;  
margin: auto;  
padding: 5px;  
{
0
}
. item  
{
background: blue;  
margin: 5px;  
color: white;  
font-size: 24 px;  
font-weight: bold;  
height: 50 px;  
text-align: center;  
line-height: 50 px;  
}
24 </style>  
25  
26 <body>  
27  
28  
29  
30  
31  
32  
<div class="container">  
<div class="item item1">  
<div class="item item2">  
<div class="item item3">  
<div class="item item4">  
</div>  
1
2
3
4
</div>  
</div>  
</div>  
</div>  
33 </body>  
34 </html>  
Kết quả của đoạn code trên như sau:  
Bây giờ chúng ta sẽ bắt đầu làm việc với Flexbox ở đây. Trước tiên chúng ta sẽ đưa .container về hiển thị ở  
dạng flexbox với display: flex.  
Bài tập lớn 3 - Nhập môn điện toán , 2019-2020  
Page 9/14  
Trường Đại học Bách Khoa – Đại học Quốc Gia TP. Hồ Chí Minh  
Khoa Khoa học và Kỹ thuật Máy tính  
1
2
3
4
/** Flex layout **/  
. container  
display: flex;  
{
}
Chúng ta sẽ thấy các item bên trong đã tự hiển thị theo chiều dọc, tương ứng với trục main axis mặc định  
là chiều ngang.  
2.2.3 Một số thuộc tính của Flexbox  
2.2.3.a flex-direction  
Cũng với ví dụ như trên, nếu muốn đổi trục hiển thị các item thì chúng ta sẽ sử dụng thuộc tính flex-direction.  
Cụ thể:  
flex-direction: row | column | row-reverse | column-reverse  
• row: chuyển trục main axis thành chiều ngang, nghĩa là hiển thị theo hàng.  
• colum: chuyển trục main axis thành chiều dọc, nghĩa là hiển thị theo cột.  
• row-reverse: hiển thị theo hàng nhưng đảo ngược vị trí các item.  
• column-reverse: hiển thị theo cột nhưng đảo ngược vị trí các item.  
Ví dụ chúng ta sẽ sử dụng giá trị column-reverse cho thuộc tính flex-direction.  
1
2
3
4
5
/** Flex layout **/  
. item  
display: flex;  
{
flex-direction: column-reverse;  
}
Kết quả sẽ được như sau:  
2.2.3.b flex-wrap  
Để hiểu rõ hơn về flex-wrap, chúng ta thử thêm chiều rộng cho mỗi item bên trong là 1000px xem chuyện  
gì sẽ xảy ra khi dùng flexbox.  
1
2
3
. item  
{
width: 1000 px;  
}
Kết quả như sau:  
Như vậy, dù chúng ta có thêm chiều rộng cho mỗi item bên trong là 1000px nhưng nó vẫn hiển thị trên một  
hàng đều nhau. Lý do bởi vì theo mặc định, flexbox tự căn chỉnh các phần tử hiển thị đều nhau theo trục main  
axis của nó dựa theo chiều rộng của container. Vì vậy cho dù chúng ta có điều chỉnh chiều rộng vượt quá giới  
hạn của nó thì nó vẫn không bị nhảy xuống dòng.  
Bây giờ hãy thử thêm thuộc tính flex-wrap: wrap vào container như sau:  
Bài tập lớn 3 - Nhập môn điện toán , 2019-2020  
Page 10/14  
     
Trường Đại học Bách Khoa – Đại học Quốc Gia TP. Hồ Chí Minh  
Khoa Khoa học và Kỹ thuật Máy tính  
1
2
3
4
. container {  
display: flex;  
flex-wrap: wrap;  
}
Kết quả sẽ được như sau:  
Như vậy, chúng ta có thể hiểu thuộc tính flex-wrap có tác dụng cho phép container có thể bọc lại các item  
kể cả khi kích thước của các item bị thay đổi, mặc định là nowrap. Thuộc tính này có thể áp dụng với cả chiều  
dọc của container và item.  
2.2.3.c order  
Với đoạn HTML ở cũng ví dụ trên, mỗi item có số thứ tự là 1, 2, 3, 4 tương ứng với các class .item1, .item2,  
.item3, .item4. Mặc định những item này sẽ hiển thị theo thứ tự viết HTML, nhưng với thuộc tính order, chúng  
ta có thể sắp xếp lại chúng theo ý muốn. Ví dụ như sau:  
1
2
3
. container {  
display: flex;  
flex-wrap: wrap;  
4
5
}
. item  
{
width: 1000 px;  
6
7
8
9
10  
}
. item1  
{
order: 4;  
}
11 . item2  
{
order: 1;  
12  
13  
}
14 . item3  
{
order: 2;  
15  
16  
}
17 . item4  
{
order: 3;  
18  
19  
}
Kết quả như ảnh bên dưới.  
Như vậy, .item2 đã chuyển thành item xuất hiện đầu tiên, .item3 xuất hiện thứ 2, .item4 xuất hiện thứ 3,  
và cuối cùng .item1 xuất hiện cuối cùng.  
2.2.3.d flex-grow  
Để xem xét ví dụ này, trước tiên chúng ta thiết lập chiều rộng của mỗi item là 200px, sau đó hãy đặt ở  
.item2 thuộc tính: flex-grow: 1;  
1
2
3
. item2  
{
flex-grow: 1;  
}
Bài tập lớn 3 - Nhập môn điện toán , 2019-2020  
Page 11/14  
   
Trường Đại học Bách Khoa – Đại học Quốc Gia TP. Hồ Chí Minh  
Khoa Khoa học và Kỹ thuật Máy tính  
Kết quả như sau:  
Bây giờ chúng ta bổ sung vào .item 1 thuộc tính: flex-grow: 2;  
1
2
3
4
5
6
. item2  
{
flex-grow: 1;  
}
. item1  
{
flex-grow: 2;  
}
Kết quả như sau:  
Lúc này, item1 (có thuộc tính flex-grow: 2) sẽ lấy phần dư gấp đôi item2 (có thuộc tính flex-grow: 1).  
2.2.3.e flex-shrink  
Khi chúng ta co trình duyệt, tất cả các item đều co lại với tỉ lệ tốc độ bằng nhau. Vậy nếu chúng ta muốn  
thay đổi tỉ lệ co này cho một hoặc một số item nhất định, chúng ta sử dụng thuộc tính flex-shrink. Ví dụ chúng  
ta muốn item3 co lại gấp 3 lần bình thường những item khác, chúng ta sẽ thiết lập css như sau:  
1
2
3
. item3  
{
flex-shrink: 3;  
}
Và đây là kết quả khi chúng ta co trình duyệt lại:  
2.2.3.f flex-basis  
Để hiểu thuộc tính này, trước tiên ta đặt chiều rộng tất cả item là 200px.  
Thuộc tính flex-basis chúng ta có thể hiểu đơn giản là thiết lập một item nào đó có kích thước nhất định.  
Ví dụ chúng ta thiết lập item3 rộng 500px, các item khác vẫn giữ kích thước ban đầu.  
1
2
3
4
5
6
. item  
{
width: 200 px;  
}
. item3  
{
flex-basis: 500 px;  
}
Kết quả như sau:  
2.2.3.g justify-content  
Mặc định các item bên trong sẽ rải đều bắt đầu từ main start đến main end, tuy nhiên nếu container vẫn  
còn khoảng trống thì có thể dùng thuộc tính justify-content để điều chỉnh lại vị trí bắt đầu của nó.  
Thuộc tính này có 5 giá trị như ảnh bên dưới:  
Bài tập lớn 3 - Nhập môn điện toán , 2019-2020  
Page 12/14  
     
Trường Đại học Bách Khoa – Đại học Quốc Gia TP. Hồ Chí Minh  
Khoa Khoa học và Kỹ thuật Máy tính  
Hình 5: Các giá trị của thuộc tính justify-content  
2.3 Responsive images  
Nếu thay đổi kích thước ảnh quá nhỏ, hình ảnh sẽ xuất hiện với chất lượng thấp, tuy nhiên chúng ta vẫn  
muốn nó sẽ xuất hiện trên web và không muốn bỏ nó đi vì nó quan trọng. Vì vậy, hình ảnh được chia thành 2  
nhóm: một nhóm có thể cắt bỏ đi những phần không quan trọng và nhóm khác sẽ giữ nguyên ảnh nhưng sẽ bị  
zoom.  
Có rất nhiều kỹ thuật dùng để tạo ra flexible image đáp ứng được với mọi kích cỡ màn hình khác nhau.  
Nhưng thông dụng và đơn giản nhất là Sử dụng stylesheet với:  
1
2
3
img  
{
max-width: 100%;  
}
3 Tổng kết  
Trong những năm gần đây, Responsive website trở thành một trong những yếu tố cực kỳ quan trọng để  
Google có thể đánh giá và xếp hạng website trên bảng kết quả tìm kiếm của mình. Bằng chứng cho việc này  
chính là đa số các website hiện nay đều được “bot mobile” thu thập dữ liệu thay vì trước đó là “bot desktop”.  
Google đang quan trọng và đánh giá cao những website cho trải nghiệm tốt trên mobile, chính vì vậy Responsive  
Web là không thể thiếu cho các website hiện đại.  
Bài tập lớn 3 - Nhập môn điện toán , 2019-2020  
Page 13/14  
     
Trường Đại học Bách Khoa – Đại học Quốc Gia TP. Hồ Chí Minh  
Khoa Khoa học và Kỹ thuật Máy tính  
Tài liệu  
[1] wikipedia. “link: http://en.wikipedia.org/”, , last access: 01/01/2019.  
[2] Ben Frain: Responsive Web Design with HTML5 and CSS3, Second Edition, (2015).  
so-lieu-thong-ke-internet-viet-nam-nam-2018. Last accessed 01/01/2019.  
accessed 01/01/2019.  
Bài tập lớn 3 - Nhập môn điện toán , 2019-2020  
Page 14/14  
 
pdf 15 trang myanh 18760 Free
Bạn đang xem tài liệu "Bài tập lớn Nhập môn điện toán - Bài tập lớn 3: Tìm hiểu về Responsive Web Design - Nguyễn Xuân Trực", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_tap_lon_nhap_mon_dien_toan_bai_tap_lon_3_tim_hieu_ve_res.pdf
  • txtinfo.txt
  • pptxSlide.pptx
  • rarSource_HTML.rar
  • zipSource_Latex.zip