Thành phần Block và Inline
- January 14, 2010
- 21 comments
Khái niệm về Inline và Block là một khái niệm hết sức cơ bản nhưng cũng cực kỳ quan trọng trong CSS. Hiểu được từng đặc điểm của mỗi thành phần là chìa khóa quan trọng để bạn có thể vận hành CSS theo ý muốn. Trong bài này tôi sẽ nói về chức năng của từng thành phần. Tuy nhiên tôi sẽ vẫn giữ nguyên từ chuyên ngành là Block và Inline mà không dịch ra tiếng Việt là “khối” và “trong dòng” nghe cùi quá.
Khi các thành phần HTML được hiển thị trên trình duyệt nó thường có 2 cách hiển thị là theo Block và Inline. Nói hình tượng để bạn dễ hiểu thì các thành phần Block giống như một bàn cờ và các thành phần Inline là quân cờ. Các quân cờ nằm trong bàn cờ và bàn cờ thì không bao giờ nằm trong quân cờ. Đây cũng là một nguyên tắc cơ bản nhất của Inline và Block. Thành phần inline có thể nằm trong thành phần Block, nhưng Block không thể nằm trong thành phần Inline.
Lý thuyết thì là vậy nhưng hơi mơ hồ khó hiểu, cách tốt nhất là chúng ta học từ ví dụ ở dưới.
Ví dụ về Block
Thẻ <p> và <div> là hai thành phần mặc định Block phổ biến nhất. Chỉ khi bạn khai báo trong CSS và muốn biến nó thành inline với Property là Display: inline thì nó mới thành inline. Ví dụ tôi có một thẻ <div> như sau:
Nếu tôi viết tiếp thì dòng mới sẽ bị đẩy xuống dưới dù cho nó được viết cùng hàng với dòng ở trên nằm trong thẻ <div>
Các thành phần Block bao gồm
<div>: Là thành phần trắng dùng để làm “hộp” chứa.
<h1> ….<h6>: Các headings
<p>: Thẻ này dùng để mở đầu và kết thúc một đoạn văn bản.
<li>, <dt>, <dd>: hiển thị danh sách.
<table>, <blockquote>, <pre> và <form>
Ví dụ về thành phần Inline
Ví dụ tôi có một đoạn văn như sau, và trong đó tôi có một cặp thẻ <strong>, nó không bắt thành phần nằm trong nó phải xuống hàng mà nó chỉ “nhẹ nhàng” chui vào giữa và sống hạnh phúc trong đó. Cũng giống như quân cờ nằm trong bàn cờ vậy.
Các thành phần inline bao gồm
<span>, <a>, <em>, <br />
<img>
Ví dụ hình mặt cười này
sẽ xuất hiện ở trong dòng mà không ép chữ xuống hàng mới. Nó chỉ chiếm khoảng không gian tối thiểu mà nó cần. Giống như quân cờ chỉ chiếm một khoảng không gian nhất định của nó mà thôi. Chứ nó không ảnh hưởng đến bàn cờ.
<input>
Display Property
Cái hay của CSS là bạn không chỉ bị ép buộc sử dụng giá trị mặc định của từng thành phần. Mà bạn có thể thay đổi cách hiển thị của nó theo ý mình. Ví dụ một thành phần <li> theo mặc định là dạng Inline nhưng bạn có thể biến nó thành block với CSS tương ứng là Display: block. Đây chính là một phần rất quan trọng trong thiết kế giao diện. Nó mở ra một chân trời mới với các cách sắp xếp thành phần mà chỉ bị giới hạn bằng khả năng thiết kế của bạn.
Được áp dụng nhiều nhất là khi bạn sử dụng <li> làm menu như rất nhiều trang web. Ở mặc định nếu bạn có một list như sau:
<ul> <li><a href="#">Home</a></li> <li><a href="#">About</a></li> <li><a href="#">Services</a></li> <li><a href="#">FAQs</a></li> <li><a href="#">Contact</a></li> </ul>
Nó sẽ xuất hiện như sau ở trình duyệt
Nếu bạn muốn nó xuất hiện trong cùng một hàng thì bạn có thể khai bao CSS như sau:
.menuNav li {
display:inline;
background-color:#eee;
border:1px solid red;
margin:0; padding:0px 10px;
}
Bạn cũng có thể tham khảo thêm video tutorial tôi đã làm về Display Property trong CSS để hiểu thêm chi tiết.
« WordPress Theme – Comment và Custom Comment
Tạo WordPress Theme – Content Slider »
thẻ “li” anh nhé. Em viết cả 2 dấu “” nên giờ nó ko hiện mà em ko thấy chỗ nào để sửa.
Anh ơi, trong tutorial anh có mâu thuẫn kìa.
Bên trên phần giới thiệu về “block” anh nói là thẻ mặc định là thuộc tính block nhưng phần bên dưới ví dụ về việc thay đổi inline -> block và block -> inline thì anh lại nói là là thẻ mặc định là inline.
anh ơi cho em hỏi muốn làm 1 cái button hình muỗi tên thì phải làm sao
em đã xem rất nhiều video hướng dẫn của anh rồi, nhưng có cái này em thắc mắc hoài không biết hỏi ở đâu cho đúng. nay em mạo phép hỏi ở đây mong anh thông cảm. trong những video anh thường hướng dẫn là đừng có sử dụng thẻ vì trong css làm được việc này.em lên mạng tìm cách làm trong css về cái này nhưng mà không có. Nay anh có thể hướng dẫn cho em biết được không vậy? em bí qua em mới lên đây hỏi anh đấy.
đừng sử dụng thẻ là sao hả bạn, đừng sử dụng thẻ nào??? bạn có thể viết câu hổi rõ ràng hơn đc ko ?
@DW: hjhj thank a.
@tiencoi:
code viết = table :
<body> <table> <tr> <td> Banner</td> </tr> <tr> <td> Menu</td> </tr> <tr> <td>Content</td> <td>Sidebar</td> </tr> <tr> <td> Footer</td> </tr> </table> </body>Code viết = tag Div
<body> <div id="wrapper"> <div id="banner"> ............... </div><!--- end #banner--> <div id="menu"> ............. </div><!--- end #menu-> <div id="content-page"> <div id="content"> ............... </div><!--end #content--> <div id="sidebar"> ............... </div><!--end #sidebar--> </div><!--- end #content-page--> <div id="footer"> ............... </div><!--end #footer--> </div><!--- end #wrapper --> </body>Anh ơi cho em hỏi chi tiết cách để thay thế table bằng div với ạ
Hay that day.Cac vi du cu the hoc sinh dong hon nhieu so voi ly thuyet
Khi em xài !important là nhấn mạnh cho trình duyệt biết cái này quan trọng. Chỉ đơn giản là nó làm cho thuộc tính mà có !important bên cạnh trở nên mạnh nhất thôi. Nó sẽ thắng tất cả những gì được áp dụng trên cùng một đối tượng.
Màu khác nhau thì khó sửa được bởi vì mỗi trình duyệt render màu khác nhau đôi chút.
Nhưng còn rộng hơn và nhỏ hơn là cái đó do Box Model của IE và FF là khác nhau. Em có thể xem thêm phần box model ở đây
http://www.izwebz.com/css/css-box-model/
Nhưng để sửa lỗi của em thì như sau:
Nếu em áp dụng padding cho thẻ div.outside thì nó sẽ bị phình to ra và khác nhau trong FF và IE. Nhưng nếu em áp dụng padding cho thẻ p thì nó lại không sao
p {padding: 10px;}Nên khi em định dùng padding, thì phải tạo một thành phần bao quanh nó, còn em cho padding ở thành phần chứa nó sẽ gây ra sự khác nhau trên.
Hi anh,
Được thể em hỏi anh luôn cái này, thuộc tính important trong css là như thế nào? Anh có thể giải thích giúp em được không? Em chỉ biết nó cũng dùng để chỉnh style trong IE cho giống với FF, nhưng khi nào xài thì em mù tịt. Mong anh chỉ giúp hen. Thanks anh
Chào anh,
Em đang làm một trang web nhỏ, trong đó có một phần div chứa hình và text , nhưng phần div này khi đối chiếu trong FF và IE thì lại rất khác nhau, màu của IE nhạt hơn, chiều rộng của IE cũng nhỏ hơn, em đã tìm trên mạng nhiều rồi, nhưng nói thật,em không biết cách xử lý như thế nào. Em tìm thấy trang web này, thấy có nội dung rất hay, nên em mạo muội hỏi thăm, mong anh chỉ giúp, thanks.
“Ví dụ một thành phần theo mặc định là dạng Inline nhưng bạn có thể biến nó thành block với CSS tương ứng là Display: block.”
anh mixed up chữ inline và block rồi
hi!,anh cho em hỏi 1 câu ngoài lề 1 chút,hiện tại em đang tập tành thiết kế web và code CSS,em có 1 chỗ vướng mắc thế này,trang web em viết khi zoom in hoặc zoom out thì các thành phần trong trang co giãn không đồng đều,và không giữ nguyên vị trí như cũ nữa,không giống như các trang trên mạng dù phóng to hay thu nhỏ thì các thành phần vẫn giữ nguyên vị trí cũ.anh có thể giúp em giải quyết được không!
Éc! Sorrry em chèn sai thẻ html: Sửa lại chỗ …( hàng thứ hai ) là , , …, ,
chèn code vào giữa hai dấu ` dấu nằm trên phím tab đó.
Ah Hình như em hiểu vấn đề rùi!
Cho em hỏi một câu nữa thui nha. Kết luận cuối cùng là , …, , , mặc định của nó là Block phải không ạ? Tức là mình không cần khai báo thì trình duyệt sẽ tự hiểu là Block đúng không ạ!
Rất …rất Cám ơn Bác DW về bài viết này.
P/S:Ngay khi em đọc thấy Title của bài viết là em biết Bác đã cố tình dành cho em rùi
Hay thật ! Cái này rất bổ ích cho mình đây ! Hôm nọ vừa xem người ta sử dụng cái inline này trên video mà không hiểu để làm gì, cám ơn anh DW nhé !
Em đang rất muốn làm cái comments mà anh DW chưa ra TUT. Mong anh sẽ ra cái TUT làm comment để em và mọi người học tập !
Ẹc! Video Comment to vật vã ngay trên trang chủ mà chú bảo chưa có
. Thiệt tình.
Oh, hehe, sorry nhé!
Câu này anh DW gõ nhầm chút
“Ví dụ một thành phần theo mặc định là dạng Block nhưng bạn có thể biến nó thành block với CSS tương ứng là Display: block.”