Chào mừng bạn đến với bài viết thứ hai trong series “Hỏi Nhanh Đáp Gọn”, nơi mà chúng ta tiếp tục khám phá các khái niệm cốt lõi trong ngành tech một cách ngắn gọn, dễ hiểu nhưng vẫn đầy đủ tính ứng dụng. Nếu bài viết đầu tiên đã đưa bạn bước vào thế giới của ReactJS, thì hôm nay, chúng ta sẽ quay trở lại những viên gạch nền tảng của lập trình web: HTML và CSS.
HTML là ngôn ngữ đánh dấu mà mọi website đều cần, còn CSS chính là nghệ thuật tạo nên phong cách và trải nghiệm trực quan cho người dùng. Trong bài viết này, chúng ta sẽ trả lời những câu hỏi thường gặp về HTML/CSS, từ những kiến thức cơ bản như “HTML và CSS thực sự là gì?” đến các tình huống thực tế như “Làm thế nào để tối ưu CSS để tăng tốc độ tải trang?”.
Dù bạn là người mới bắt đầu hay đã có kinh nghiệm, bài viết này hứa hẹn sẽ cung cấp những kiến thức hữu ích để bạn tự tin hơn khi làm việc với HTML và CSS và một số thư viện CSS phổ biến như Tailwind CSS.
HTML
Câu hỏi lý thuyết
HTML là gì và vai trò của nó trong phát triển web?
Sự khác biệt giữa thẻ <div>
và <span>
là gì?
Bạn có thể liệt kê các loại thẻ HTML5 mới được giới thiệu không? Ví dụ, các thẻ như <header>
, <footer>
, <article>
, <section>
, <aside>
.
Sự khác biệt giữa thuộc tính id
và class
là gì? Khi nào nên sử dụng chúng?
Hãy giải thích thuộc tính alt
của thẻ <img>
và tại sao nó quan trọng.
HTML5 có hỗ trợ lưu trữ dữ liệu không? Nếu có, hãy giải thích về localStorage
và sessionStorage
.
Hãy giải thích thuộc tính data-*
trong HTML và khi nào nên sử dụng nó.
Sự khác biệt giữa thuộc tính defer
và async
trong thẻ <script>
là gì?
Khi nào nên sử dụng thẻ <template>
và <slot>
?
Bạn sẽ làm thế nào để tối ưu hóa hiệu suất HTML cho một trang web?
Câu hỏi tình huống
Bạn được giao nhiệm vụ tối ưu hóa một trang web để thân thiện hơn với SEO và đảm bảo khả năng truy cập (accessibility). Những thay đổi nào bạn sẽ thực hiện trong HTML?
Một trang web hiện tại tải chậm vì có quá nhiều hình ảnh lớn. Là một developer, bạn sẽ tối ưu hóa HTML như thế nào để cải thiện hiệu suất tải trang?
Trang web của bạn không hiển thị đúng trên các thiết bị di động. Bạn sẽ điều chỉnh HTML như thế nào để hỗ trợ hiển thị tốt hơn?
Bạn có một bảng dữ liệu lớn với hàng nghìn dòng, và việc render bảng làm trang web chạy chậm. Làm thế nào để cải thiện hiệu suất?
Bạn cần tạo một form có trường nhập email với điều kiện phải chứa định dạng hợp lệ và là email công ty (kết thúc bằng @company.com
). Làm thế nào để thực hiện điều này?
CSS
Dưới đây là 20 câu hỏi phỏng vấn về CSS, từ cấp độ Junior đến Senior, giúp đánh giá các khía cạnh từ kiến thức cơ bản đến kỹ năng nâng cao:
Junior (Cơ bản)
- Box Model là gì?
- Mô tả Box Model trong CSS, các thành phần của nó (Content, Padding, Border, Margin) và cách nó hoạt động.
- Sự khác biệt giữa
relative
,absolute
,fixed
, vàsticky
trong CSS là gì?- Giải thích cách các giá trị
position
hoạt động trong các ngữ cảnh khác nhau.
- Giải thích cách các giá trị
- Sự khác nhau giữa
inline
,block
, vàinline-block
là gì?- So sánh các kiểu hiển thị phần tử và khi nào nên sử dụng từng loại.
- Giá trị
z-index
hoạt động như thế nào?- Mô tả cách CSS quản lý thứ tự xếp chồng của các phần tử và các yếu tố ảnh hưởng.
- Pseudo-class và pseudo-element khác nhau như thế nào?
- Ví dụ:
:hover
là pseudo-class, còn::before
là pseudo-element.
- Ví dụ:
- Flexbox là gì? Khi nào nên sử dụng Flexbox thay vì Grid?
- Mô tả cách Flexbox hoạt động và khi nào nó phù hợp hơn Grid Layout.
- Cách sử dụng Media Query để làm giao diện responsive?
- Ví dụ:
@media (max-width: 768px) { ... }
.
- Ví dụ:
- Sự khác biệt giữa
rem
vàem
là gì?- Giải thích cách các đơn vị này được tính toán và ưu/nhược điểm của chúng.
- Cách để ẩn một phần tử trong CSS mà vẫn giữ nó trong DOM?
- Các phương pháp như
visibility: hidden
,opacity: 0
, hoặcdisplay: none
.
- Các phương pháp như
- Làm thế nào để tạo gradient trong CSS?
- Ví dụ: Sử dụng
linear-gradient
hoặcradial-gradient
.
- Ví dụ: Sử dụng
- Cách triển khai một hệ thống lưới (grid system) bằng CSS thuần?
- Ví dụ về cách sử dụng Flexbox hoặc CSS Grid để tạo layout dạng lưới.
- Làm thế nào để tối ưu hóa hiệu suất CSS trong dự án lớn?
- Giảm bớt các selector nặng, sử dụng class cụ thể, CSS minification.
- Cách xử lý các vấn đề về cross-browser compatibility?
- Sử dụng CSS reset/normalize, kiểm tra trên các trình duyệt khác nhau, sử dụng các công cụ như Autoprefixer.
- Cách bạn xử lý trường hợp text bị tràn ra khỏi một container cố định?
- Sử dụng
overflow: hidden
,text-overflow: ellipsis
, hoặcword-wrap: break-word
.
- Sử dụng
- Khác biệt giữa
absolute
vàfixed
trong CSS là gì?- Phạm vi tham chiếu:
absolute
dựa vào ancestor cóposition: relative
, cònfixed
dựa vào viewport.
- Phạm vi tham chiếu:
- Cách sử dụng CSS Variables (Custom Properties)?
- Ví dụ:
:root { --main-color: #3498db; }
và sử dụng vớivar(--main-color)
.
- Ví dụ:
- Cách tạo hiệu ứng animation trong CSS mà không cần JavaScript?
- Sử dụng
@keyframes
và các thuộc tính nhưanimation-name
,animation-duration
.
- Sử dụng
- Làm thế nào để một trang web đạt điểm Lighthouse cao về “Best Practices” cho CSS?
- Tránh các CSS không sử dụng, giảm tải CSS blocking render, và sử dụng critical CSS.
- Giải thích thuộc tính
clip-path
trong CSS.- Dùng để cắt một phần tử thành các hình dạng cụ thể (hình tròn, tam giác, polygon…).
- Sự khác biệt giữa
grid-template-areas
vàgrid-template-rows/columns
trong CSS Grid?- Cách hai thuộc tính này được sử dụng để xác định bố cục lưới.
- Cách tạo một hệ thống thiết kế (design system) với CSS hoặc các công cụ hỗ trợ?
- Sử dụng CSS Variables, SCSS mixins, hoặc thư viện như TailwindCSS.
- Các kỹ thuật để giảm bớt “Specificity Wars” trong CSS là gì?
- Sử dụng các quy tắc CSS đơn giản, tránh dùng
!important
, và tổ chức CSS một cách hợp lý.
- Sử dụng các quy tắc CSS đơn giản, tránh dùng
- Cách xử lý hiệu suất khi tải quá nhiều file CSS trong ứng dụng lớn?
- Tách CSS theo module (lazy load), sử dụng critical CSS, và inline các style quan trọng.
- Cách áp dụng BEM (Block, Element, Modifier) trong tổ chức CSS?
- Ví dụ:
button
,button__icon
,button--primary
.
- Ví dụ:
- Làm thế nào để debug CSS phức tạp trên trình duyệt?
- Sử dụng DevTools để kiểm tra box model, tìm hiểu computed styles và cascade.
- Bạn có thể giải thích cách hoạt động của CSS Cascade và nguyên tắc ưu tiên không?
- Inline styles > ID selectors > Class/Attribute/Pseudo-class > Elements/Pseudo-elements.
- Cách giải quyết các vấn đề khi CSS gây ra layout shift?
- Sử dụng thuộc tính
aspect-ratio
, đặt kích thước cố định cho hình ảnh và font.
- Sử dụng thuộc tính
- Làm thế nào để tạo các hiệu ứng chuyển đổi mượt mà?
- Sử dụng
transition
với các giá trị phù hợp (ease
,ease-in-out
,cubic-bezier
).
- Sử dụng
- Cách tổ chức CSS trong dự án đa ngôn ngữ?
- Sử dụng các class hoặc CSS variables để thay đổi chiều viết (LTR/RTL).
- Làm thế nào bạn sẽ xử lý một thiết kế phức tạp chỉ sử dụng CSS thuần?
- Kết hợp Flexbox, CSS Grid, pseudo-element, và custom properties.
Tailwind CSS
Dưới đây là 15 câu hỏi phỏng vấn về Tailwind CSS, từ cơ bản đến nâng cao, để kiểm tra kiến thức và khả năng ứng dụng của ứng viên:
Cơ bản (Junior)
- Tailwind CSS là gì và nó khác gì so với CSS thuần hoặc các framework CSS khác như Bootstrap?
- Tìm hiểu khái niệm utility-first CSS framework và sự khác biệt về cách tiếp cận.
- Làm thế nào để cài đặt Tailwind CSS vào một dự án mới?
- Cách sử dụng
npm install tailwindcss
và cấu hình filetailwind.config.js
.
- Cách sử dụng
- Tailwind CSS hoạt động dựa trên những khái niệm nào?
- Các khái niệm như utility-first, responsive design, và state-based styles (
hover
,focus
,active
).
- Các khái niệm như utility-first, responsive design, và state-based styles (
- Làm thế nào để áp dụng responsive styles trong Tailwind CSS?
- Sử dụng các prefix như
sm:
,md:
,lg:
,xl:
, và2xl:
.
- Sử dụng các prefix như
- Tailwind CSS có hỗ trợ pseudo-classes như
hover
hayfocus
không?- Ví dụ:
hover:bg-blue-500
,focus:ring-2
.
- Ví dụ:
- Làm thế nào để thêm padding hoặc margin bằng Tailwind CSS?
- Sử dụng các class như
p-4
,px-2
,m-5
,mt-3
.
- Sử dụng các class như
- Làm thế nào để sử dụng các class liên quan đến typography trong Tailwind CSS?
- Ví dụ:
text-lg
,font-bold
,leading-relaxed
.
- Ví dụ:
- Làm thế nào để tùy chỉnh theme của Tailwind CSS?
- Thêm hoặc sửa đổi trong file
tailwind.config.js
vớiextend
trongtheme
.
- Thêm hoặc sửa đổi trong file
- Tailwind JIT mode là gì và tại sao nó quan trọng?
- Giải thích cách JIT mode chỉ tạo ra các class CSS được sử dụng, giúp giảm kích thước file.
- Cách sử dụng các plugin trong Tailwind CSS?
- Ví dụ: Sử dụng plugin như
@tailwindcss/forms
hoặc tạo plugin tùy chỉnh.
- Ví dụ: Sử dụng plugin như
- Tailwind CSS có hỗ trợ Dark Mode không? Làm thế nào để kích hoạt nó?
- Sử dụng cấu hình
darkMode
trongtailwind.config.js
và classdark:
.
- Sử dụng cấu hình
- Cách sử dụng các utility liên quan đến Flexbox và Grid trong Tailwind CSS?
- Ví dụ:
flex
,flex-col
,justify-center
,grid
,grid-cols-3
.
- Ví dụ:
- Làm thế nào để tạo một button sử dụng Tailwind CSS với hiệu ứng hover và focus?
- Ví dụ:
bg-blue-500 hover:bg-blue-600 focus:outline-none focus:ring-2
.
- Ví dụ:
- Cách xử lý custom class hoặc thêm CSS riêng vào dự án sử dụng Tailwind CSS?
- Sử dụng file CSS riêng, khai báo với
@apply
hoặc viết CSS thuần.
- Sử dụng file CSS riêng, khai báo với
- Làm thế nào để tối ưu hóa kích thước file CSS khi triển khai ứng dụng Tailwind CSS?
- Sử dụng
purge
trongtailwind.config.js
hoặc tích hợp JIT mode.
- Sử dụng
- Cách tổ chức một dự án lớn sử dụng Tailwind CSS để tránh lộn xộn?
- Sử dụng
@apply
để tái sử dụng class và tách các module.
- Sử dụng
- Tailwind có hỗ trợ các transition và animation không? Làm thế nào để sử dụng?
- Ví dụ:
transition duration-300 ease-in-out
, hoặc cấu hình animation tùy chỉnh.
- Ví dụ:
- Làm thế nào để thêm các giá trị tùy chỉnh (custom values) vào Tailwind CSS?
- Thêm các giá trị vào
extend
trongtailwind.config.js
, như màu sắc, font, spacing.
- Thêm các giá trị vào
- Tailwind CSS có phù hợp với mọi dự án không? Khi nào không nên sử dụng Tailwind CSS?
- Đánh giá dự án theo các tiêu chí như độ phức tạp, yêu cầu thiết kế, hoặc khả năng học tập của nhóm.
- Làm thế nào để xử lý trạng thái giao diện phức tạp (như loading, disabled) với Tailwind CSS?
- Sử dụng các class như
disabled:opacity-50
hoặcloading:animate-spin
.
- Sử dụng các class như
- Tailwind CSS có hỗ trợ CSS Variables không, và làm thế nào để tích hợp?
- Thêm CSS Variables tùy chỉnh và sử dụng trong file cấu hình hoặc style trực tiếp.
- Làm thế nào để xử lý các yêu cầu thiết kế khác biệt cho từng brand khi sử dụng Tailwind CSS?
- Sử dụng
variants
trong file cấu hình hoặc thiết lập theme dựa trên Context.
- Sử dụng