CSS

Menu với CSS

Bài viết này sẽ hướng dẫn các bạn trang trí một menu trên web với CSS. Sau khi đọc xong hướng dẫn này các bạn sẽ thu được kỹ thuật làm menu với tên gọi là Slide door và một số kinh nghiệm khác. Kết quả sau khi thực hiện xong sẽ như hình dưới đây

Đầu tiên chúng ta tạo đoạn code HTML xây dựng menu như sau

Tiếp theo chúng ta sẽ chỉnh CSS để có được menu hiển thị như mong muốn.

/* MENU */ ul#menu{ line-height:50px; margin:0; list-style:none; } ul#menu li{ float: left; margin-right:20px; text-transform:uppercase; padding-right: 10px; } ul#menu li.active, ul#menu li:hover, ul#menu li.sfhover{ background: transparent url(images/button-right.png) no-repeat right; } ul#menu li a{ color:#FFFFFF; text-decoration: none; display:block; padding-left: 10px; } ul#menu li.active a, ul#menu li:hover a, ul#menu li.sfhover a{ background: transparent url(images/button-left.png) no-repeat left; } /* END MENU */

Ở đây tôi giải thích qua một số thuộc tính, chúng ta sử dụng line-height: 50px để ép chiều cao của menu bằng 50px và chữ sẽ được tự động căn giữa theo chiều dọc. Nếu chúng ta sử dụng thuộc tính height thì sẽ phải sử dụng margin hoặc padding để căn lại vị trí cho chữ của menu. Với thuộc tính list-style: none; để bỏ các bullet của các item li. Tiếp nữa nếu để mặc định thì chúng ta sẽ thấy các li hiển thị theo từng dòng một từ trên xuống dưới, ở đây chúng ta muốn hiển thị menu theo chiều ngang nên sẽ dùng float:left để các li hiển thị trên cùng một dòng ngang. Và để các mục cách nhau chúng ta sử dụng margin-right: 20px; để làm việc này.

Bây giờ để thay đổi style khi một item được chọn hoặc chuột di chuyển qua ta chỉnh lại thuộc tính của ul#menu li.active, ul#menu li:hover. Nhìn lại đoạn mã CSS sẽ thấy chỉ khi item được chọn và chuột di chuyển qua chúng ta chỉ thay đổi ảnh của background cho item đó. Nhưng ở đây chắc ai đó sẽ thắc mắc sao lại phải thay đổi background cho cả tag a và li, sao không chỉ một thôi. Do độ dài của từng item là chưa biết trước và khác nhau nên chúng ta không thể tạo ra một cái background cố định để thay cho tất cả được. Do vậy ở đây chúng ta sẽ sử dụng một kỹ thuật với tên gọi cũng khá gợi hình tượng "slide door". Trước tiên vào Photoshop tạo một button có độ dài phù hợp rồi cắt ra làm 2 phần như hình dưới đây

Như vậy chúng ta sẽ cho background của li là cái ảnh bên phải, của thẻ a nằm trong li là ảnh bên trái. Do đó khi item có kích thước khác nhau thì hình ảnh nút vẫn được hiển thị hài hòa. (Ô thế tại sao không dùng ảnh li là ảnh bên trái, và của thẻ a là cái còn lại? đơn giản vì theo cách hiển thị trên trình duyệt thì thằng nào nằm trong thì background của nó đè lên thằng chứa nó, còn nếu ai vẫn thích vậy thì ta cắt lại cho hình bên phải nhỏ hơn...). Để hiểu rõ hơn có thể đọc thêm kỹ thuật này tại link này.

OK, vậy là sau những bước này chúng ta đã có một menu ngang rồi và chạy rất ok trên Firefox, nhưng khi sang thằng IE thì sự kiện di chuyển chuột qua item không thấy nó đổi background. Tại sao nhỉ? Đây chính là những lúc bực nhất đối với người thiết kế Web để đảm bảo trang web của mình chạy đúng đắn trên các trình duyệt. Bị hiện tượng như trên là do trong IE không có cái kiểu li:hover, cái này IE chỉ support cho tag a thôi. Để giải quyết vấn đề này chúng ta thêm đoạn javascript này ở đầu trang web.

Blog's tag:

Blog's topic:

Sử dụng px, pt, em hay percent?

Đối với những người thiết kế website và lập trình web thì hiểu rõ các đơn vị sử dụng cho kích thước là một điều cần thiết. Nhất là khi làm việc với CSS thì chắc hẳn mọi người đã quen thuộc với các đơn vị px, pt, em, %. Vậy thực chất chúng ta đã hiểu rõ về các đơn vị này chưa? khi nào thì sử dụng px, pt, em hay %. Bài viết này mong sẽ giúp mọi người có cái nhìn sáng tỏ hơn với các đơn vị đó.

  • px được viết tắt từ Pixel, là đơn vị điểm ảnh trên screen media (cụ thể là máy tính). Một pixel tương đương với một điểm trên màn hình máy tính, là đơn vị hiển thị nhỏ nhất trên màn hình. Số lượng điểm ảnh này phụ thuộc vào kích cỡ màn hình và độ phân giải (resolusion) của màn hình đó. Kích thước của một điểm ảnh cũng phụ thuộc vào kích thước màn hình và độ phân giải khác nhau thì không giống nhau.
  • pt được viết tắt từ Point, là đơn vị được sử dụng trong in ấn. Một point xấp xỉ gần bằng 1/72 inch. Điều đó có nghĩa là kích thước 1 point là cố định dù trên bất cứ màn hình nào, độ phân giải nào. Thông thường với màn hình CRT 15" (kích thước màn hình thật sự chỉ khoảng 14"2/9) và ở độ phân giải cao nhất là 1024x768 thì DPI là 96 - có nghĩa là 96 pixels trên 1 inch, tức là 1 px = 0.75 pt. Nhưng cũng màn hình đó nếu set về độ phân giải là 800x600 thì DPI là 56.25, có nghĩa là 1 px = 1.28 pt.
  • em và % đều là đơn vị đo lường tương đối. 1 em bằng kích thước của font chữ hiện tại, ví dụ nếu font-size của tài liệu là 12pt thì 1em = 12pt = 100%.

Như vậy nếu chúng ta sử dụng đơn vị pt thì kích thước sẽ luôn luôn cố định dù bất cứ màn hình có kích thước và độ phân giải nào. Tức là nếu xem trên màn hình 12" cũng như xem trên màn hình 21"! Nếu sử dụng px thì cách hiển thị sẽ được phụ thuộc vào màn hình có kích thước và độ phân giải. Do vậy px là đơn vị hay được lựa chọn để sử dụng. Nhưng công việc hiển thị không những phụ thuộc vào thiết bị mà còn phụ thuộc vào trình duyệt. Trong IE thì chúng ta sẽ không thể resize chữ nếu đã xác định bằng đơn vị px, mà IE thì vẫn đang là trình duyệt chiếm thị phần nhiều nhất trên Internet, do vậy cũng là một điều khó chịu cho những người thiết kết cầu toàn. Xu thế gần đây người ta bắt đầu sử dụng % và em, nhưng 2 đơn vị này thì lại khó tưởng tượng, vì nó tương đối mà. Và đây là một cách đơn giản để sử dụng em mà không cần phải chi ly tính toán giá trị chính xác do cái tỉ lệ 1em = 16px gây ra. Đầu tiên ta thiết lập font-size cho toàn trang như sau (lưu ý đây chỉ là code sử dụng cho thiết lập font-size mặc định của trình duyệt là 16px):

body {font-size:62.5%;}

Khi đó kích thước của 1em sẽ là: 16(px)*0.625 = 10(px). Và như vậy thì việc tính toán kích cỡ của font chữ đã trở nên đơn giản: 1.2em = 12px, 1.4em = 14px,... Như vậy ta có thể thiết lập đc chính xác sự hiển thị font chữ như mong đợi.

Được trích dẫn từ các liên kết dưới đây

  1. Đôi điều về font size: pt, px, em và %
  2. How to size text using ems
  3. CSS Font-Size: em vs. px vs. pt vs. percent

Blog's tag:

Chữ có hiệu ứng "Gradient"

Ngồi kì cạch cả đêm ôn lại kiến thức CSS và JavaScript, bỏ bẵng đi là học cái gì cũng như mới cả. Đúng là biển học bao la, không biết bao giờ mới cảm thấy vừa ý với những gì mình đã học. Hôm nay lượm nhặt được tip làm hiệu ứng chữ "gradient" mà không dùng ảnh. Chỉ cần CSS là chúng ta có thể tạo ra được hiệu ứng đó, rất lý thú!

Để tưởng tượng cách làm mọi người có thể xem hình dưới đây

Đoạn code HTML

[html]

CSS Gradient Text

[/html]

Đoạn CSS

h1 { font: bold 330%/100% "Lucida Grande"; position: relative; color: #464646; } h1 span { background: url(gradient.png) repeat-x; position: absolute; display: block; width: 100%; height: 31px; }

Như chúng ta biết thì trên IE6 việc hiển thị ảnh dạng PNG với thuộc tính trong suốt (transparent) không chính xác. Trên IE7 thì có đoạn tip sau

Lợi ích của làm này là

  • Tạo ra được hiệu ứng chữ mà không cần Javascript, Flash
  • Làm tiêu đề của bài viết thêm ấn tượng.
  • Có thể dùng bất kỳ font chữ nào.

Blog's tag:

Subscribe to CSS