Tag Archives: hỏi đáp

Hỏi – đáp bên lề dành cho tác giả Web (phần 2)

(Tiếp theo Phần 1)

7. Hình ảnh

  1. Làm thế nào để hiển thị hình ảnh lên trang của tôi?
  2. Nên dùng loại định dạng ảnh nào?
  3. Làm thế nào để kết nối (link) hình ảnh đến nội dung nào đó?
  4. Làm thế nào để tạo ảnh nhỏ được kết nối đến hình ảnh nguyên cỡ?
  5. Làm thế nào để kết nối từng phần bức ảnh đến các nội dung khác nhau?
  6. Làm thế nào để loại bỏ viền màu xanh bao quanh các ảnh được kết nối?
  7. Tại sao lại có một tia màu ở phía trái hoặc phải của hình ảnh?
  8. Làm thế nào để loại bỏ các khoảng trống bao quanh/giữa các hình?
  9. Tại sao các hình ảnh lại hiển thị sai hoặc không tải được?
  10. Làm thế nào để tạo nên ảnh GIF động?
  11. Làm thế nào để hiển thị hình ảnh ngẫu nhiên?
  12. Có thể đặt mã lệnh markup vào trong dòng chữ ALT không?
  13. Làm thế nào để căn lề hình ảnh sang phải/trái?
  14. Làm thế nào để chỉ định hình nền?
  15. Làm thế nào để có hình nền cố định (không trượt được)?
  16. Làm thế nào để có hình nền không lặp lại?

8. Các hiệu ứng trình chiếu

  1. Làm thế nào để tạo ra danh sách với dấu hoa thị tùy ý?
  2. Làm thế nào để tạo ra dòng kẻ ngang tùy ý?
  3. Tìm đâu ra một bộ đếm số lần truy cập (“hit counter”)?
  4. Làm thế nào để hiển thị ngày giờ hiện thời trong văn bản?
  5. Làm thế nào để có chữ chạy trên thanh trang thái?
  6. Làm thế nào để căn phải hoặc căn đều lề cho đoạn chữ?
  7. Làm thế nào để thụt đầu dòng cho đoạn văn?
  8. Làm thế nào để thụt vào cả đoạn văn dài?
  9. Làm thế nào để loại bỏ lề bao quanh trang?
  10. Làm thế nào để ngắt hết trang?
  11. Làm thế nào để có một biểu tượng tùy ý khi mọi người đánh dấu website của mình?
  12. Làm thế nào để tự phát ra một file nhạc khi người ta đến trang của mình?

9. Bảng HTML

  1. Có thể lồng bảng bên trong bảng không?
  2. Làm thế nào dùng bảng để cấu trúc nên các form?
  3. Làm thế nào để căn giữa một bảng?
  4. Làm thế nào để căn lề bảng sang phải/trái?
  5. Có thể dùng gía trị phần trăm cho <TD WIDTH=…> không?
  6. Tại sao <TABLE WIDTH=”100%”> không dùng hết toàn bộ bề rộng trình duyệt?
  7. Tại sao có dấu cách dư ra phía trên hoặc dưới bảng?
  8. Có vấn đề gì với việc dùng bảng để trình bày không?

10. Biểu mẫu (form) HTML

  1. Dùng form như thế nào?
  2. Làm thế nào để dữ liệu form chuyển vào email cho tôi?
  3. Làm thế nào để dùng bảng cấu trúc nên form?
  4. Làm thế nào để loại bỏ các khoảng trống sau thẻ </form>?
  5. Làm thế nào để tạo form sao cho nó được gửi bằng cách ấn ENTER?
  6. Làm thế nào để đặt focus vào trường thứ nhất trong form?
  7. Làm thế nào để lập một form với các nút theo ý thích?
  8. Liệu có thể có nhiều nút nộp (Submit) trên cùng một form không?
  9. Liệu có thể có nhiều hoạt động (action) trên cùng một form không?
  10. Làm thế nào để yêu cầu các trường phải được điền vào, hoặc điền vào đúng?
  11. Liệu có thể ngăn không cho form bị nộp lại không?
  12. Làm cách nào để cho phép tải file lên website của tôi?
  13. Làm thế nào để dùng form lập các trình đơn duyệt web dạng kéo xuống (pull-down navigation menu)?

11. Khung HTML

  1. Làm thế nào để tạo ra khung? Bộ khung (frameset) là gì?
  2. Làm thế nào để khiến cho một kết nối hoặc form trong một khung cập nhật được khung khác?
  3. Tại sao đường kết nối của tôi mở ra cửa sổ mới thay vì cập nhật khung sẵn có?
  4. Làm thế nào để cập nhật 2 khung cùng lúc?
  5. Làm thế nào để thoát khỏi một bộ khung?
  6. Làm thế nào để chắc rằng các tài liệu đóng khung được hiển thị bên trong bộ khung của chúng?
  7. Có cách nào tránh việc bị đóng khung không?
  8. Làm thế nào để chỉ định một tổ hợp cụ thể các khung thay vì của tài liệu mặc định?
  9. Làm thế nào để xóa viền xung quanh khung?
  10. Làm thế nào dể tạo ra một khung với thanh trượt đứng nhưng không có thanh trượt ngang?
  11. Làm thế nào để thay đổi tiêu đề của văn bản được đóng khung?
  12. Tại sao khung lại không đúng kích thước như chỉ định?
  13. Có vấn đề gì với việc dùng khung không?
  14. Các máy tìm kiếm có “ghét” khung không?

Mục 7: Hình ảnh

7.1. Làm thế nào để hiển thị hình ảnh trên trang web của tôi?

Hãy dùng phần tử IMG. Thuộc tính SRC chỉ định vị trí hình ảnh này. Thuộc tính ALT cho dòng chữ thay thế trong trường hợp trình duyệt không tải hình ảnh. Chẳng hạn:

<img src="logo.gif" alt="ACME Products">

Xem thêm

7.2. Tôi nên dùng định dạng nào cho hình ảnh?

Sau đây là một quy tắc đơn giản:

Có rất nhiều màu ư? Hãy dùng JPEG.
Có màu tô đặc và các đường nét gãy gọn? Hãy dùng GIF hoặc PNG.

Các định dạng hình ảnh khác nhau thì nén dữ liệu theo cách khác nhau, mỗi loại có những ưu điểm và nhược điểm riêng. Định dạng JPEG hợp với các ảnh mà màu sắc hòa trộn và chuyển dần từ màu này sang màu khác. Ví dụ điển hình là ảnh chụp vì chúng thường có những bóng màu và sự đa dạng màu sắc tinh tế.

Các định dạng GIF và PNG rất hợp với các hình ảnh có tương đối ít màu và không có sự chuyển dần màu sắc. Đa số các hình web nhỏ đều rơi vào mục này. Những định dạng này đều nén tốt hình ảnh, và các đường nét, chữ, mép hình đều còn đảm bảo sắc nét.

Độ trong suốt của PNG thì tốt hơn nhiều so với của GIF, cho phép hiển thị trong suốt từng phần và những hiệu ứng thú vị khác nữa. Tuy nhiên, Internet Explorer trên Windows (ngay cả phiên bản 6) không hỗ trợ gì thêm so với độ trong suốt kiểu GIF.

Lưu ý rằng các bộ lưu cache máy chủ AOL chuyển đổi các hình ảnh thành file định dạng hình được nén mạnh (dạng *.art), và theo mặc định, các trình duyệt AOL được cấu hình hóa để dùng những phiên bản nhỏ, chất lượng thấp này thay vì ảnh gốc.

Xem thêm

7.3. Làm thế nào để liên kết một hình ảnh với cái gì khác?

Chỉ việc dùng hình ảnh làm nội dung liên kết như sau:

<a href=...><img src=... alt=...></a>

7.4. Làm thế nào để tạo ra một hình ảnh thu nhỏ (thumbnail) kết nối với hình ảnh nguyên khổ?

Một hình ảnh nhỏ chính là mọt bản sao của ảnh nguyên khổ mà đã được chỉnh sửa để giảm kích thước file. Nó được liên kết với ảnh nguyên khổ bằng một đường kết nối thông thường:

<a href="full-sized.jpg"><img src="thumbnail.jpg" alt=...></a>

Có vài kĩ thuật để giảm kích thước file lấy làm ảnh thu nhỏ, bao gồm:

  • lấy mẫu lại/co hình ảnh lại để tạo ra hình ảnh nhỏ hơn;
  • xén các cạnh hình ảnh để bỏ đi những phần thừa;
  • giảm chất lượng của ảnh để tăng tỉ lệ nén; và
  • giảm kích cỡ của bảng màu (chẳng hạn chuyển thành thang màu xám).

Bạn sẽ cần các phần mềm đồ họa để tạo ra các ảnh nhỏ. Những công cụ đồ họa miễn phí sẽ thực hiện tất cả các tính năng nêu trên.

Những hình ảnh nhỏ có thể dùng nhiều kĩ thuật đồng thời. Chẳng hạn, Jakob Nielsen đề cao “Relevance-Enhanced Image Reduction“, vốn kết hợp lấy mẫu lại/thu nhỏ và xén ảnh.

7.5. Làm thế nào để kết nối các phần khác nhau của ảnh với các nội dung khác nhau?

Hãy dùng cách ánh xạ hình ảnh. Những ánh xạ hình ảnh phía máy khách thì không cần đến khâu xử lý phía máy chủ, nhờ vậy mà thời gian phản hồi sẽ ngắn hơn. Mặt khác, ánh xạ hình phía máy chủ thì ẩn giấu các định nghĩa kết nối khỏi trình duyệt, và và có thể đóng vai trò lưu trữ các ánh xạ hình phía máy khách, chỉ trong một số ít các trình duyệt cũ có hỗ trợ  ánh xạ hình phía máy chủ nhưng không hỗ trợ ánh xạ hình máy khách.

Chi tiết cấu hình hóa ánh xạ hình máy chủ thì khác nhau giữa các máy chủ. Hãy tham khảo tài liệu máy chủ để có thông tin chi tiết.

Ánh xạ ảnh phía máy khách được thực hiện bằng HTML. Phần tử MAP định nghĩa một ánh xạ ảnh riêng lẻ và phần tử AREA định nghĩa các vùng liên kết cụ thể với phép ánh xạ ảnh đó. Thuộc tính USEMAP của phần tử IMG sẽ gắn một ánh xạ ảnh với một ảnh cụ thể.

Xem thêm

7.6. Làm thế nào để xóa viền xanh lam bao quanh hình ảnh được kết nối?

Trong mã HTML của bạn, có thể chỉ định thuộc tính BORDER cho hình đó:

<a href=...><img src=... alt=... border="0"></a>

Trong mã CSS của bạn, có thể chỉ định thuộc tính viền cho các hình ảnh được kết nối:

a img { border: none ; }

Tuy nhiên, lưu ý rằng việc bỏ viền hình ảnh khiến cho khó khăn hơn khi xác định nhanh xem những hình ảnh nào có thể click vào được.

7.7. Tại sao tôi thấy tia màu ở bên trái hoặc phải hình ảnh trên bài của tôi?

Đây là kết qủa của việc để lại dấu trống “white space” (dấu cách và dấu xuống dòng) trước hoặc sau một thẻ IMG bên trong một neo. Chẳng hạn:

<a href=...> <img src=...> </a>
 

có thể gồm dấu trống bên trái và bên phải hình ảnh. Vì nhiều trình duyệt mặc định hiển thị các neo là những dấu gạch ngang thấp ( _ ) có màu, nên chúng sẽ hiển thị dấu trống cạnh hình bằng những tia màu như vậy.

Giải pháp: đừng để lại bất kì dấu trống nào giữa các thẻ neo và thẻ IMG. Nếu dòng qúa dài thì hãy ngắt ra ở vị trí bên trong thẻ thay vì ở ngoài, như thế này:

<a href=...
 ><img src=...></a>

Các bộ kiểm tra phong cách trang web như Weblint sẽ xem xét vấn đề này trong mã nguồn HTML của bạn.

7.8. Làm thế nào để xóa bỏ khoảng trống bao quanh hình ảnh của tôi?

Nếu hình ảnh nằm trong một bảng, hãy đảm bảo chắc rằng bạn đặt các thuộc tính BORDER, CELLSPACING, và CELLPADDING về gía trị 0.

Các khoảng cách thừa giữa các hình thường được tạo ra bởi các dấu trống bao quanh thẻ <IMG> trong mã markup. Có thể an toàn dùng các dấu xuống dòng bên trong một thẻ (giữa các thuộc tính) chứ không phải giữa hai thẻ. Chẳng hạn, thay các dòng này:

<td ...>
 <img src=... alt=...>
 <img src=... alt=...>
 </td>

bằng dòng này:

<td ...><img src=... alt=...><img src=... alt=...></td>

The tài liệu quy định mới nhất về HTML, hai cách viết trên là tương đương nhau. Tuy vậy, các trình duyệt thông dụng đều không tuân theo quy định trong trường hợp này.

Cuối cùng, các khoảng cách thừa giữa các hình ảnh có thể xuất hiện trong những tài liệu vốn kích hoạt chế độ hiển thị “tiêu chuẩn” của các trình duyệt trên nền Gecko, như Mozilla và Firefox.

Xem thêm

7.9. Tại sao các hình ảnh trong bài tôi lại hiển thị không đúng hoặc không tải được?

Có nhiều khả năng khác nhau:

  • Bạn có thể đặt sai URL cho ảnh. Lưu ý rằng các URL phân biệt chữ in-thường, nên example1.gif, Example1.Gif, và EXAMPLE1.GIF là khác nhau. Hơn nữa, URL dùng các gạch xuôi thay vì gạch ngược, vì vậy images\example2.gif là sai, và cần được chuyển về images/example2.gif.
  • Mã lệnh markup của bạn có thể có lỗi cú pháp, chẳng hạn thiếu mất dấu đóng nháy kép trong thuộc tính SRC:<img src="example3.jpg alt=...>
  • Việc dùng kí tự “>” trong thuộc tính ALT có thể sẽ gây khó dễ những trình duyệt rất cũ, vốn đóng thẻ ngay tại dấu  “>” đầu tiên mà chúng bắt gặp: <img alt="2 + 2 > 3" src="example4.png">
  • Dùng cách chú thích HTML để vô hiệu hóa mã markup với các thẻ HTML có thể gây khó dễ những trình duyệt rất cũ, vốn đóng thẻ ngay tại dấu  “>” đầu tiên mà chúng bắt gặp.
  • Phần mềm viết web bạn dùng có thể đã sử dụng các URL file (như file:///c:/path/example5.gif). Nếu vậy thì bạn phải thay chúng bằng các URL tương đối (như example5.gif) hay URL http (như http://server.example/path/example5.gif). Hình ảnh của bạn có thể thuộc định dạng không được hỗ trợ rộng rãi như BMP của Microsoft hay ART của AOL. Hãy chắc rằng bạn đã lưu hình ảnh dưới dạng được hỗ trợ tốt như GIF, JPEG, hay PNG. (Lưu ý rằng bạn phải chuyển định dạng dữ liệu ảnh chứ không thể đơn thuần đổi tên file là được. Các ứng dụng đồ họa miễn phí sẽ thực hiện việc chuyển định dạng đồ họa như vậy.)

Xem thêm

7.10. Làm thế nào để tạo các ảnh hoạt họa GIF?

Hãy xem các tài liệu sau:

7.11. Làm thế nào để hiển thị các hình ảnh ngẫu nhiên?

Có hai cách làm cơ bản. Một cách làm rất tốt cho bộ lưu trữ cache là dùng một thẻ IMG bình thường để tham chiếu tới một mã lệnh CGI nhằm điều hướng trình duyệt đến một trong số vài hình ảnh một cách ngẫu nhiên.

Cách thứ hai là phát sinh mã HTML theo cách động bằng cơ chế kiểu như Server Side Includes (SSI) hay CGI. Cách này kém thân thiện với bộ lưu trữ cache, nhưng cho phép mã lệnh bên cạnh (như các thuộc tính HEIGHT và WIDTH, hay các URL của kết nối/ảnh được ánh xạ) thay đổi cùng với hình ảnh. Nếu máy chủ của bạn cho phép SSI, các thông tin chi tiết có thể tìm được trên tài liệu máy chủ của bạn.

Xem thêm

7.12. Liệu tôi có thể viết mã vào dòng chữ ALT?

Không. Dù vậy thì các kí tự (&copy;, &#nnn; và tương tự) thì vẫn được phép.

Xem thêm

7.13. Làm thế nào để căn hình ảnh lệch trái (hoặc phải)?

Bạn có thể dùng <img align="right"> để dồn hình về phía phải.  (Dùng align="left" để dồn về trái.) Bất cứ nội dung nào đi theo sau thẻ <img> sẽ tràn quanh hình này. Dùng <br clear="right"> hoặc <br clear="all"> để đánh dấu điểm kết thúc của chữ chạy quanh hình, như ví dụ sau đây:

The image in this example will float to the right.

<img align="right" src=... alt=...>

Dòng chữ này sẽ được bó để chèn vào khoảng trống bên trái hình ảnh. (Và nếu chữ còn dài thì nó tiếp tục tràn xuống phía dưới hình nữa.)

<br clear="right">

Dòng chữ này sẽ xuất hiện bên dưới hình, ngay cả khi vẫn còn chỗ trống bên trái.

Thuộc tính CSS float (trôi) cũng có thể được dùng đến.

Xem thêm

7.14. Làm thế nào để chỉ định hình nền?

Bằng CSS, bạn có thể đề xuất một hình nền (và một màu nền nếu trình duyệt không hiện hình đó) bằng thuộc tính background. Sau đây là một ví dụ:

body {
    background: white url(example.gif) ;
    color: black ;
}

Bằng HTML, bạn có thể đề xuất một hình nền với thuộc tính BACKGROUND của phần tử BODY. Sau đây là một ví dụ:

<body background="imagefile.gif" bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#800080" alink="#000080">

Nếu chỉ định một hình nền, bạn cũng nên chỉ định luôn dòng chữ, đường liên kết và màu nền vì các màu mặc định trên mày người đọc có thể không đủ độ tương phản với hình nền được chọn. Màu nền có thể được dùng ở những trình duyệt không dùng hình nền đó. Tác gỉa web không nên lệ thuộc vào hình nền vì các trình duyệt cho phép người đọc vô hiệu hóa việc tải các hình hoặc ghi đề lên các nền quy định cho tài liệu.

Xem thêm

7.15. Làm thế nào để có được một hình nền cố định (không bị cuộn)?

Bằng CSS, bạn có thể dùng thuộc tính background-attachment. Phần đính kèm trên nền này có thể được ghi tắt trong thuộc tính nền background, như ví dụ sau:

body {
    background: white url(example.gif) fixed ;
    color: black ;
}

Lưu ý rằng CSS này được hỗ trợ bởi Internet Explorer, Mozilla, Firefox Opera, Safari, và các trình duyệt khác. Trái lại, thuộc tính riêng BGPROPERTIES của Microsoft thì chỉ được hỗ trợ trên Internet Explorer.

Xem thêm

7.16. Làm thế nào để có một hình ảnh nền không bị trải lặp lại?

Với CSS, bạn có thể dùng thuộc tính background-repeat (lặp nền). Việc lặp ảnh nền có thể được bao gồm trong thuộc tính nền viết tắt như sau:

body {
    background: white url(example.gif) no-repeat ;
    color: black ;
}

Xem thêm

Mục 8: Hiệu ứng thuyết trình

8.1. Làm thế nào để lập danh sách với các dấu hoa thị tùy chọn?

Có vài phương pháp khác nhau, không có cách nào là hoàn hảo:

  • Dùng thuộc tính kiểu danh sách (list-style) trong CSS. Đây là cách được ưa chuộng để tạo các hoa thị theo ý thích, song không may là nó không được hỗ trợ phổ biến bởi các trình duyệt. Tuy nhiên, các trình duyệt nào không hỗ trợ sẽ hiện ra một dấu hoa thị thường, nên hiện giờ bạn dùng cách này sẽ không có vấn đề gì.
  • Dùng một thẻ <dl> cùng <dd> với các hình đi trước (nhớ align và có dòng chữ alt phù hợp) mà không có <dt>; cách này chẳng đẹp như một danh sách thực thụ.
  • Dùng một bảng có hai cột, với dấu hoa thị ở cột trái và chữ trên cột phải. Vì các trình duyệt phải tải xong cả bảng trước khi hiển thị nó lên, nên cách này có thể sẽ hơi chậm với các danh sách dài.
  • Tạo ra dấu hoa thị với thụt đầu dòng sẵn cùng nó. Chẳng hạn, nếu bạn dùng một hoa thị có bề ngang 10 pixel (điểm ảnh) thì bạn có thể làm cho hình nền rộng 25 pixel (trong suốt) và đặt dấu hoa thi sát về phía phải của nó. Bằng cách này sẽ tạo ra một đoạn thụt đầu dòng rộng 15 pixel bên trái dấu hoa thị. Nó sẽ tăng thêm một chút dung lượng của hifnh đồ thị nhưng vì là thuần một màu nên không tăng nhiều lắm. Cách này không phù hợp khi các mục kéo dài hơn một dòng (mà bạn cũng cần nhớ rằng chẳng thể biết trước là màn hình người đọc sẽ được đặt để hiển thị dòng dài bao nhiêu).

Xem thêm

8.2. Làm thế nào để tạo một đường gạch ngang theo ý mình?

Lựa chọn tốt nhất của bạn có lẽ là một IMG căn giữa với dòng chữ thay thế (ALT) là “–” :

<P ALIGN=center><IMG SRC="custom-line.gif" ALT="--------------------"></P>

Xem thêm

8.3. Tôi có thể lấy một “hit counter” (đếm số lần truy cập) ở đâu?

Hit counter là một đoạn mã lệnh hoặc chương trình nhỏ để đếm mỗi khi tài liệu được truy cập từ máy chủ.

Tại sao cần có hit counter? Nếu bạn tin rằng nó sẽ cho bạn biết có bao nhiêu lần tài liệu của bạn được truy cập đến thì bạn đã lầm. Không có bộ đếm nào có thể theo dõi được những lần truy cập từ các kho lưu trình duyệt hoặc proxy. Một số bộ đếm phụ thuộc vào số lượt tải hình ảnh để tăng lần đếm; nhưng đếm như vậy sẽ bỏ qua những lần truy cập từ các trình duyệt chữ, hay trình duyệt được chọn để không tải hình, hoặc những trường hợp người dùng ngắt việc truyền dữ liệu. Một số bộ đếm thậm chí còn yêu cầu truy cập đến một website khác; mà những website này có thể bị hỏng hoặc qúa tải, tất cả đều gây chậm trễ trong việc hiển thị các tài liệu của bạn.

Đa số các máy chủ web đều ghi lại những lượt truy cập cho các văn bản lưu vào trong máy chủ. Những trang ghi này có thể được xử lý để lấy thông tin về số lần truy cập tương đối trong một qúa trình dài. Không có lý do gì để hiển thị con số này cho độc gỉa xem, vì họ sẽ không biết là số lần truy cập tính theo mốc nào. Không phải tất cả nhà cung cấp dịch vụ đều cho phép truy cập đến các bản ghi server, nhưng nhiều nhà cung cấp có các đoạn mã lệnh để xuất ra thông tin về những lần truy cập đến một tài liệu cụ thể. Để biết thêm thông tin, hãy hỏi người quản trị hệ thống hoặc nhà cung cấp dịch vụ.

Xem thêm

8.4. Làm thế nào để hiện thị ngày hoặc giờ trong tài liệu của tôi?

Bằng server-side includes. Hãy hỏi người quản trị web xem liệu SSI có được hỗ trơ không, và cú pháp chính xác với server của bạn là gì. Nhưng cách này sẽ hiển thị giờ địa phương trên server (hoặc GMT/UTC), chứ không phải giờ địa phương ở máy khách. Và nếu tài liệu được lưu cache, thì dĩ nhiên thời gian sẽ kém chính xác dần đi. Có thể dùng JavaScript để hiển thị thời gian địa phương cho máy khách, nhưng hầu hết độc gỉa đều quen nhìn đồng hồ trên màn hình máy họ rồi thì còn cần gì phải báo thời gian nữa?

Nếu bạn muốn đặt ngày hoặc giờ hiện tại lên các trang web của mình bằng CGI, JavaScript hoặc VBScript, thì hãy tạm dừng lại suy nghĩ để thấy được việc này sẽ tốn thêm tài nguyên máy, làm tăng thời gian tải trang, và ngăn cản việc lưu cache hiệu qủa. Nếu bạn thấy rằng bạn thực sự phải dùng đến nó, chẳng hạn để báo người đọc thời gian hoạt động liên tục của một máy chủ FTP, thì bằng mọi cách hãy thực hiện. Nhưng nếu mục đích chỉ là ‘làm vậy sẽ hay’ thì hãy nghĩ lại.

8.5. Làm thế nào để có hàng chữ chạy trên thanh trạng thái?

Đây không phải là câu hỏi dành cho HTML; việc đó được thực hiện bằng JavaScript. Tìm xem trang web nào có tính năng trên và sao chép đoạn lệnh từ mã nguồn của nó.

Đoạn lệnh này có hai vấn đề lớn. Một là nó thường dùng dấu toán tử giảm (c--) ở chỗ nào đó. Nhưng dấu “--” đứng trong lời chú thích lại kết thúc chính chú thích này, một số trnifh duyệt hiểu như vậy. Do đó mã lệnh sẽ  bị hỏng trên một số trình duyệt. Điều tương tự xảy ra với “>“.

Thứ hai, hãy nhớ rằng nhiều người còn coi chữ chạy tệ hơn cả chữ nhấp nháy <BLINK>, và nó còn che khuất cả những thông tin trạng thái lẽ ra được hiển thị ở đó. Nó ngăn không cho người ta biết một đường link chỉ đến đâu.

8.6. Làm thế nào để căn lề chữ trái hoặc phải?

Giải pháp HTML là dùng thuộc tính ALIGN=”right” đối với các đoạn, các phần chia, các đề mục, v.v. Cách này sẽ căn lề bên phải (còn để bên trái nhấp nhô). Lưu ý rằng thuộc tính ALIGN bị lạc hậu ở HTML 4 trong đa số các trường hợp.

Cơ chế của CSS là dùng thuộc tính text-align: right trong bộ quy tắc (ruleset). Ví dụ sau đây căn lề phải tất cả những đoạn nào có thuộc tính class=”note”:

p.note {text-align: right}

Có lẽ điều bạn thực sự muốn là căn đều cả lề trái lẫn phải. Điều này được gơi ý trong HTML bằng thuộc tính ALIGN=”justify”. Ví dụ CSS sau căn đều tất cả các đoạn có thuộc tính class=”adcopy”:

p.adcopy {text-align: justify}

Trước khi căn chữ, có một số tiểu tiết cần lưu ý. Dù đoạn chữ được căn lề đều trông có đẹp nhưng những phân tích tâm lý cho thấy thực ra đoạn chữ căn lề trái thì dễ đọc và dễ hiểu hơn. Ngoài ra, những lỗi trình duyệt có thể làm đoạn chữ căn đều trở nên khó đọc.

Xem thêm

8.7. Làm thế nào để thụt dòng đầu tiên trong mỗi đoạn?

Hãy dùng một style sheet với bộ quy tắc sau:

P { text-indent: 5% }

Xem thêm

8.8. Làm thế nào thụt đầu dòng phần văn bản rất dài?

Hãy dùng một style sheet để đặt lề trái cho cả văn bản hoặc một phần văn bản:

  /* Cả văn bản */
  BODY { margin-left: 20% }
/* Một phần văn bản có CLASS="foo" */
 .foo { margin-left: 15% }

Xem thêm

8.9. Làm thế nào để bỏ phần lề bao quanh trang của tôi?

Cách thích hợp nhất là dùng một style sheet để chỉ định các thuộc tính marginpadding.

Với các phần mở rộng HTML dành cho thương mại, bạn có thể đặt lề cho một số trình duyệt nhất định. Internet Explorer 3+ hỗ trợ các thuộc tính TOPMARGINLEFTMARGIN. Internet Explorer 4+ hỗ trợ thêm các thuộc tính BOTTOMMARGINRIGHTMARGIN. Navigator 4+ hỗ trợ các thuộc tính MARGINWIDTHMARGINHEIGHT. Đa số các trình duyệt khác đều bỏ qua những tính năng mở rộng này.

CSS có thể kết hơp với HTML thương mại. Đoạn lệnh sau phát huy hiệu qủa trong đa số trình duyệt:

<body marginheight="0" topmargin="0" marginwidth="0" leftmargin="0" style="margin:0;padding:0">

Cũng lưu ý rằng Navigator luôn luôn dành ra khoảng trống cho thanh cuộn bên phía phải, nhưng chỉ hiện thanh cuộn khi tài liệu dài đến mực phải cuộn. Nếu tài liệu ngắn không cần cuộn thì sẽ chừa ra một khoảng “lề” phải mà không thể bỏ đi được.

Xem thêm

8.10. Ngắt trang như thế nào?

Bạn có thể dùng style sheet để chỉ định cách ngắt trang. Tuy nhiên, trong khi page-break-before được các trình duyệt hiện thời hỗ trợ tương đối tốt thì những thuộc tính ngắt trang khác (cùng các gía trị cho page-break-before ngoài gía trị always) thì được hỗ trợ rất kém.

Hãy cẩn thận khi chỉ định chỗ ngắt trang trên Web. Sự khác biệt giữa các môi trường in ấn (phông chữ, cỡ chữ, cỡ giấy, lề trang in, v.v.) sẽ thay đổi vị trí lý tưởng của ngắt trang.

Nếu cần tạo ra một bản in được định dạng đẹp từ tài liệu HTML của bạn, hãy cân nhắc sử dụng một công cụ chuyên cho in ấn thay vì dùng tính năng Print của trình duyệt. Chẳng hạn, html2ps tạo ra các bản PostScript đẹp từ tài liệu HTML, và HTML Scissor dùng các chú thích HTML đặc biệt để gợi ý chỗ ngắt trang.

Xem thêm

8.11. Làm thế nào để có một biểu tượng túy thính khi mọi người đánh dấu website của tôi?

Đây là một đặc điểm được giới thiệu ở Internet Explorer 5.x. Theo mặc định, trình duyệt sẽ yêu cầu một file có tên “favicon.ico” ở cùng  URL cơ sở với tài liệu được đánh dấu (bookmark). Nếu nó không tìm thấy file này thì nó sẽ thử tìm lại ở thư mục gốc website của bạn. Các tác gỉa Web có thể chỉ định một đường dẫn khác đến file biểu tượng với một phần tử như sau:

<link rel="SHORTCUT ICON" href="/pathname/filename.ico">

Hình ảnh cần có kích thước 16×16 pixel, và dưới dạng Windows icon.

Xem thêm

8.12. Làm thế nào để đặt file nhạc tự phát lên mỗi khi độc gỉa truy cập đến website?

Đa số các tình duyệt đều hỗ trợ phần tử EMBED cho việc này, miễn là người dùng có một plug-in để phát nhạc. Bạn có thể có thêm lượng độc gỉa nếu như bạn dùng cả BGSOUND. Để tránh trục trặc với trình duyệt hỗ trợ đồng thời hai thứ này, hãy đặt BGSOUND vào trong NOEMBED:

http://your_sound_file
 <noembed><bgsound src="your_sound_file"></noembed>

Lưu ý rằng các phần tử này đều có tính thượng mại chứ không có trong chuẩn HTML nào. (Cách làm bằng HTML tiêu chuẩn thì vẫn chưa được hỗ trợ tốt.)

Cần nhận thấy rằng có người dùng khó chịu khi nhạc được tự phát lên. Có thể họ chưa chỉnh mức âm lượng trên loa, hay họ đang mải nghe cái khác. Cho nên để lịch sự, có thể bạn cần phải gợi ý file nhạc dưới dạng đường link:

<a href="your_sound_file">Listen to my sound! (5 kB MIDI)</a>

Xem thêm

Mục 9: Bảng HTML

9.1. Tôi có thể lồng bảng trong bảng được không?

Được, một bảng có thể được đặt vào trong một ô của bảng khác. Sau đây là một ví dụ đơn giản:

    <table>
    <tr>
        <td>this is the first cell of the outer table</td>
        <td>this is the second cell of the outer table,
            with the inner table embedded in it<br>
        <table>
            <tr>
            <td>this is the first cell of the inner table</td>
            <td>this is the second cell of the inner table</td>
            </tr>
        </table>
        </td>
    </tr>
    </table>

Vấn đề chủ yếu đối với các bảng lồng là những phiên bản cũ của Netscape Navigator sẽ trục trặc nếu bạn không đóng các phần tử  TR, TD, và TH một cách tường minh. Để tránh phiền phức, hãy viết đủ thẻ  </tr>, </td>, and </th>, dù rằng quy cách HTML không yêu cầu phải có chúng.Hơn nữa, các phiên bản cũ của Netscape Navigator còn gặp vấn đề với các bảng được ghép rất sâu (chảng hạn như lồng ở tầng thứ mười). Để tránh trục trặc, chỉ nên lồng bảng ở một vài tầng thôi. Bạn cũng có thể dùng các thuộc tính ROWSPANCOLSPAN để giảm thiểu việc lồng bảng.

Sau cùng, nhất thiết phải đảm bảo kiểm tra mã của bạn mỗi khi dùng bảng lồng.

Xem thêm

9.2. Làm cách nào sử dụng bảng để tạo cấu trúc cho các mẫu (form)?

Các mẫu nhỏ đôi khi được đặt trong một phần tử TD bên trong bảng. Cách này có thể hữu ích để chỉnh vị trí tương đối của mẫu so với nội dung khác, song không thể giusp chỉnh vị trí của từng phần tử trong mẫu với nhau. Để làm việc này, cả bảng phải nằm trong mẫu. Bạn không thể bắt đầu một mẫu với phần tử TH hoặc TD này mà lại kết thúc mẫu ở phần tử khác. Bạn không thể đặt mẫu bên trong bảng mà không đưa nó vào trong phần tử TH hoặc TD nào. Bạn có thể đặt bảng bên trong mẫu, rồi dùng bảng này để chỉnh vị trí các phần tử INPUT, TEXTAREA, SELECT, v.v. như trong ví dụ sau:

<FORM ACTION="[URL]">
   <TABLE BORDER="0">
      <TR>
         <TH>Account:</TH>
         <TD><INPUT TYPE="text" NAME="account"></TD>
      </TR>
      <TR>
         <TH>Password:</TH>
         <TD><INPUT TYPE="password" NAME="password"></TD>
      </TR>
      <TR>
         <TD> </TD>
         <TD><INPUT TYPE="submit" NAME="Log On"></TD>
      </TR>
   </TABLE>
</FORM>

9.3. Làm thế nào để căn giữa một bảng?

Trong mã lệnh HTML bạn viết, dùng

 

Trong CSS,dùng

div.center {
    text-align: center;
}

div.center table {
    margin-left: auto;
    margin-right: auto;
    text-align: left;
}

Xem thêm

9.4. Làm thế nào để căn phải (hoặc trái) một bảng?

Bạn có thể dùng <TABLE ALIGN="right"> để đẩy một bảng trôi về bên phải. (Dùng ALIGN="left" để trôi về bên trái.) Bất kì nội dung nào đi sau </TABLE> sẽ chạy quanh bảng. Hãy dùng <BR CLEAR="right"> hay <BR CLEAR="all"> để đánh dấu kết thúc chữ chạy quanh bảng, như trong ví dụ sau:

Bảng ở ví dụ này sẽ trôi về phía bên phải 
<table align="right">...</table>
Chữ này sẽ được dàn để lấp đầy khoảng trống bên tái (và nếu chữ đủ dài, thì cả phía dưới) của bảng.
<br clear="right">

Dòng chữ này sẽ xuất hiện bên dưới bảng, ngay cả khi còn chỗ bên trái của nó.

9.5. Liệu tôi có dùng được gía trị phần trăm cho <TD WIDTH=…>?

Các quy định HTML 3.2 và HTML 4.0 chỉ cho phép dùng gía trị số nguyên (biểu thị số điểm ảnh) làm thuộc tính WIDTH của phần tử TD. Tuy nhiên, HTML 4.0 DTD cho phép dùng số phần trăm (và các gía trị không nguyên khác), bởi vậy trình thẩm định HTML sẽ không phàn nàn về <TD WIDTH="xx%">.

Cần lưu ý rằng Netscape và các trình duyệt của Microsoft sẽ hiểu khác nhau về gía trị phần trăm cho <TD WIDTH=…>. Song cách hiểu của chúng (và của những trình duyệt khác hiểu được bảng) thì lại tình cờ giống nhau khi có thêm <TABLE WIDTH=”100%”>. Với trường hợp này, các gía trị phần trăm có thể được dùng tương đối an toàn, ngay cả khi chúng bị cấm bởi những quy tắc chung.

9.6. Tại sao <TABLE WIDTH="100%"> không tận dụng được hết bề rộng trình duyệt?

Các trình duyệt đồ họa đều chừa một khoảng trống giữa viền của diện tích hiển thị và phần nội dung.

Cũng lưu ý rằng Navigator luôn để chừa chỗ cho một thanh cuộn bên phải, song chỉ hiện thanh cuộn này khi tài liệu qúa dài và cần phải cuộn. Nếu tài liệu không cần phải cuộn thì nó sẽ hình thành một khoảng “lề” bên phải không bỏ đi được.

Xem thêm

9.7. Tại sao có khoảng trống bên trên và phía dưới bảng?

Điều này thường là do cú pháp HTML không hợp lệ. Cụ thể, nó thường là do những nội dung rời trong bảng (tức là phần nội dung không được đặt trong phần tử TD hay TH). Không có cách làm chuẩn nào để xử lý các nội dung rời bên trong một bảng. Một số trình duyệt hiển thị tất cả những nội dung rời phía trên hoặc dưới bảng. Khi nội dung rời này có chứa nhiều dấu ngắt dòng hoặc những đoạn văn trống, thì các trình duyệt sẽ hiển thị tất cả những chỗ bỏ trắng này ngay trên hoặc dưới bảng.

Giải pháp là đi sửa các lỗi cú pháp HTML. Tất cả nội dung bên trong một bảng phải nằm trong các phần tử TD hoặc TH.

9.8. Có vấn đề gì với việc dùng bảng để trình bày không?

Với các trình duyệt hiện tại, toàn bộ cả bảng phải được tải về và kích thước mọi thứ cần được biết đến trước khi hiển thị bảng. Như vậy sẽ làm việc hiển thị nội dung chậm lại, đặc biệt nếu bảng của bạn có chứa các hình mà không có thuộc tính HEIGHT hay WIDTH.

Nếu bất kì phần nội dung nào trong bảng của bạn qúa rộng để hiển thị lên vùng sẵn có, thì bảng tự dãn ra để vừa những nội dung qúa khổ. Phần còn lại của bảng sau đó sẽ tự điểu chỉnh để vừa cái bảng qúa khổ thay vì chỉ vừa khu vực hiển thị hiện có. Cách này có thể buộc độc gỉa phải dùng thanh trượt ngang để xem hết nội dung, hoặc làm cho các bản in bị cắt mất.

Với các độc gỉa mà màn hình máy tính hẹp hơn dự kiến của tác gỉa, thì các bảng có bề rộng cố định lại gặp những vấn đề giống như với bảng qúa khổ. Còn với độc gỉa có màn hình máy tính rộng hơn dự kiến thì các bảng bề rộng cố định lại tạo nên các lề rất rộng, phí mất nhiều diện tích hiển thị. Với các độc gỉa cần phông chữ lớn hơn, các bảng bề rộng cố định có thể khiến cho nội dung được hiển thị thành những dfong cụt lủn, mỗi dòng có vài chữ.

Nhiều trình duyệt rất nhạy với cú pháp sai khi có mặt các bảng. Việc viết đúng cú pháp rất quan trọng. Ngay cả đúng cú pháp đi nữa, các bảng lồng có thể còn không hiển thị đúng trên những phiên bản cũ của Netscape Navigator.

Một số trình duyệt bỏ qua các bảng, hoặc được cấu hình hóa để bỏ qua các bảng. Các trình duyệt này sẽ lờ đi bất kì cách bài trí nào bạn dùng với bảng.

Hơn nữa, các máy tìm kiếm bỏ qua bảng. Một số máy tìm kiếm dùng các chữ ở đầu văn bản để tóm tắt văn bản đó khi được xuất hiện trong kết qủa tìm kiếm, và một số trình duyệt chỉ đánh mục những thông tin ở n byte khởi đầu của văn bản. Khi bảng được dùng để bài trí, phần đầu cảu văn bản thường gồm rất nhiều đường link xuất hiện phía trên nội dung thực sự.

Nhiều phiên bản Navigator có vấn đề liên kết đến các neo được đặt tên khi chúng nằm trong một bảng có dùng thuộc tính ALIGN. Các trình duyệt này dường như gắn tên của neo được đặt tên với đầu bảng, thay vì là với nội dung được neo. Bạn có thể tránh được vấn đề này bằng cách không dùng thuộc tính ALIGN trong bảng.

Nếu sử dụng các bảng để bài trí, bạn vãn có thể giảm thiểu những vấn đề liên quan bằng cách viết mã (markup) cẩn thận. Hãy tránh đặt các hình rộng, các phần tử PRE với những dòng URL dài, hay các nội dung rộng khác bên trong bảng. Thay vì một bảng to cả trang, hãy dùng vài bảng độc lập nhau. Chẳng hạn, bạn có thể dùng một bảng để xếp đặt thanh điều hướng ở đầu/cuối trang web, và đặt nội dung chính bên ngoài bất kì bảng nào.

Xem thêm

Mục 10: Form (mẫu) HTML

10.1. Tôi dùng các form thế nào?

Cú pháp cơ bản của một form là:
<FORM ACTION="[URL]">...</FORM>

Khi form được gửi (submit), dữ liệu form được đưa đến URL chỉ định bởi thuộc tính ACTION. URL này cần tham chiếu đến một chương trình phía máy chủ (chẳng hạn CGI) để xử lý nội dung form. Bản thận form phải chứa

  • ít nhất là một nút gửi (tức là một phần tử <INPUT TYPE="submit" ...>),
  • các phần tử dữ liệu form (chẳng hạn <INPUT>, <TEXTAREA>, và <SELECT>) nếu cần, và
  • mã lệnh thêm (chẳng hạn nhận diện các phần tử dữ liệu, đưa chỉ đẫn) nếu cần.

Xem thêm

10.2. Làm thế nào để lấy dữ liệu form gửi vào email cho tôi?

Cách tin cậy duy nhất để xử lý các dữ liệu gửi form là bằng một chương trình phía máy chủ (như CGI). Để  gửi dữ liệu form đến chính email của bạn, cần phải dùng một chương trình phía máy chủ để xử lý việc gửi form và đưa dữ liệu tới địa chỉ email.

Một số nhà cung cấp dịch vụ web tạo ra các chương trình chuẩn hóa việc chuyển từ form đến email, dành cho khách hàng của họ. Hãy xem nhà cung cấp dịch vụ cho bạn có không.

Nếu bạn có thể cài đặt chương trình CGI lên máy chủ của riêng bạn, hãy xem câu trả lời cho câu hỏi trước để biết một danh sách các nguồn tham khảo gía trị.

Nếu không thể chạy chương trình CGI trên máy chủ của riêng, bạn có thể dùng dịch vụ form-đến-email được đăng tải trên web. Lưu ý rằng nhà cung cấp của một dịch vụ kiểu này sẽ có quyền truy cập đến bất cứ thông tin nào gửi qua dịch vụ.

Các form có dùng action="mailto:..." đều không đáng tin cậy. Theo quy định HTML, các ứng xử của form rõ ràng chưa được định nghĩa với các  URI dạng mailto (hay bất kì thứ gì khác URI dạng HTTP). Chúng có thể hoạt động một đằng với cấu hình phần mềm này, song cũng có thể hoạt động một nẻo với các cấu hình phần mềm khác, và có thể hoàn toàn hỏng với một số cấu hình phần mềm.

Xem thêm

10.3. Làm thế nào để dùng bảng tổ chức các form?

Các form nhỏ đôi khi được đặt bên trong một phần tử TD của một bảng. Điều này có thể giúp ích cho việc đặt form ở vị trí tương đối so với các nội dung khác, song chẳng giúp cho việc định vị các phần tử trong form với nhau.

Để đặt vị trí các phần tử trong form với nhau thì cả bảng phải nằm trong form. Bạn không thể bắt đầu một form bằng một phần tử TH hay TD và kết thúc form với một phần tử khác. Bạn không thể đặt cả form bên trong bảng mà không đưa nó vào trong một phần tử TH hay TD. Bạn có thể đặt bảng vào trong form, và sau đó dùng bảng để định vị INPUT, TEXTAREA, SELECT, và các phần tử khác liên quan đến form, như trong ví dụ sau.

<form action="[URL]">
   <table border="0">
      <tr>
         <th scope="row">
            <label for="account">Tài khoản:</label>
         </th>
         <td>
            <input type="text" name="account" id="account">
         </td>
      </tr>
      <tr>
         <th scope="row">
            <label for="password">Mật khẩu:</label>
         </th>
         <td>
            <input type="password" name="password" id="password">
         </td>
      </tr>
      <tr>
         <td> </td>
         <td><input type="submit" name="Log On"></td>
      </tr>
   </table>
</form>

10.4. Làm thế nào để xóa bỏ dấu trống thừa ra sau một thẻ </form>?

HTML không có cách nào điều khiển việc này. Tuy nhiên, bằng CSS, bạn chó thể đặt margin-bottom của form về 0. Chẳng hạn:

<form style="margin-bottom:0;" action=...>

Bạn cũng có thể dùng một CSS style sheet để ảnh hưởng đến tất cả các form trên một trang:

form { margin-bottom: 0 ; }

Xem thêm

10.5. Làm thế nào để tạo một form chỉ cần ấn ENTER để gửi?

Câu trả lời gọn là form chỉ được có một <INPUT TYPE=TEXT> và không có TEXTAREA, dù rằng nó có thể chứa những phần tử form khác như hộp chọn hoặc nút chọn.

Xem thêm

10.6. Làm thế nào để đặt focus [nhảy con trỏ đến] trường đầu tiên của form?

Bạn không thể làm điều này bằng HTML. Tuy nhiên, bạn có thể đặt một đoạn mã lệnh bên dưới form để đặt con trỏ đến trường phù hợp:

<form id="myform" name="myform" action=...>
    <input type="text" id="myinput" name="myinput" ...>
</form>

document.myform.myinput.focus();

Một cách làm tương tự dùng đến  <body onload=...> để đặt focus, nhưng một số trình duyệt dường như xử lý sự kiện ONLOAD trước khi toàn bộ văn bản (tức là phần có form) được tải.

10.7. Làm thế nào tạo được form với các nút theo ý thích?

Thay vì dùng một nút gửi thông thường (<input type="submit" ...>), bạn có thể dùng kiểu nút input có hình  (<input type="image" ...>). Loại nút này chỉ định một nút gửi có hình ảnh vốn hoạt động như một ánh xạ hình ảnh phía máy chủ.

Không giống như những nút gửi thường (vốn trả lại một cặp gía trị name=value), loại nút hình ảnh trả lại tọa độ x-y của vị trí nơi người dùng kích chuột trên ảnh. Trình duyệt sẽ trả lại các tọa độ x-y này dưới dạng một cặp tên.x=000 và tên.y=000.

Để tương thích với nhiều môi trường duyệt không có đồ họa, các thuộc tính VALUEALT cần được đặt cùng gía trị với thuộc tính NAME. Chẳng hạn:

<input type="image" name="Send" alt="Send" value="Send" src="send-button.gif">

Với nút reset, bạn có thể dùng <button type="reset" ...>, JavaScript, và/hoặc các style sheet, dù chẳng có cách nào trong số này luôn hoạt động thông suốt.

Xem thêm

10.8. Liệu tôi được phép có hai hay nhiều nút gửi trong cùng một form không?

Có. Đây là một phần của hỗ trợ HTML 2.0 Form (một số trình duyệt cũ thì không hỗ trợ, nhưng nay khả năng quán xuyến của các trình duyệt đều rất tốt).

Các nút gửi phải có một thuộc tính NAME. Thuộc tính tùy chọn VALUE có thể được dùng để quy định các dòng chữ khác nhau cho từng nút gửi.

Để xác định xem nút gửi nào đã được bấm, bạn cần dùng những gía trị riêng cho thuộc tính NAME và/hoặc VALUE. Các trình duyệt sẽ gửi đến server cặp name=value của nút gửi đã được bấm. Sau đây là một ví dụ:

 

<input type="submit" name="Tham gia" value="Tôi muốn tham gia bây giờ">

<input type="submit" name="Thông tin" value="Hãy gửi đầy đủ thông tin">

Lưu ý rằng nếu bạn đang dùng các nút gửi có hình ảnh, thì cũng cần phải đặt thuộc tính NAME riêng cho chúng. Ngoài ra, biểu hiện của trình duyệt có thể không thống nhất khi form được gửi mà không có nút gửi (chẳng hạn, bằng cách ấn ENTER).

Nếu bạn không chắc chắn rằng kết qủa là gì khi bạn gửi form, thì TipJar có một đoạn mã lệnh chuẩn mà bạn có thể dùng. Hãy viết đoạn lệnh sau chẳng hạn (với phương thức “post”):

<form method="post"
 action="http://www.tipjar.com/cgi-bin/test">

và rồi đi qua qúa trình gửi form. Máy chủ của TipJar sẽ giải mã dữ liệu nhập vào form và hiển thị kết qủa cho bạn.

Xem thêm

10.9. Liệu tôi có thể có nhiều hành động (action) trên cùng một form?

Không. Mỗi form chỉ được phép có đúng một hành động. Tuy nhiên, chương trình phía máy chủ (chẳng hạn, CGI) để xử lý việc gửi form của bạn lại có thể thực hiện bao nhiêu tác vụ cũng được (chẳng hạn cập nhật cơ sở dữ liệu, gửi email, ghi lại chuyển khoản) để phản hồi lại một việc gửi form.

10.10. Làm thế nào để tôi yêu cầu các trường được điền vào, hay được điền vào đúng?

Muốn vậy, hãy giao cho một chương trình phía máy chủ (chẳng hạn, CGI) chuyên xử lý việc gửi form nhiệm vụ gửi đi thông báo lỗi nếu trường đó không được điền vào đúng. Lý tưởng nhất là thông báo lỗi này nên kèo theo một bản sao của form ban đầu với những dữ liệu trước đó (điền chưa đủ hoặc chưa đúng) làm gía trị mặc định của các trường trong form. Module có tên Perl CGI.pm cho ta cơ chế rất hữu ích để trả lại form được điền dở cho người dùng.

Ngoài ra, bạn có thể dùng JavaScript trong thuộc tính ONSUBMIT của form để kiểm tra dữ liệu. Nếu bật hỗ trợ JavaScript thì hàm giữ sự kiện ONSUBMIT có thể báo cho người dùng biết vấn đề và trả lại gía trị false để ngăn không cho form được gửi.

Lưu ý rằng các chương trình phía máy chủ không nên dựa vào việc kiểm tra do mã lệnh phía máy khách thực hiện.

10.11. Tôi có thể ngăn việc một form được gửi lặp lại không?

Không. Chương trình phía máy chủ (chẳng hạn, CGI) chuyên xử lý việc gửi form phải xử lý việc gửi lặp một cách thuần thục.

Bạn có thể phát sinh một form bằng một chương trình phía máy chủ (chẳng hạn, CGI) để bổ sung một trường ẩn với một ID phiên duy nhất. Khi đó chương trình phiá máy chủ chuyên xử lý form có thể so sánh ID phiên này với một danh sách các ID phiên đã dùng trước đó. Nếu ID phiên bị trùng lặp (trước đó đã dùng) thì có thể thực hiện hành động thích hợp (chẳng hạn từ chối việc gửi hoặc cập nhật các thông tin đã gửi trước đó).

Như vậy, rốt cục là chương trình phía máy chủ của bạn phải đủ thông minh để xử lý dữ liệu được gửi lại. Nhưng bạn có thể tránh nhận dữ liệu gửi lại bằng cách không cho hết hạn trang xác nhận với việc gửi form. Vì bạn muốn cho hết hạn nhanh chóng những trang chứa dữ liệu tạm, nên có lẽ bạn muốn tránh việc đặt dữ liệu tạm lên trang xác nhận. Dù vậy, bạn có thể cho một đường link đến truy vấn cơ sở dữ liệu cho thông tin tạm này.

10.12. Làm thế nào tôi cho phép tải file trên trang web của mình?

Những thứ sau cần thiết cho việc tải lên bằng web:

  • Một máy chủ HTTP chấp nhận upload.
  • Quyền truy cập đến /cgi-bin/ để đặt mã lệnh nhận. Người ta đã viết sẵn những đoạn mã lệnh CGI để upload file.
  • Một form thực hiện kiểu như sau:
    <form method="post" enctype="multipart/form-data" action="fup.cgi">
    File cần upload: <input type=file name=upfile><br>
    Lưu ý về file: <input type=text name=note><br>
    <input type=submit value=Ấn> để tải file lên!
    </form>

Không phải trình duyệt nào cũng hỗ trợ tải file lên bằng form, bởi vậy khi cần thì bạn phải dùng cách khác.

Module Perl có tên CGI.pm hỗ trợ tải file lên. Những phiên bản mới nhất của thư viện cgi-lib.pl cũng hỗ trợ tải file lên. Hơn nữa, nếu bạn muốn tải file lên kết hợp với chuyển form-thành-email, thì gói Perl có tên MIME::Lite có hỗ trợ gửi kèm các file trong thư.

Xem thêm

10.13. Làm thế nào để sử dụng form cho các menu điều hướng?

Không có cách nào làm điều này chỉ bằng HTML; cần có cơ chế khác để xử lý form. Việc xử lý bằng JavaScript chỉ có hiệu lực với độc gỉa dùng trình duyệt bật JavaScript. CGI và những cách xử lý phía máy chủ khác thì đáng tin cậy với người đọc, nhưng máy tìm kiếm sẽ gặp vấn đề khi di chuyển trong các form.

Xem thêm

  • Jukka Korpela, bài Navigational pulldown menus in HTML (giải thích cách tạo menu kéo xuống, cũng như một số cách khác hay hơn để di chuyển trên web)

Mục 12: Khung HTML

11.1. Làm thế nào để tạo ra khung? Một bộ khung (frameset) là gì?

Các khung cho phép tác gỉa chia cửa sổ trình duyệt thành nhiều vùng (chữ nhật) nhỏ hơn. Nhiều tài liệu có thể được hiển thị trong cùng một cửa sổ, mỗi tài liệu trong một khung riêng. Các trình duyệt đồ họa cho phép trượt từng khung và không lệ thuộc vào các khung khác; và đường link có thể cập nhật được tài liệu trong mỗi khung mà không ảnh hưởng đến khung khác.

Bạn không thể đơn giản là “thêm khung” vào tài liệu có sẵn mà được. Mà trước hết, cần tạo ra một tài liệu bộ khung trong đó định nghĩa một tổ hợp cụ thể gồm các khung, sau đó hiển thị các tài liệu nội dung bên trong các khung đó. Những tài liệu bộ khung này cũng cần bao gồm nội dung thay thế khi không hiện khung; nội dung này đặt trong phần tử NOFRAMES.

Mô hình các khung HTML 4 có khiếm khuyết thiết kế gây vấn đề cho người dùng web khi thao tác với nó. Các khung chỉ nên được sử dụng cẩn thận hết mức.

Xem thêm

  • WDG, bài Guide to Frames (hướng dẫn cách sử dụng phù hợp cho các khung và một mô tả cú pháp HTML liên quan).

11.2. Làm thế nào để tạo một đường link hoặc form trong khung này nhưng cập nhật khung khác?

Trong tài liệu bộ khung (tài liệu HTML có chứa các thẻ <frameset> <frame>), hãy đảm bảo chắc rằng từng khung thành phần có thuộc tính NAME. Ví dụ sau tạo nên một khung trên cao có tên “navigation” và khung dưới nhất có tên “content”:

<frameset rows="*,3*">
    <frame name="navigation" src="navigation.html">
    <frame name="content" src="content.html">
    <noframes><body>
        <!-- Alternative non-framed version -->
    </body></noframes>
</frameset>

Khi đó, trong tài liệu có đường link, dùng thuộc tính TARGET để chỉ định khung nào cần được dùng để hiển thị đường link. (Gía trị thuộc tính TARGET phải khớp với gía trị thuộc tính NAME trong khung mục tiêu.) Chẳng hạn:

<a target="content" href=...>

Để hướng mục tiêu đến gửi form, hãy dùng thuộc tính TARGET của phần tử FORM như thế này:

<form target="content" action=...>

Lưu ý rằng khi các form được hoàn toàn xử lý bởi JavaScript, khung mục tiêu phải được chỉ định trong JavaScript. Gía trị của thuộc tính TARGET không liên quan ở đây.

Thông thường, khung mục tiêu mặc định là khung hiện thời (“_self”). Để thay đổi mục tiêu mặc định cho mọi link/form trên trang web, hãy dùng thuộc tính TARGET của phần tử BASE, như thế này:

<base target="content">

11.3. Tại sao các link của tôi lại mở ra cửa sổ mới thay vì cập nhật khung sẵn có?

Nếu như không tồn tại sẵn khung nào với tên gọi mà bạn dùng cho thuộc tính TARGET, thì một cửa sổ trình duyệt mới sẽ được mở ra, và cửa sổ này được gán tên mà bạn đã dùng. Hơn nữa, TARGET="_blank" sẽ mở ra một cửa sổ trình duyệt mới, trống trơn.

Trong HTML 4, thuộc tính TARGET không phân biệt chữ hoa/thường, do vậy abcABC đều chỉ đến cùng một khung/cửa sổ, cũng như _top_TOP đều có cùng ý nghĩa. Song đa số các trình duyệt đều coi gía trị thuộc tính TARGET phải được phân biệt chữ hoa/thường và không nhận ra ABC như là abc, hay _TOP có ý nghĩa đặc biệt như _top.

Hơn nữa, một số trình duyệt bao gồm một tính năng bảo mật để tránh việc tài liệu bị tấn công bởi các bộ khung tạo bởi các bên thứ ba. Trong những trình duyệt này, nếu một đường link của tài liệu hướng đến một khung định nghĩa bởi tài liệu bộ khung được đặt khác server với bản thân tài liệu, thì đường link sẽ mở ra một cửa sổ mới.

11.4. Làm thế nào để cập nhật nhiều khung lập tức?

Có hai cách cập nhật nhiều khung chỉ với một đường link: cách dựa trên HTML thì kết nối đến một tài liệu bộ khung mới trong đó quy định tổ hợp các khung. Còn cách dùng JavaScript thì sử dụng thuộc tính onClick của link để cập nhật (các) khung phụ thêm.

Cách làm theo HTML có thể kết nối đến một tài liệu bộ khung mới bằng thuộc tính TARGET=”_top” (thay thế toàn bộ khung). Tuy  nhiên, có một cách làm khác nếu như các khung cần cập nhật là một phần của bộ khung lồng ghép. Trong tài liệu bộ khung ban đầu, hãy dùng một tài liệu bộ khung thứ hai để định nghĩa bộ khung được lồng. Chẳng hạn:

<frameset cols="*,3*">
    <frame src="contents.html" name="Contents">
    <frame src="frameset2.html" name="Display">
    <noframes><body>
        <!-- Alternative non-framed version -->
    </body></noframes>
</frameset>

Bây giờ một đường link có thể dùng thuộc tính TARGET=”Display” để đồng thời thay thế tất cả các khung định nghĩa bởi tài liệu frameset2.html.

Cách làm JavaScript thì dùng thuộc tính onClick của đường link để thực hiện cập nhật thứ cấp. Chẳng hạn:

<a href="URL1" target="Frame1" onClick="top.Frame2.location='URL2';">Update frames</a>

Link này sẽ cập nhật Frame1 bằng URL1 một cách bình thường. Nếu trình duyệt của độc gỉa hỗ trợ JavaScript (và được bật lên), thì Frame2 cũng sẽ được cập nhật (bằng URL2).

11.5. Làm thế nào để thoát khỏi một bộ khung?

Nếu bạn là tác gỉa, thì điều này thật dễ. Bạn chỉ cần thêm thuộc tính TARGET đến đường link để đưa người đọc đến tài liệu ‘bên ngoài’ theo dự kiến. Hãy cho nó gía trị là _top.

Trong nhiều trình duyệt hiện nay, không thể hiển thị một khung trong toàn cửa sổ, hay ít nhất là điều này không dễ dàng. Độc gỉa cần phải copy URL của khung cần xem và tự tay yêu cầu đến URL đó.

Theo tôi, tác gỉa nào muốn cho độc gỉa tùy chọn này, thì có thể thêm một link đến tài liệu bản thân trong tài liệu đó, với thuộc tính TARGET đặt bằng _top, nhờ vậy tài liệu sẽ được phóng to toàn cửa sổ nếu độc gỉa theo link đó.

11.6. Làm thế nào để chắc rằng các tài liệu được đóng khung sẽ hiển thị bên trong bộ khung của chúng?

Khi các tài liệu con của một bộ khung được truy cập trực tiếp, thì chúng sẽ xuất hiện mà không phụ thuộc bối cảnh của bộ khung bao lấy nó.

Nếu trình duyệt của độc gỉa có bật hỗ trợ JavaScript thì đoạn mã lệnh sau đây sẽ hồi phục bộ khung:

if (parent.location.href == self.location.href) {
    if (window.location.href.replace)
        window.location.replace('frameset.html');
    else
        // sẽ gây ra vấn đề với nút quay trở lại, nhưng cũng hoạt động được 
        window.location.href = 'frameset.html';
}

Một cách tổng quát hơn là dùng đường link “hồi phục khung”:

<A HREF="frameset.html" TARGET="_top">Hồi phục khung</A>

Lưu ý rằng theo bất kì cách nào trong số đó, bạn đều phải có một tài liệu bộ khung riêng cho mỗi tài liệu nội dung. Nếu bạn kết nối đến tài liệu bộ khung mặc định, thì độc gỉa bạn sẽ nhận được tài liệu nội dung mặc định chứ không phải tài liệu nội dung mà họ cố gắng truy cập. Các tài liệu bộ khung cần được phát sinh một cách tự động, để tránh sự nhàm chán và sai sót có thể trong qúa trình tạo thủ công.

Lưu ý ràng bạn có thể khắc phục vấn đề với đánh dấu các trạng thái bằng việc kết nối đến những tài liệu bộ khung riêng bằng TARGET="_top", thay vì kết nối đến từng tài liệu nội dung riêng lẻ.

11.7. Có cách nào phòng ngừa việc đóng khung không?

“Bị đóng khung” là từ để chỉ việc tài liệu của bạn được hiển thị bên trong bộ khung của ai đó mà họ không xin phép bạn. Điều này có thể xảy ra tình cờ (tác gỉa bộ khung quên không dùng TARGET="_top" khi kết nối đến tài liệu của bạn) hoặc cố ý (tác gỉa bộ khung muốn hiển thị nội dung của bạn bằng chính công cụ định hướng của họ).

Để tránh “bị đóng khung” những tài liệu của người khác, bạn phải thêm TARGET="_top" đến tất cả các đường link dẫn đến những tài liệu bên ngoài phạm vi mà bạn dự liệu.

Không may là chẳng có cách nào đáng tin cậy để chỉ định rằng một tài liệu cụ thể cần được hiển thị trên toàn bộ cửa sổ trình duyệt thay vì trong khung hiện thời. Một cách khắc phục là dùng <BASE TARGET="_top"> trong tài liệu, nhưng cách này mới chỉ định khung mục tiêu mặc định cho các link trong tài liệu hiện thời, chứ không phải cho bản thân tài liệu đang xét.

Nếu trình duyệt của độc gỉa đã bật JavaScript, thì đoạn mã sau sẽ tự động bỏ tất cả những bộ khung hiện có:

if (top.frames.length!=0) {
    if (window.location.href.replace)
        top.location.replace(self.location.href);
    else
        top.location.href=self.document.href;
}

Một mã lệnh khác là

function breakOut() {
    if (self != top)
        window.open("my URL","_top","");
}
</HEAD>
<BODY onLoad="breakOut()">

11.8. Làm thế nào để chỉ định một tổ hợp cụ thể các khung thay vì chọn văn bản định sẵn?

Không may là điều này bất khả thi. Khi lướt qua những trang web có khung thì URL vẫn sẽ không đổi trong lúc nội dung văn bản trong từng khung thay đổi. Bởi vậy không có cách nào chỉ thị được tổ hợp các văn bản hợp thành trạng thái hiện thời của bộ khung.

Tác gỉa có thể cung cấp nhiều văn bản trong bộ khung, mỗi cái cho từng tổ hợp của nội dung khung. Những văn bản đặt khung này có thể được phát sinh một cách tự động, có thể là được tạo thành “tại trận” bằng một chương trình CGI. Thay vì kết nối đến từng văn bản nội dung đơn lẻ, tác gỉa có thể kết nối đến những văn bản đóng khung riêng rẽ này bằng cách dùng TARGET="_top". Như vậy, URL của văn bản đóng khung hiện thời sẽ luôn chỉ định tổ hợp của các khung được hiển thị, và điều này cho phép các đường kết nối, đánh dấu trang (bookmark), v.v. hoạt động bình thường.

11.9. Làm thế nào để xóa bỏ các viền xung quan khung?

Việc xóa bỏ viền xung quan khung bao gồm cả 2 việc: không vẽ các viền này và loại bỏ khoảng cách giữa các khung. Cách được hỗ trợ phổ biến nhất để hiển thị các khung không viền là <FRAMESET ... BORDER=0 FRAMEBORDER=0 FRAMESPACING=0>.

Lưu ý rằng những thuộc tính này đều là của riêng chứ không phải thuộc về quy định HTML 4.01. (HTML 4.01 có định nghĩa thuộc tính FRAMEBORDER cho phần tử FRAME, nhưng không phải cho phần tử FRAMESET.) Hơn nữa, việc loại bỏ viền quanh khung làm khó việc thu phóng khung, vì chính cái viền này cũng được dùng trong hầu hết các giao diện đồ họa để thay đổi kích thước của khung này.

11.10. Làm thế nào để tạo một khung có thanh trượt đứng nhưng không có thanh trượt ngang?

Cách duy nhất để có được một cái khung với thanh cuộn đứng mà không có thanh cuộn ngang là định nghĩa khung với SCROLLING="auto" (gía trị mặc định), và đặt nội dung phù hợp không cần phải cuộn ngang. Không có cách nào để quy định một cái khung có một thanh cuộn này mà không có thanh cuộn kia. Viết SCROLLING="yes" sẽ buộc có cả hai thanh cuộn theo hai phương (kể cả khi có cần chúng hay không), và viết SCROLLING="no" sẽ tắt hết thanh cuộn (kể cả khi cần thanh cuộn để xem hết nội dung trong khung). Không còn gía trị nào khác cho thuộc tính SCROLLING.

11.11. Làm thế nào để thay đổi tiêu đề của văn bản đóng khung?

Tiêu đề hiển thị chính là tiêu đề của văn bản trong bộ khung thay vì các tiêu đề của bất kì trang nào bên trong các khung. Để thay đổi tiêu đề được hiển thị, hãy kết nối đến một văn bản đóng khung khác bằng cách viết TARGET="_top" (thay thế hoàn toàn bộ khung).

11.12. Tại sao các khung tôi lập nên không đúng kích thước đã quy định?

Các phiên bản trước của Netscape Navigator dường như  quy đổi kích thước khung theo pixel sang phần trăm làm tròn, và dùng các kích thước phần trăm đó để sắp đặt các khung. Do vậy, các khung với kích thước theo pixel sẽ được hiển thị với kích thước hơi khác chút so với được quy định trong văn bản đặt khung. Sai số làm tròn sẽ khác nhau tùy theo kích thước đúng của cửa sổ trình duyệt.

Hơn nữa, Navigator dường như lưu trữ các kích thước phần trăm bên trong chương trình, thay vì các kích thước tính theo pixel. Bởi vậy khi cửa sổ bị thay đổi kích thước, các khung được vẽ lại dựa trên kích thước cửa sổ mới và các kích thước theo phần trăm cũ.

Không có cách nào ngăn điều này. Để thích ứng với nó, bạn cần thiết kế website của mình để phù hợp với những thay đổi trong kích thước khung. Cũng có một tình huống khác, trong đó nên thích ứng với các thay đổi trong cách trình bày của trình duyệt.

11.13. Có vấn đề gì khi dùng các khung?

Vấn đề căn bản với việc thiết kế khung là các bộ khung sẽ tạo ra những trạng thái trên trình duyệt; các trạng thái này không thể gắn địa chỉ được. Một khi bất kì khung nào trong bộ khung thay đổi nội dung mặc định của nó, thì không còn cách nào đặt địa chỉ cho trạng thái bộ khung hiện thời. Rất khó để đánh dấu – và không thể kết nối hoặc đánh chỉ mục – cho trạng thái bộ khung như vậy.

Không thể tham chiếu đến một trạng thái bội khung trong phương tiện khác. Khi các tài liệu con trong trạng thái bộ khung như vậy được trực tiếp truy cập, chúng sẽ xuất hiện mà không có bối cảnh của bội khung bao quanh. Các tính năng trình duyệt cơ bản (như in ấn, di chuyển tiến/lui trong lịch sử trình duyệt) sẽ biểu hiện rất khác nhau với các bội khung. Mặt khác, trình duyệt sẽ không thể nhận biết được khung nào cần được theo dõi (focus), điều này ảnh hưởng đến việc lăn trượt, tìm kiếm và dùng phím tắt nói chung.

Hơn nữa, các khung đều chú trọng vào hình thức bố trí thay vì cấu trúc thông tin, và nhiều tác gỉa của website đóng khung thì lờ đi không cung cấp thông tin hữu ích trong phần tử NOFRAMES. Cả hai điều này gây ra vấn đề truy cập với các trình duyệt mà tác gỉa có thể không lường đến, và đối với các máy tìm kiếm.

Xem thêm

11.14. Các máy tìm kiếm có ghét các khung không?

Máy tìm kiếm có thể liên kết trực tiếp đến những văn bản có nội dung đóng khung, nhưng chúng không thể kết nối đến tổ hợp các khung mà văn bản đó được thiết kế. Đây là kết qủa của một khiếm khuyết cơ bản khi khung được thiết kế.

Các máy tìm kiếm cố gắng cung cấp cho người dùng những đường liên kết tới văn bản hữu ích. Nhiều văn bản đóng khung rất khó sử dụng khi được truy cập trực tiếp (bên ngoài bộ khung định sẵn cho văn bản đó), bởi vậy nếu máy tìm kiếm có đưa link đến chúng thì cũng chẳng có ích gì nhiều. Bời vậy, nhiều máy tìm kiếm hoàn toàn bỏ qua các khung và thay vào đó là định chỉ mục (index) cho những văn bản (không đóng khung) có ích hơn.

Các máy tìm kiếm sẽ định chỉ mục cho nội dung <NOFRAMES> của bạn, và mọi nội dung nào truy cập được qua nội dung <NOFRAMES> của bạn. Những nội dung đó sẽ có ích khi được truy cập trực tiếp từ một đường kết nối máy tìm kiếm.

Xem thêm

Bình luận về bài viết này

Filed under Tin học, web

Hỏi-đáp dành cho tác giả web (phần 1)

Tài liệu này trả lời những câu hỏi thường đặt ra bởi các tác giả biên tập web. Dù chú trọng về những câu hỏi liên quan đến HTML, bản hỏi-đáp này cũng trả lời một số câu hỏi liên quan đến CSS, HTTP, JavaScript, cấu hình máy chủ, v.v.

Tài liệu này được bảo trì bởi Darin McGrew <darin@htmlhelp.com> từ nhóm Web Design Group, và được đăng thường xuyên trên nhóm tin tức comp.infosystems.www.authoring.html. Nó được cập nhật lần cuối vào 26/4/2007.

Mục lục vắn tắt

  1. Mở đầu
  2. Các tài liệu khác
  3. Khởi động
  4. Xuất bản web
  5. Thiết kế web
  6. Siêu liên kết
  7. Hình ảnh
  8. Các hiệu ứng trình chiếu
  9. Bảng HTML
  10. Biểu mẫu HTML
  11. Khung HTML

Mục lục đầy đủ

  1. Mở đầu
    1. Bản quyền và từ chối trách nhiệm
    2. Phiên bản mới nhất của tài liệu này ở đâu?
    3. Làm thế nào để đóng góp vào tài liệu này?
    4. Tôi có thể viết email hỏi tác gỉa tài liệu không?
    5. Ghi nhận công trạng
  2. Những tài liệu khác
    1. Tôi có thể tìm học WWW ở đâu?
    2. Tôi có thể tìm học HTML ở đâu?
    3. Tôi có thể tìm học CSS ở đâu?
    4. Tôi có thể tìm học SGML ở đâu?
    5. Tôi có thể tìm học WWW XML (XSL) ở đâu?
    6. Tôi có thể tìm học XHTML ở đâu?
    7. Tôi có thể tìm học SSI (“SHTML”) ở đâu?
    8. Tôi có thể tìm học CGI ở đâu?
    9. Tôi có thể tìm học PHP ở đâu?
    10. Tôi có thể tìm học JavaScript (LiveScript, JScript, ECMAScript, DOM) ở đâu?
  3. Khởi động
    1. Mọi người dùng gì để viết HTML?
    2. Làm thế nào để hiện các ví dụ mã HTML mà chúng không bị hiểu thành phần nội dung văn bản?
    3. Làm thế nào để có được các kí tự đặc biệt trong bản HTML của tôi?
    4. Có nên đặt các ngoặc tròn quan những gía trị thuộc tính hay không?
    5. Làm thế nào để thêm chú thích vào trong bản HTML?
    6. Làm thế nào để tránh dùng nguyên cả URL?
    7. Có nên kết thúc URL đã viết bằng một dấu gạch chéo?
    8. Làm thế nào để kiểm tra lỗi?
    9. Một DOCTYPE là gì? Tôi sẽ sử dụng cái nào?
  4. Xuất  bản Web
    1. Có thể đặt những trang web mới viết ở đâu?
    2. Làm thế nào để lấy một tên miền cho riêng mình?
    3. Làm thế nào để chặn thông tin quảng cáo từ dịch vụ hosting?
    4. Tôi có thể công bố web site của mình ở đâu?
    5. Có cách nào để trang web được đặt danh mục tốt hơn bởi máy tìm kiếm không?
    6. Làm thế nào để tôi ngăn không cho web site của tôi bị đặt danh mục bởi các máy tìm kiếm?
    7. Làm thế nào để chuyển hướng bạn đọc sang trang khác?
    8. Làm thế nào để bảo vệ web site của tôi bằng mật khẩu?
    9. Làm thế nào để tôi không cho trang web của mình khỏi bị lưu cache?
    10. Làm thế nào để vô hiệu hóa tùy chọn kích chuột phải trình duyệt? Làm thế nào để bảo vệ mã nguồn, hình ảnh v.v. của tôi khỏi bị sao chép?
    11. Làm thế nào để ẩn giấu đường URL của tôi?
    12. Làm thế nào để phát hiện xem trình duyệt nào đang được sử dụng?
    13. Làm thế nào để lấy được các địa chỉ email của khách xem trang?
    14. Tại sao thông điệp 404 Not Found mà tôi quy định lại không hiển thị được?
  5. Thiết kế Web
    1. Làm thế nào để gói trọn 1 file trong file khác?
    2. Làm thế nào để chạy một chương trình trên trang web của tôi?
    3. Tôi nên dùng cái gì, &entityname; hay &#number; ?
    4. Tôi nên viết các thẻ bằng chữ in hay chữ thường?
    5. Tôi nên viết trang web với kích cỡ màn hình nào?
    6. Tại sao trang web tôi viết lại hiển thị bình thường trong trình duyệt này nhưng không đúng hoặc không hiển thị trong trình duyệt khác?
    7. Tại sao trình duyệt lại hiển thị mã nguồn HTML tôi viết?
    8. Làm thế nào để cố định được URL hiển thị trên trình duyệt của bạn đọc?
    9. Làm thế nào để đặt đường link dọc theo lề trái của trang?
    10. Làm thế nào để chỉ định các màu?
    11. Làm thế nào để thay đổi màu của một số chữ?
    12. Làm thế nào để chỉ định màu thanh trượt?
    13. Làm thế nào để chỉ định các font trong trang web của tôi?
  6. Siêu liên kết
    1. Làm thế nào để tạo một liên kết?
    2. Làm thế nào để liên kết đến một chỗ giữa văn bản HTML?
    3. Làm thế nào để tạo một kết nối mở ra một cửa sổ mới?
    4. Làm thế nào để tạo một kết nối mở ra một cửa sổ mới có kích thước cụ thể?
    5. Làm thế nào để cho phép mọi người tải về một file từ trang web của tôi?
    6. Làm thế nào để bắt buộc trình duyệt tải về một file? Làm thế nào để buộc trình duyệt hiển thị/phát nhạc một file? Làm thế nào để buộc phải mở file bằng một chương trình phần mềm cụ thể?
    7. Làm thế nào để tạo ra một nút có vai trò như một đường kết nối?
    8. Làm thế nào để tạo ra một nút quay trở lại trên trang web của tôi?
    9. Làm thế nào để tạo ra nút tự động đánh dấu trang trên website của tôi?
    10. Làm thế nào để tạo nên một nút để in trang web của tôi?
    11. Làm thế nào để tạo ra một nút để đóng cửa sổ?
    12. Làm thế nào để tạo ra một đường link để gửi email cho tôi?
    13. Làm thế nào để chỉ định một chủ đề cho đường link gửi email?
    14. Làm thế nào để ẩn gạch chân trên đường link?
    15. Làm thế nào để có 2 bộ đường link với màu khác nhau?
    16. Làm thế nào để làm cho đường link thay đổi khi hươ con trỏ chuột qua chúng?
    17. Tại sao các đường link của tôi lại ra sai hay không nạp?
    18. Tại sao đường link của tôi ở trình duyệt này thì chạy được nhưng trình duyệt khác thì không?
    19. Tại sao đường link của tôi đến một file … lại tải về một đống kí tự?

Mục 1: Mở đầu

1.1. Bản quyền và từ chối trách nhiệm

Copyright © 1996-2007 by the Web Design Group. Tài liệu này có thể được phân phối chỉ phải tuân theo các điều khoản quy định trong giấy phép Open Publication License, phiên bản 1.0 hay mới hơn (bản mới nhất hiện có ở http://www.opencontent.org/openpub/).

Thông tin này được cung cấp với ý tốt cùng hi vọng rằng nó có ích, song không đảm bảo hoàn toàn chính xác, được cập nhật hay thích hợp cho mục tiêu cụ thể bất kì. Tác giả không chịu trách nhiệm pháp lý về bản thân thông tin trong tài liệu hay những hoạt động sử dụng gắn với nó.

1.2. Phiên bản mới nhất của tài liệu này ở đâu?

Trang chủ chính thức của tài liệu này trên Web là:

Một bản dịch tiếng Hà Lan của tài liệu này có ở:

Một bản dịch tiếng Pháp của tài liệu này có ở:

LƯU Ý: Nếu bạn muốn chép bản FAQ này lên website của bạn thuộc máy chủ mà mọi người xem được, hãy đảm bảo để nó được cập nhật.

Các nguồn khác được biết đến bao gồm:

1.3. Làm thế nào để đóng góp vào nội dung tài liệu?

Nếu bạn muốn đóng góp  nội dung cho bản hỏi đáp này, hãy gửi email tới <darin@htmlhelp.com>. Tất cả những đóng góp sẽ được liệt kê trong mục công trạng.

1.4. Tôi có thể gửi câu hỏi qua email đến tác giả không?

Đừng gửi tôi các câu hỏi qua email. Hãy đăng những câu hỏi lên một diễn đàn công cộng thích hợp, ở đó họ sẽ đọc những câu hỏi này (và có thể sẽ trả lời/thảo luận), có nhiều người còn hiểu biết sâu hơn tôi. Hãy nghĩ kĩ trước khi đăng câu hỏi; bạn sẽ nhận được câu trả lời hữu ích hơn nếu đăng được câu hỏi rõ ràng, đầy đủ.

Nếu bạn nghĩ có điều trong tài liệu này cần được làm rõ, hoặc nếu bạn muốn đề xuất một câu trả lời gọn gàng, hay cho một câu hỏi thường gặp mà vẫn chưa có trong tài liệu này, thì đừng ngại gửi tôi email.

1.5. Công trạng

Tất cả những thông tin có trong bản hỏi đáp này ban đầu được biên soạn bởi nhóm Web Design Group, chủ yếu là Arnoud “Galactus” Engelfriet, John Pozadzides, và Darin McGrew. Bản dịch tiếng Hà Lan của tài liệu này được Rijk van Geijtenbeek chuẩn bị. Bản dịch tiếng Pháp của tài liệu này được Cédrik Rousseau chuẩn bị.

Những thông tin thêm được cung cấp bởi Boris Ammerlaan, Martin Atkins, Lori Atwater, Alex Bell, Robert Breeser, Stan Brown, Roger  Carbol, Alex Chapman, Jim Dabell, Warden Dave, Curtis Dyer, Jan Roland Eriksson, Jon Erlandson, Mark Evans, Peter Evans, Joe Faulds, Vladimir P. Filipovic, Alan Flavell, Peter Flynn, Phillip Freck, Rijk van Geijtenbeek, Lucie Gelinas, Bjoern Hoehrmann, Tina Marie Holmboe,  Cliff Howard, Bruce Huntington, Thomas Jespersen, Peter Jones, Nick Kew, Jukka Korpela, Simon Lee, Jim Ley, Nick Lilavois, Kelly Martin, Neal McBurnett, Glen McDonald, Dan McGarry, Brendan Murray, Ken O’Brien, Stephen Poley, Timothy Prodin, Steve Pugh, Liam Quinn, Colin Reynolds, Kai Schätzl, Randal L. Schwartz, Doug Sheppard, Sue Sims, Henri Sivonen, Toby Speight, Warren Steel, John Stockton, Ian Storms, Gérard Talbot, Peter Thomson, Daniel Tobias, Frederiek van Beckum, Diane Wilson, và tất nhiên là những người khác tôi quên không nhắc đến.

Cám ơn tất cả các bạn! Những bình luận, phê bình và đề xuất của các bạn đã góp phần đáng kể nâng cao chất lượng của bản hỏi đáp này.

Mục 2: Những tài liệu khác

2.1. Tôi có thể học về WWW ở đâu?

World Wide Web là “thế giới của thông tin truy cập được qua mạng (có sẵn qua máy tính của bạn, điện thoại, tivi hay tủ lạnh được nối mạng).” World Wide Web khởi đầu dưới dạng một dự án thông tin nối mạng tại CERN.

Xem thêm

2.2. Tôi có thể học HTML ở đâu?

HyperText Markup Language (HTML, ngôn ngữ đánh dấu siêu văn bản) là một ngôn ngữ đánh dấu đơn giản để tạo ra các “siêu” văn bản  không phụ thuộc nền tảng hệ thống trên mạng World Wide Web. Đa số các siêu văn bản trên mạng đều được viết bằng HTML.

Bản đề xuất mới nhất của W3C là XHTML 1.0, vốn là một bản viết lại HTML 4.01 dưới dạng ứng dụng XML. HTML 4.01 là bản cập nhật với một chút chỉnh sửa HTML 4.0. HTML 4 mở rộng thêm HTML 3.2 về khả năng hỗ trợ các khung (frame), quốc tế hóa (cho phép dùng nhiều ngôn ngữ), các tờ phong cách (style sheet), các bảng (table) nâng cao, cùng nhiều thứ nữa. Những đánh dấu mới được giới thiệu trong HTML 4 không được hỗ trợ tốt bởi các trình duyệt thời bấy giờ [2007] nhưng đa phần đều có thể sử dụng được trong những trình duyệt không hỗ trợ.

Xem thêm

2.3. Tôi có thể học CSS ở đâu?

Cascading Style Sheet là một cơ chế dựa theo chuẩn để định hướng phong cách trình chiếu (như font chữ, màu sắc, bố cục) của các văn bản HTML. CSS rất linh hoạt và chạy được trên nhiều nền tảng hệ thống, và được thiết kế để duy trì tính truy cập được vào nội dung cấu trúc của văn bản (ngay cả khi toàn bộ hoặc một phần mẫu stlye sheet của tác gỉa bị bỏ qua không dùng). Một mẫu style có thể được dùng bởi nhiều văn bản để định hướng một phong cách thống nhất; cách này hiệu qủa hơn dùng đi dùng lại các định dạng markup riêng cho từng văn bản.

Xem thêm

2.4. Tôi có thể học SGML ở đâu?

Standard Generalized Markup Language là một ngôn ngữ dùng để định nghĩa cú pháp của các ngôn ngữ đánh dấu. HTML là một ứng dụng SGML (nghĩa là một ngôn ngữ đánh dấu được định nghĩa trong SGML).

Xem thêm

2.5. Tôi có thể học XML (XSL) ở đâu?

Extensible Markup Language là một ngôn ngữ khác được dùng để định nghĩa cú pháp của các ngôn ngữ đánh dấu. XML là một tập con của SGML, và được thiết kế để biểu thị các dữ liệu cấu trúc tùy ý dưới dạng chữ. XSL là một ngôn ngữ stylesheet để đặt phong cách cho các văn bản XML.

Xem thêm

2.6. Tôi có thể học XHTML ở đâu?

Extensible HyperText Markup Language thực hiện tái lập, hình thành những tập hợp con, và mở rộng HTML, được tái cấu trúc dưới dạng một ứng dụng XML. XHTML 1.0 thì giống hệt như HTML 4.01, chỉ trừ các yêu cầu cú pháp đặt ra bởi XML. XHTML Basic là một tập con tối thiểu của XHTML cho các máy khách Web (clients) với tính năng hạn chế. XHTML 1.1 là bản tái lập của XHTML 1.0 Strict có dùng các XHTML Module.

Xem thêm

2.7. Tôi có thể học SSI (“SHTML”) ở đâu?

Các Server-Side Include (SSI) cho phép nhiều dạng định hướng (directive) (chẳng hạn để bao kèm nội dung một file khác) có thể nhúng được bên trong các tài liệu web. Máy chủ web xử lý các định hướng SSI mỗi lần văn bản có dùng SSI được gọi đến. Các tài liệu có dùng đến SSI thường được nhận diện bằng phần mở rộng có tên .shtml song không có ngôn ngữ nào gọi là “SHTML”. Các hình thức thực hiện thì khác nhau giữa các máy chủ web; bạn cần xem tài liệu hướng dẫn máy chủ web hiện dùng.

Xem thêm

2.8. Tôi có thể học CGI ở đâu?

Common Gateway Interface là một giao diện chuẩn giữa các chương trình ngoài và các máy chủ web. Khác với những văn bản HTML tĩnh, các chương trình CGI có thể tạo nên những thông tin động dựa trên dữ liệu người dùng cấp cho, hoặc thông tin trong một cơ sở dữ liệu, hay bất kì dữ liệu nào mà chương trình đó lấy được.

Lưu ý rằng mặc dù nhiều chương trình CGI được viết bằng ngôn ngữ Perl, so chương trình CGI có thể được viết bằng nhiều ngôn ngữ khác (gồm C, C++, Python, Visual Basic, và nhiều ngôn ngữ shell trong hệ Unix).

Xem thêm

2.9. Tôi có thể học PHP ở đâu?

PHP: Hypertext Preprocessor là một ngôn ngữ văn lệnh chạy trên nhiều nền hệ thống với công dụng chung. PHP thường được dùng làm các đoạn mã lệnh nhúng phía máy chủ trong các trang web động.

Xem thêm

  • Nhóm PHP (bài hướng dẫn, hỏi-đáp, tải về, v.v.)
  • PHP Resource Index (mã lệnh hoàn chỉn, các ví dụ, hướng dẫn, v.v.)

2.10. Tôi có thể học JavaScript (LiveScript, JScript, ECMAScript, DOM) ở đâu?

JavaScript là một ngôn ngữ hướng đối tượng, được thông dịch trên nhiều nền tảng, được thiết kế ban đầu là để viết mã lệnh web phía máy khách. Các thành phần của trang web có thể được chỉnh sửa bằng JavaScript, dưới dạng các đối tượng quy định trong mô hình Document Object Model (DOM). Điều này cho phép các hiệu ứng động như lật hình và hiệu ứng tương tác như các trang web thay đổi theo phản hồi của người dùng mà không cần tải lại từ server (máy chủ).

LiveScript là tên gọi ban đầu mà Netscape đặt cho JavaScript. JScript là phiên bản ngôn ngữ mà Microsoft thiết lập nên. ECMAScript là một phiên bản chuẩn hóa dựa trên JavaScript của Netscape và JScript của MicroSoft.

Xem thêm

Mục 3: Khởi động

3.1. Mọi người viết HTML bằng gì?

Mỗi người có ý thích riêng về chọn công cụ phù hợp nhất. Hãy nhớ rằng nếu công cụ đó càng yêu cầu bạn biết ít kiến thức về HTML thì sản phẩm HTML bạn tạo ra sẽ càng dở. Nói cách khác, bạn sẽ luôn làm tốt hơn nếu chịu khó dành thời gian học một chút HTML.

Xem thêm

3.2. Làm thế nào để cho thấy các ví dụ HTML mà không để chúng bị coi là phần nội dung tài liệu của tôi?

Bên trong ví dụ HTML đó, trước hết hãy thay thế kí tự “&” bằng “&amp;” ở mọi chỗ nó xuất hiện. Sau đó thay thế kí tự “<” bằng “&lt;” và kí tự “>” bằng “&gt;” theo cách tương tự. Lưu ý rằng có thể dùng được các phần tử CODE và/hoặc PRE khi hiển thị các ví dụ HTML. Ngoài ra, câu hỏi đáp tiếp theo cũng đề cập những vấn đề tổng qúat hơn về cách biểu diễn kí tự bất kì trong văn bản HTML.

3.3. Làm cách nào để có được những kí tự đặc biệt trong HTML của tôi?

Mục hỏi-đáp trước đã đề cập đến trường hợp riêng với các dấu nhỏ hơn (‘<‘), lớn hơn (‘>’), và (‘&’). Nói chung, cách an toàn nhất để viết  HTML là bằng mã US-ASCII (ANSI X3.4, một loại mã 7-bit), qua việc biểu diễn các kí tự của nửa trên của mã 8-bit bằng các thực thể HTML.

Việc dùng các kí tự 8-bit cũng có thể thành công trong nhiều trường hợp thực tế: Unix và MS-Windows (dùng Latin-1), và cả Mac (với một số trường hợp dành riêng).

Latin-1 (ISO-8859-1) được thiết kế riêng cho tiếng Anh, Pháp, Đức, Tây Ban Nha, Bồ Đào Nha và một số ngôn ngữ Tây Âu khác.
(Nó không đủ cho nhiều ngôn ngữ trung Âu và Đông Âu cũng như nhiều vùng khác, chứ chưa nói đến các ngôn ngữ không dùng bảng mã La Mã.) Trên Web, chỉ đó là những kí tự được hỗ trợ một cách đáng tin cậy. Nói riêng, các kí tự từ mã số 128 đến 159 có dùng trong MS-Windows lại không phải là thành phần của tập mã ISO-8859-1 và sẽ không được hiển thị như người dùng Windows trông mong. Những kí tự này bao gồm dấu gạch dài, gạch ngắn, dấu nháy uốn cong, dấu chấm đầu dòng (hoa thị), dấu thương hiệu; những cái này thỉ cả kí tự lẫn kí hiệu &#nnn; tương ứng đều không đúng trong HTML. Hơn nữa, ISO-8859-1 không bao gồm dấu tiền Euro. (Xem thêm đoạn cuối mục hỏi đáp này về những kí tự như vậy.)

Trên nền những hệ thống mà mã kí tự không phải ISO-8859-1, như MS-DOS và Mac OS, có thể phát sinh vấn đề: bạn phải dùng cách chuyển từ bảng mã riêng của hệ thống đến ISO-8859-1 (chẳng hạn, Fetch cho máy Mac), hoặc chuyển đổi độc lập (như GNU recode). Việc dùng 7-bit ASCII với các thực thể sẽ tránh được những vấn đề như vậy, song bài hỏi-đáp này qúa ngắn, không thể hướng dẫn chi tiết những trường hợp khác nữa.

Nếu bạn chạy một web server (httpd) trên nền hệ thống mà bộ mã không phải là ISO-8859-1, như Mac hay một máy IBM mainframe, thì trách nhiệm máy chủ là phải chuyển đổi văn bản chữ về dạng ISO-8859-1 khi gửi những văn bản này lên mạng.

Nếu bạn muốn dùng các kí tự không thuộc ISO-8859-1, bạn phải dùng HTML 4 hay XHTML thay vì HTML 3.2, chọn một bộ kí tự thay thế thích hợp (và với những bộ kí tự cụ thể, chọn luôn cả hệ thống mã  encoding), và dùng cách này hay khách khác để chỉ định bộ mã được chọn.

Xem thêm

3.4. Tôi có nên đặt dấu nháy quanh các gía trị thuộc tính không?

Không có gì sai trái khi đặt dấu nháy cho những gía trị thuộc tính, và nhiều người khuyến nghị phải nháy tất cả những gía trị dù cho việc làm đó cũng chỉ là tùy thích, trên phương diện kĩ thuật. XHTML 1.0 yêu cầu tất cả các gía trị thuộc tính phải được nháy. Cũng như những chỉ định HTML trước đó, HTML 4 cho phép các gía trị thuộc tính vẫn để nguyên không nháy trong nhiều trường hợp (ví dụ khi gía trị này chỉ là 1 chữ cái, hay chỉ là con số).

Hãy cẩn thạn khi gía trị bạn nhập bản thân nó lại có dấu nháy, chẳng hạn khi bạn muốn dòng chữ ALT kiểu như “Vị “Vua hài kịch” giương cung” đặt cho một hình ảnh. Chúng ta thì hiểu được chỗ nào kết thúc nháy, nhưng trình duyệt thì không. Bạn phải viết giá trị thuộc tính cẩn thận để cho cái dấu nháy đầu tiên không báo hiệu kết thúc gía trị qúa sớm. Có hai kĩ thuật chủ  yếu sau:

  • Thoát mọi dấu nháy nằm tbên trong gía trị bằng ” để cho gía trị không bị kết thúc sớm: ALT=”the “King of Comedy” takes a bow”.
  • Dùng các dấu nháy đơn để chỉ định gía trị thuộc tính: ALT=’the “King of Comedy” takes a bow’.

Cả hai cách này đều đúng nếu xét theo quy định và cũng được các trình duyệt hiện thời hỗ trợ, song một số trình duyệt cũ thì không. Nên an toàn nhất là viết lại dòng chữ để gía trị không có dấu nháy nào, hay thay thế dấu nháy kép của gía trị thì dấu nháy đơn, như sau: ALT=”the ‘King of Comedy’ takes a bow”.

Xem thêm

3.5. Làm thế nào để bao gồm các lời chú thích trong HTML?

Về mặt kĩ thuật, bởi HTML là một ứng dụng SGML, nên HTML dùng kí hiệu chú thích của SGML. Tuy nhiên, kí hiệu đầy đủ thì phức tạp, và các trình duyệt không hỗ trợ toàn vẹn được. Cho nên, hãy dùng quy tắc đơn giản sau để tạo các chú thích HTML vừa đúng cú pháp lại hiệu dụng trong các trình duyệt:

Một chú thích HTML bắt đầu bằng “<!--“, kết thúc bằng “-->“, và không chứa bất kì “--” hay “>” trong chú thích đó.

Các dòng sau là những ví dụ chú thích HTML:

  • <!-- Đây là một chú thích. -->
  • <!-- Đây là một chú thích khác,
    và nó tiếp tục xuống dòng dưới. -->
  • <!---->

Đừng đặt những chú thích bên trong các thẻ (tức là đặt giữa “<” và “>“) trong HTML.

Xem thêm

3.6. Làm thế nào để tránh sử dụng toàn bộ URL?

Cấu trúc URL định nghĩa một cấu trúc phân cấp tương tự như phân cấp thư mục trong hệ thống file dùng trong đa số các điều hành máy tính. Các phần của URL được phân cách bởi các dấu gạch chéo (“/”). Khi duyệt qua cấu trúc URL, đoạn cuối của URL (tức là mọi thứ sau dấu gạch chéo cuối cùng) thì tương đương với một file trong hệ thống file. Còn những phần khác của URL thì giống những thư mục con trong hệ thống file.

Một URL tương đối thì bỏ qua một phần thông tin cần thiết để định vị đến tài liệu được chỉ định. Những thông tin đã bỏ qua này được coi là giống với những tài liệu giữ vị trí cơ sở (mốc) có chứa URL tương đối đó. Việc này rút ngắn những URL cần để chỉ tới các tài liệu liên quan, và cho phép cây tài liệu được truy cập đến qua nhiều hình thức khác nhau (chẳng hạn, “file”, “http”, và “ftp”) hoặc có thể di chuyển được mà không thay đổi gì đến các URL ghi trong những tài liệu đó.

Trước khi trình duyệt có thể dùng URL tương đối, nó phải phân giải được URL tương đối đó để tạo thành một URL tuyệt đối. Nếu URL tương đối đó bắt đầu bằng một cặp dấu gạch chéo (chẳng hạn, //www.htmlhelp.com/faq/html/), thì nó chỉ thừa kế hình thức của URL cơ sở. Nếu URL tương đối bắt đầu bằng một dấu gạch chéo (chẳng hạn, /faq/html/), thì nó sẽ thừa kế cả hình thức lẫn vị trí mạng từ URL cơ sở.

Còn nếu URL tương đối chẳng bắt đầu bằng dấu gạch chéo nào (chẳng hạn, all.html , ./all.html hoặc ../html/), thì nó có một đường dẫn tương đối và sẽ được phân giải như sau.

  1. Trình duyệt sẽ gạt bỏ tất cả những gì đứng sau dấu gạch chéo cuối cùng trong URL của tài liệu cơ sở và nối URL tương đối vào kết qủa.
  2. Mỗi phần “.” được xóa đi (ví dụ, ./all.html cũng giống như all.html, và ./ thì chỉ “thư mục” hiện thời trong cấu trúc phân cấp URL).
  3. Mỗi phần “..” sẽ có tác dụng di chuyển lên một cấp cao hơn trong thang bậc phân cấp URL; phần “..” được xóa bỏ đi, cùng với phần đứng trước nó (chẳng hạn, foo/../all.html cũng giống như all.html, và ../ chỉ đến “thư mục” cha mẹ trong phân cấp URL).

Một vài ví dụ có thể giúp hiểu thêm vấn đề. Nếu tài liệu cơ sở là <URL:http://www.htmlhelp.com/faq/html/basics.html&gt;, thì

Lưu ý ràng trình duyệt mới thực hiện phân gỉai các URL tương đối chứ không phải máy chủ làm điều này. Máy chủ (server) chỉ nhìn thấy URL tuyệt đối sau khi xử lí mà thôi. Hơn nữa, các URL tương đối thì di chuyển trong cấu trúc phân cấp URL. Mối liên hệ (nếu có) giữa thang bậc phân cấp URL và hệ thống file máy chủ thì không có ảnh hưởng gì cả.

Xem thêm

3.7. Tôi có nên kết thúc các URL viết ra bằng một dấu gạch chéo hay không?

Cấu trúc URL định nghĩa một hệ thống phân cấp tương tự như phân cấp hệ thống file thành các thư mục con. Các phần của mỗi URL được phân tách bởi dấu gạch chéo (“/”). Khi di chuyển trong cấu trúc phân cấp URL, thì phần cuối cùng của URL (tức là tất cả những gì đứng sau dấu gạch chéo cuối) đều gioosng một file trong hệ thống file. Các phần khác của URL thì giống các thư mục con trong hệ thống file.

Khi phân giải các URL tương đối (xem câu trả lời cho hỏi-đáp liền trước), đầu tiên trình duyệt sẽ lược bỏ moi thứ đứng sau dấu gạch chéo cuối cùng trong URL của văn bản hiện thời. Nếu URL của văn bản hiện thời kết thúc bằng một dấu gạch chéo, thì phần của cùng (hay “file”) của URL bị bỏ trống. Nếu bạn xóa dấu gạch chéo này, thì phần cuối cùng của URL sẽ không còn bỏ trống nữa; nó là thứ đứng sau dấu gạch chéo còn lại trước đó. Như vậy việc xóa dấu gạch chéo sẽ thay đổi URL; cái URL sau thay đổi sẽ tham chiếu tới một văn bản khác và các URL tương đối sẽ phân giải khác nhau.

Chẳng hạn, phần cuối của URL http://www.htmlhelp.com/faq/html/ là không có gì; bởi không có gì sau dấu gạch chéo cuối cùng. Trong văn bản này, URL tương đối all.html sẽ phân giải thành http://www.htmlhelp.com/faq/html/all.html (một văn bản có sẵn). Nếu dấu gạch chéo đứng sau bị bỏ qua, thì phần cuối cùng của URL đã sửa đổi http://www.htmlhelp.com/faq/html là “html”. Trong văn bản này (không tồn tại), URL tương đối all.html sẽ phân giải thành http://www.htmlhelp.com/faq/all.html (một văn bản không tồn tại khác).

Khi nhận được một yêu cầu bị thiếu dấu gạch chéo cuối cùng, các máy chủ web không thể bỏ qua dấu gạch chéo bị thiếu này và dù sao thì cũng gửi văn bản đi. Làm như vậy sẽ phá vỡ mọi URL tương đối trong văn bản này. Nói chung, các máy chủ được cấu hình để gửi một thông báo điều hướng khi nhận được đề nghị kiểu như vậy. Để phản hồi thông báo điều hướng này, trình duyệt yêu cầu URL đúng, rồi sau đó máy chủ gửi tài liệu được yêu cầu. (Dù sao, bản thân trình duyệt không và cũng không thể tự sửa lại URL đó được; chỉ có máy chủ mới có thể xác định được xem URL có bị thiếu dấu gạch chéo sau cùng không.)

Quy trình sửa lỗi này có nghĩa rằng các URL không có dấu gạch chéo thì vẫn hoạt động được. Nhưng qúa trình này làm tốn thời gian và tài nguyên mạng. Nếu bạn viết cả dấu gạch chéo cuối cùng lúc cần, thì trình duyệt sẽ không phải gửi yêu cầu thứ hai đến máy chủ nữa.

Một ngoại lệ chỉ là khi bạn đề cập đến URL chỉ với tên của host (như http://www.htmlhelp.com). Trong trường hợp này, trình duyệt sẽ coi như bạn muốn chỉ mục chính (“/”) từ máy chủ, và bạn không cần phải viết dấu gạch chéo ở cuối. Tuy nhiên, nhiều người cho rằng viết cả gạch chéo ở cuối vẫn là một phong cách tốt.

Xem thêm

3.8. Làm thế nào để kiểm tra lỗi?

Công cụ kiểm định HTML (validator) nhằm kiểm tra các văn bản HTML theo một định nghĩa quy củ về cú pháp HTML và rồi xuất ra một loạt các lỗi. Việc kiểm định là quan trọng để cho cơ hội lớn nhất để văn bản hoạt động đúng trên nhiều trình duyệt chưa biết (cả những trình duyệt đã có mà bạn chưa biết hay những trình duyệt trong tương lai chưa được lập).

Trình kiểm tra (HTML checker hay linter) cũng hữu ích. Những chương trình này kiểm tra các tài liệu xem có vấn đề cụ thể nào không, bao gồm một số vấn đề gây nên bởi những đánh dấu (markup) không hợp lệ và những lỗi trình duyệt thông thường. Trình kiểm tra có thể bỏ lọt một số tài liệu không hợp lệ hay bắt một số tài liệu hợp lệ.

Tất cả công cụ kiểm định về tính năng thì đều tương đương nhau; dù cách thức thông báo của chúng có thể khác nhau nhưng đều tìm thấy những lỗi giống nhau nếu file đầu vào là như nhau. Các bộ kiểm tra khác nhau được lập trình để tìm kiếm những vấn đề khác nhau, bởi vậy báo cáo do chúng tạo ra sẽ khác hẳn nhau. Ngoài ra, một số chương trình có tên công cụ kiểm định (như “CSE HTML Validator”) thực ra lại là trình kiểm tra. Chúng vẫn có ích, nhưng ta không nên nhầm với các công cụ kiểm định HTML thực sự.

Khi lần đầu kiểm tra một web site để tìm lỗi, thường nên nhận ra những vấn đề chung xuất hiện lặp đi lặp lại trong bản tài liệu của bạn. Hãy sửa những vấn đề tương tự ở các chỗ khác trong văn bản (bằng công cụ tự động nếu có thể), rồi quay lại nhận diện và sửa chữa những vấn đề còn lại.

Các trình kiểm tra kết nối thì theo tất cả những đường link trong một web site rồi thông báo những link nào không còn hoạt động nữa. Trình kiểm tra CSS thì thông báo các vấn đề liên quan đến các CSS style sheet.

Xem thêm

3.9. Một DOCTYPE là gì? Tôi sẽ sử dụng cái nào?

Căn cứ theo tiêu chuẩn HTML, mỗi tài liệu HTML đều bắt đầu bằng một lời khai báo DOCTYPE để chỉ định xem phiên bản nào của  HTML được văn bản sử dụng. Từ hồi đầu, lời khai báo DOCTYPE chỉ được dùng bởi các công cụ dựa trên SGML như kiểm chứng HTML, vốn cần để xác định phiên bản nào của HTML được tài liệu sử dụng (hoặc tuyên bố sử dụng).

Ngày nay, nhiều trình duyệt sử dụng lời khai báo DOCTYPE của văn bản để xác định xem liệu có dùng một chế độ trình bày chặt chẽ, theo chuẩn hơn, hay dùng chế độ trình bày mẹo mực để cố gắng phỏng theo những trình duyệt cũ có nhiều lỗi.

Xem thêm

Mục 4: Xuất bản Web

4.1. Tôi có thể đặt những trang web mới viết ở đâu?

Nhiều ISP (nhà cung cấp dịch vụ Internet) bán dung lượng web cho khách hàng. Dung lượng lưu trữ và băng thông sẽ được hạn chế, và cũng có thể có hạn chế khác; chẳng hạn nhiều nhà cung cấp không cho phép khách hàng sử dụng dung lượng đó để kinh doanh.

Có những công ti và cá nhân mời dung lượng web “miễn phí”. Đa số họ đều được hỗ trợ kinh phí bằng những thông tin qủa cáo xuất hiện trên trang web của tác gỉa. Thường có những điều hạn chế, cũng như dịch vụ hosting do ISP cung cấp cho khách hàng.

Cũng có nhiều nhà cung cấp dung lượng web (tức là cung cấp sự hiện hữu); họ sẽ bán cho bạn dung lượng trên máy chủ của họ. Gía thành có nhiều mức từ US$1 mỗi tháng đến US$100 hoặc hơn mỗi tháng, tùy theo nhu cầu. Các dung lượng web không-ảo (non-virtual) thường là loại rẻ nhất; họ cung cấp một URL như: http://www.webhost.example/yourname/ Thêm một ít tiền, cộng với chi phí đăng kí một tên miền, bạn có thể nhận dung lượng web ảo (virtual), vốn cho phép bạn có một URL như http://www.yourname.example/.

Nếu bạn có kết nối lâu dài đến Internet, chẳng hạn như đường dây thuê bao từ nhà mạng (ISP) thì bạn có thể cài đặt một httpd và vận hành máy chủ Web của riêng mình. Có một số máy chủ Web sẵn cho hầu hết các nền tảng hệ thống khác nhau.

Nếu bạn chỉ muốn chia sẻ thông tin với các người dùng địa phương khác, hay với mọi người qua mạng nội bộ LAN hay mạng diện rộng WAN, bạn có thể chỉ cần có thể đặt các file HTML bạn viết lên mạng LAN cho mọi người cùng truy cập; hoặc nếu mạng LAN chỗ bạn hỗ trợ TCP/IP thì có thể cài đặt một máy chủ Web vào máy tính cá nhân của bạn.

Xem thêm

4.2. Làm thế nào để lấy được tên miền cho riêng mình?

Tổ chức Internet Corporation for Assigned Names and Numbers (ICANN) duy trì một danh sách các điểm đăng kí được cấp phép. Bất kì công ti nào trong danh sách này cũng có thể đăng kí một tên miền cho bạn.

4.3. Làm thế nào để chặn những quảng cáo từ nhà cung cấp dịch vụ của tôi?

Hãy kiểm tra thỏa thuận điều khoản dịch vụ (Terms of Service, TOS) với nhà cung cấp dịch vụ cho bạn. Hầu như trong đó đều ngăn cấm việc can thiệp vào những thông tin quảng cáo mà họ lồng vào các trang web của bạn. Nếu bạn tự tiện dùng mẹo nào đó để chặn những quảng cáo như vậy thì dịch vụ hosting của bạn có thể sẽ xóa bỏ tài khoản của bạn vì đã vi phạm điều khoản nêu trên.

Tuy vậy, cũng có những lựa chọn khác. Một số nhà dịch vụ hosting sẽ xóa bỏ quảng cáo nếu bạn trả một khoản phí nhỏ hàng tháng. Một số khác sẽ xóa bỏ những quảng cáo bật ra mặc định nếu bạn tự bổ sung các banner tĩnh.

4.4. Tôi có thể công bố site của mình ở đâu?

4.5. Có cách nào để được chỉ mục tốt hơn từ những máy tìm kiếm không?

Không có một kĩ thuật đơn lẻ nào, nhưng một vài điều sau có thể giúp bạn.

  • Các máy tìm kiếm đặt chỉ mục cho phần nội dung chữ trong site của bạn; bởi vậy hãy dùng một <TITLE>, có ý nghĩa, dùng các tiêu đề mục có ý nghĩa (<H1>, <H2>, v.v.), và đặt tiêu đề ALT có ý nghĩa cho các hình ảnh.
  • Nhiều máy tìm kiếm bỏ qua các khung (frame), cho nên hãy tránh dùng khung; và đảm bảo rằng bạn cung cấp nội dung NOFRAMES có ích trong trường hợp phải dùng khung.
  • Đa số máy tìm kiếm bỏ qua các map hình ảnh (cách quy định từng phần hình ảnh ứng với từng nội dung riêng), các biểu mẫu (form), và JavaScript; bởi vậy hãy đảm bảo rằng việc di chuyển trên site của bạn không phụ thuộc vào những cách thức trên. Hãy đặt các đường link thường để di chuyển trên site. Hãy tránh dùng META refresh, vì nhiều máy tìm kiếm sẽ đánh gía thấp những site dùng cách này (META refresh thường được dùng để đối phó với các máy tìm kiếm).
  • Chương trình đặt chỉ mục của một số máy tìm kiếm (bao gồm AltaVista và Infoseek) cũng sẽ tính tới những thẻ <META NAME="keywords" CONTENT="..."> nào xuất hiện trong phần <HEAD> thuộc văn bản của bạn. Tuy nhiên, các từ khóa META đã từng được dùng để “lừa” các máy tìm kiếm, nên rất nhiều máy sẽ bỏ qua danh sách từ khóa của bạn trong trường hợp một từ khóa bị lặp lại qúa nhiều. Lúc viết bài này, mức độ “qúa nhiều” có nghĩa là “hơn 7 lần” đối với một số máy thông dụng, nhưng mức này có thể sẽ bị thay đổi trong tương lai vì những chương trình đặt chỉ mục sẽ được điều chỉnh để tránh các mẹo lừa.
  • Nếu bạn đưa một thẻ <META NAME="description" CONTENT="..."> vào trong phần <HEAD> của các văn bản bạn viết, thì một số máy tìm kiếm sẽ dùng nội dung trong thẻ này làm lời mô tả website của bạn khi hiển thị kết qủa tìm kiếm. Điều này sẽ không ảnh hưởng đến thứ hạng tìm kiếm, nhưng có thể giúp cho những người tìm kiếm hiểu được website của bạn làm gì khi họ tìm thấy kết qủa đến site của bạn.

Thuộc tính CONTENT của các từ khóa META và các thẻ mô tả trong đó có thể chứa đến 1022 kí tự, nhưng không có đánh dấu gì ngoài các thực thể.

Bạn có thể muốn xem trước website của bạn bằng một trình duyệt chữ kiểu như Lynx, để hình dung xem website của bạn hiện ra như thế nào ở máy tìm kiếm.

Sau cùng, hãy lưu ý rằng một số máy tìm kiếm lờ đi những website được mở (host) bởi các dịch vụ host miễn phí thông dụng. Một số máy tìm kiếm khác chỉ đánh chỉ mục một số lượng văn bản nhất định trên mỗi server, vì vậy khách hàng nào đặt dịch vụ miễn phí trước sẽ được đánh chỉ mục còn sau này có thể bị bỏ qua.

Xem thêm

4.6. Làm thế nào để tránh cho website của tôi khỏi bị đánh chỉ mục bởi máy tìm kiếm?

Giao thức “Robots Exclusion Protocol” cho phép admin của các Web site chỉ định những phần thuộc website của họ khỏi bị robot ghé thăm, bằng cách tạo một file văn bản /robots.txt .

Thẻ META trong đó cho phép tác gỉa HTML chỉ định xem liệu robot có thể đánh chỉ mục văn bản không, và liệu các robot có truy được những URL khác từ văn bản không. Thẻ META robot thì không cần quyền admin server.

Xem thêm

4.7. Làm thế nào để điều hướng người truy cập đến trang khác?

Cách tin cậy nhất là đặt cấu hình máy chủ để nó gửi đi chỉ dẫn điều hướng khi URL cũ được yêu cầu. Lúc đó trình duyệt sẽ tự động nhận lấy URL mới. Đây là cách nhanh nhất và hiệu quả nhất, và cũng là cách duy nhất được đề cập trong bài hỏi-đáp này mà có thể thuyết phục được các robot đặt chỉ mục để chúng gạch bỏ URL cũ đi. Chi tiết cấu hình như thế nào, hãy hỏi admin quản lý server hay tài liệu hướng dẫn (với các server NCSA hay Apache, cần dùng một lệnh Redirect ở .htaccess).

Nếu bạn không thể đặt điều hướng, thì vẫn còn những khả năng khác. Những cách như vậy đều “yếu” hơn vì chúng bảo máy tìm kiếm rằng vẫn còn trang web ở vị trí cũ chứ không phải là trang được chuyển đến một vị trí mới. Nhưng nếu bạn không thể cấu hình một điều hướng ở máy chủ của mình, thì có hai cách làm thay thế sau:

  • Lập nên một trang web đơn gỉan với dòng chữ kiểu như “This page has moved to http://new.url/ — please adjust your bookmarks.” (Trang web này đã được chuyển đến … — hãy sửa lại đánh dấu trang của bạn.)
  • Một tag META Refresh không phải lúc nào cũng làm việc với mọi browser và có thể làm hỏng nút “back”. Chẳng hạn:<meta http-equiv="Refresh" content="[x]; URL=[newURL]"> thì sẽ tải [newURL] sau [x] giây. Cái này phải được đặt vào HEAD của văn bản. Song nếu bạn làm vậy, hãy kèm thêm một dòng chữ “Document moved to [newURL]” (Văn bản được chuyển đến … ” với các trình duyệt khác.

Xem thêm

4.8. Làm thế nào để bảo vệ website của tôi bằng mật khẩu?

Việc bảo vệ bằng mật khẩu được thực hiện qua cơ chế chứng thực HTTP (authentication). Chi tiết cách cấu hình hóa khác nhau tùy từng máy chủ, bởi vậy bạn cần đọc đoạn chứng thực của hướng dẫn server đang dùng. Hãy liên hệ với người quản trị server nếu cần trợ giúp.

Các đoạn mã lệnh mật khẩu JavaScript chỉ là mặt tiền của bảo mật. Ở cấp độ nền tảng, chúng hoạt động theo một trong 2 cách. Một số mã lệnh biến đổi mật khẩu thành một URL; điều này giữ bảo mật cho văn bản qua việc giới hạn số người biết URL đó. Một số mã lệnh lại kiểm tra mật khẩu rồi đến một URL cụ thể khác, vốn bảo vệ văn bản khỏi bị xem bởi những người không biết xem mã nguồn JavaScript để tìm URL của văn bản đó. Cả hai cách đều không thật bảo mật.

Xem thêm

4.9. Làm thế nào để ngăn không cho các trang của tôi bị lưu tạm (cache)?

Các trình duyệt đều lưu tạm các văn bản; chúng lưu trữ những bản sao của văn bản vào máy để tăng tốc những lần truy cập lên tiếp đến những văn bản mà không bị thay đổi. Hơn nữa, nhiều trình duyệt còn được cấu hình để sử dụng các khu lưu trữ ủy quyền công cộng (public proxy) vốn phục vụ nhiều người dùng (chẳng hạn tất cả khách hàng của một dịch vụ ISP, hay tất cả những nhân viên đằng sau tường lửa một công ty). Để kiểm soát một cách hiệu qủa cách mà văn bản được lưu tạm, bạn cần cấu hình hóa máy chủ để gửi những header HTTP phù hợp.

Header có tên Expires coi như được hiểu bởi tất cả khu lưu trữ. Văn bản đã lưu sẽ được tự động lấy lại một khi nó đã bị hết hạn. Header Expires hoạt động dựa trên ngày giờ  HTTP, vốn là giờ chuẩn Anh Quốc (Greenwich Mean Time, GMT), chứ không phải giờ địa phương.

HTTP 1.1 giới thiệu header tên Cache-Control, để cung cấp sự linh hoạt hơn trong việc báo cho kho lưu (cache) cách xử lý văn bản thế nào.

Những chi tiết về cấu hình hóa sẽ khác nhau tùy server, nên bạn phải kiểm tra lại tài liệu server hiện dùng.

Header có tên Pragma nói chung không có hiệu lực gì bởi ý nghĩa của nó vẫn chưa được chuẩn hóa và chỉ số ít kho lưu cache ủng hộ nó. Việc sử dụng các phần tử <META HTTP-EQUIV=...> trong những tài liệu HTML nói chung cũng vô hiệu; một số trình duyêt có thể ủng hộ những đánh dấu như vậy, song những kho lưu cache khác sẽ phớt lờ hoàn toàn.

Xem thêm

4.10. Làm thế nào để vô hiệu hóa các tùy chọn kích chuột phải trong trình duyệt? Làm thế nào để bảo vệ mã nguồn trang web, những hình ảnh tôi đăng lên v.v. khỏi bị sao chép?

Bằng HTML thì bạn không thể can thiệp vào tùy chọn kích chuột phải trong trình duyệt được. Song đôi khi dùng JavaScript thì có thể:

  • Những mã lệnh này làm phiền những khách thăm nào đã mất quyền truy cập sẵn sàng vào các chức năng menu ngữ cảnh thông thường trong trình duyệt họ dùng (chẳng hạn như “Open in new window” hay “Bookmark link”). Các mã lệnh này cũng có thể can thiệp vào những đặc điểm như cử chỉ của chuột.
  • Không có gì (kể cả những đoạn mã lệnh) có thể ngăn cản người khác copy mã nguồn hay hình ảnh. Trình duyệt không thể hiện thị văn bản mà không có mã nguồn hay hình ảnh được, bởi vậy máy chủ web của bạn phải gửi mã lệnh và hình ảnh về trình duyệt. Ngay cả khi không có những tính năng lưu (“save”) trong các trình duyệt hiện này, người khác vẫn có thể lấy được các mã nguồn hay hình ảnh của bạn từ kho lưu cache của trình duyệt, hoặc bằng cách dùng công cụ nào đó để yêu cầu máy chủ, hoặc dùng phần mềm chụp màn hình để sao chép hình ảnh.
  • Những mã lệnh đó không làm gì nếu JavaScript bị vô hiệu hóa hay chưa có sẵn trên máy, hay khi quyền truy cập JavaScript trong sự kiện kích chuột phải bị vô hiệu hóa, hoặc với máy tính không có chuột hoặc chỉ có chuột loại 1 nút.

Xem thêm

4.11. Làm thế nào để ẩn giấu URL của tôi?

Bạn không thể. URL là phần cơ bản để di chuyển trong WWW. URL rất cần thiết để trình duyệt có thể lấy được văn bản của bạn về. Không thể ẩn URL của một tài nguyên/văn bản từ trình duyệt được.

Nói vậy, song cũng có thể phần nào che khuất các URL bằng một chức năng lỗi của các khung (frame).

Xem thêm

4.12. Làm thế nào để phát hiện xem loại trình duyệt nào được dùng?

Nhiều trình duyệt tự nhận diện chúng khi chúng yêu cầu một văn bản. Một đoạn mã CGI sẽ có thông tin này sẵn trong biến môi trường HTTP_USER_AGENT, và trình duyệt có thể dùng nó để gửi ra một phiên bản của tài liệu được tối ưu hóa cho loại trình duyệt đó.

Lưu ý rằng không phải tất cả các trình duyệt đều có thể nhận diện đúng về chúng. Chẳng hạn, Microsoft Internet Explorer tự nhận nó là Netscape
Navigator, và nhiều trình duyệt khác lại nhận chúng là Microsoft Internet Explorer.

Và dĩ nhiên, nếu như một cache proxy lưu giữ thông tin phiên bản quy định cho một trình duyệt này thì người khác với trình duyệt khác thì lại lấy phải phiên bản đó chứ không phải phiên bản dành cho trình duyệt khác.

Vì lí do này hay lí do khác, việc chơi trò đoán trình duyệt đều không phải ý kiến hay.

Xem thêm

4.13. Làm thế nào để lấy được địa chỉ email của khách ghé thăm?

Bạn không thể. Dù mỗi yêu cầu tài liệu thường được ghi lại cùng với tên hoặc địa chỉ của host từ xa, nhưng tên thực của người dùng thường không bao giờ được ghi lại cùng. Điều này chủ yếu là để đảm bảo hiệu năng,vì nếu ghi lại như vậy sẽ đòi hỏi máy chủ phải sử dụng giao thức nhận diện (ident) để xem ai đang ở đầu kia. Việc này làm mất thời gian. Và nếu một ủy quyền lưu trữ thực hiện yêu cầu này thì bạn không thu được điều gì có nghĩa lý cả.

Nhưng hãy dừng lại để nghĩ một chút … có thực bạn muốn tất cả những website nào bạn ghé thăm đều biết được địa chỉ email của bạn không? Hãy tưởng tượng hàng đống những thư từ cảm ơn bạn sẽ nhận được. Nếu bạn ghé thăm 20 website thì bạn sẽ nhận được ít nhất 20 email ngày đó, và chắc chắn sẽ thêm những email do họ mời chào bạn ghé thăm tiếp. Sẽ thật là cơn ác mộng cũng như sự xâm phạm quyền riêng tư!

Ở Netscape 2.0, có thể tự động nộp (submit) một mẫu (form) với mailto là hành động, bằng JavaScript. Việc này sẽ gửi email đến chủ tài liệu, với địa chỉ mà người khách đã cấu hình ở dòng From. Dĩ nhiên, đó có thể là  “mickey.mouse@disney.com”. Điều này đã được sửa trong Netscape 2.01.

Cách đáng tin cậy nhất là lập một form, đề nghị người khách điền địa chỉ email vào. Để tăng khả năng họ thực hiện, có thể đền đáp họ bằng cách này hoặc cách khác.

4.14. Tại sao thông điệp mà tôi chỉnh sửa từ 404 Not Found lại không xuất hiện?

Nếu không có trình duyệt nào hiển thị được thông điệp 404 Not Found mà bạn đã điều chỉnh, thì có lẽ máy chủ của bạn chưa được cấu hình đúng.

Nếu chỉ có Internet Explorer phớt lờ thông điệp 404 Not Found của bạn, thì bạn đã bị boắt bởi cơ chế “friendly” HTTP error messages của IE. Khi một phản hồi HTTP đặc biệt (chẳng hạn một phản hồi 404 Not Found) ngắn hơn 512 bytes, thì Internet Explorer sẽ thay thế phản hồi từ server bằng phản hồi riêng của mình. Là người dùng Internet Explorer, bạn có thể vô hiệu hóa đặc điểm này trong mục tùy chọn “Advanced”. Là tác gỉa viết web, biện pháp của bạn chỉ còn là viết thông điệp 404 Not Found dài hơn.

Mục 5: Thiết kế Web

5.1. Làm thế nào để gói một file vào trong file khác?

Bản thân HTML thì không cho cách nào gói nội dung một file vào file khác một cách trơn tru.

Việc gói bằng cách “động” theo đúng nghĩa để đưa một tài liệu HTML (dù dùng bộ kí tự  “charset” riêng) vào trong tài liệu  khác thì có thể thực hiện bằng phần tử OBJECT, nhưng do hạn chế của các phiên bản trình duyệt đang sử dụng, có vẻ như chưa nên trông cậy vào tính năng này khi thao tác với nội dung quan trọng. Với IFRAME cũng tương tự.

Hai cách phổ biến để bao gói trơn tru nội dung một file vào trong file khác ở WWW là preprocessing inclusion (bao gói tiền xử lý) và server-side inclusion (bao gói phía máy chủ). Công cụ tiền xử lý sẽ chuyển đổi mã nguồn của nó thành tài liệu HTML “thuần chủng” mà bạn xuất bản lên máy chủ. Trái lại, những tài liệu có dùng bao gói phía máy chủ thì được xử lý mỗi khi tài liệu được lấy về từ server.

Các kĩ thuật tiền xử lý thì có C preprocessor và các phương pháp xử lý văn bản chữ tổng quát khác, cùng một số công cụ xử lý riêng cho HTML.

Cẩn thận kẻo làm cho “mã nguồn” bạn viết trở nên không khả chuyển giữa các hệ thống. Ngoài ra, HTML chỉ có thể được kiểm định sau khi tiền xử lý, bởi vậy chu trình tiêu biểu “Edit, Check, Upload” (biên tập, kiểm tra, tải lên) trở thành “Edit, Preprocess, Check, Upload” ((biên tập, tiền xử lý, kiểm tra, tải lên). (Ở đây, “Kiểm tra” bao gồm mọi công đoạn bạn dùng để xem trước trang web: thẩm định, lint, quản lý rà soát (management walk-through ?) v.v.; còn “tải lên” có nghĩa là bất kì việc làm của bạn để xuất bản trang web mới lên máy chủ web.)

Một kĩ thuật tiền xử lý mạnh mẽ và linh hoạt hơn nhiều là dùng một bộ xử lý SGML (như gói SP) để phát sinh nên mã HTML của bạn; sản phẩm có thể tự thẩm định được.

Các ví dụ cho việc bao gói phía máy chủ bao gồm Server Side Includes (SSI, được hỗ trợ bởi Apache, NCSA, và các máy chủ khác), và ActiveServer Pages của Microsoft (ASP, hỗ trợ bởi MS IIS). Khâu xử lý xảy ra tại thời điểm những tài liệu được thực sự lấy về. Một cách bao gói tiêu biểu như sau:

<!--#include virtual="/urlpath/to/myfile.htm" -->

Tuy vậy, hãy chắc rằng bạn đã tham khảo tài liệu về máy chủ bạn dùng, vì các phiên bản sẽ hơi khác nhau về chi tiết. Trong cách làm trên, toàn bộ dẫn hướng sẽ được thay thế bởi nội dung của file cụ thể.

Sử dụng cách bao gói phía máy chủ (một công cụ tiềm năng mạnh) chẳng qua là một cách đặt những file tĩnh như các đoạn đầu/cuối (header/footer) có ảnh hưởng rõ rệt đến tốc độ truy cập và tải lượng (load) trên máy chủ, và tốt hơn là ta tránh dùng cách này trên những server chịu tải nặng. Nếu bạn dùng cách này, hãy thử làm cho kết qủa trở nên lưu trữ được bằng cache (chẳng hạn qua “XBitHack full” trên Apache; đặt các thuộc tính của đối tượng “Response” trong ASP).

Việc thẩm định HTML đúng đắn trong cách bao gói phía máy chủ chỉ thực hiện được sau khi xử lý phía máy chủ được hoàn thành (chẳng hạn bằng việc dùng một on-line validator (trình thẩm định trực tuyến) có khả năng lấy tài liệu từ máy chủ).

Một cách làm khác là tạo một web site có cơ sở dữ liệu “chống lưng”, như được mô tả trong bài Philip and Alex’s Guide to Web Publishing. Một thay đổi đơn giản trong bản mẫu cơ sở dữ liệu sẽ lập tức thay đổi toàn bộ web site.

Sau cùng, lưu ý rằng nếu các file bao gói có chứa văn bản chữ thuần túy thì cần công sức để chuyển các kí tự “&” và “<” (trong file chữ thuần túy) thành các thực thể “&amp;” và “&lt;” (trong tài liệu HTML).

Xem thêm

5.2. Làm thế nào để chạy một chương trình trên trang web của tôi?

Các trình duyệt không cho phép tác gỉa web tải vè và chạy các chương trình tùy ý trên hệ thống máy khách, bởi vậy sẽ có rủi ro an ninh không chấp nhận được. Người dùng sẽ không được thoải mái truy cập các web site không đáng tin cậy.

Bạn có thể đặt link đến một file chương trình chạy được, cho phép người dùng tải nó về. Sau đó người dùng có thể lựa chọn chạy chương trình, tất nhiên là trên hệ điều hành của họ, nếu như họ không lo về khoản virus phần mềm.

Nếu bạn muốn chạy chương trình ngay trên máy chủ, thì hãy kiểm tra tài liệu máy chủ hiện dùng về chi tiết cấu hình các chương trình phía máy chủ.

Khi công cụ văn lệnh phía máy khách (client-side scripting, như JavaScript) được cho phép hoạt động trên hệ thống khách (tức là trên trình duyệt), thì nó có thể dùng để thực hiện tính toán và xử lý số liệu cũng như diện mạo của trang web.

Nếu bạn muốn mở một trình xem file cụ thể cho một loại file nhất định, chẳng hạn chương trình Adobe Acrobat Reader khi người khách đi theo link đến file PDF, thì điều này cần được thực hiện tự động bởi trình duyệt của khách, tất nhiên là nó phải được cấu hình đúng. Bạn chỉ cần cấu hình hóa máy chủ để gửi file đi với kiểu MIME đúng.

Xem thêm

5.3. Tôi nên dùng thứ gì, &tênthựcthể; hay &#consố; ?

Trong HTML, các kí tự có thể được biểu diễn theo 3 cách:

  1. kí tự được đặt mã đúng, trong phần encoding chỉ định bởi thuộc tính “charset” thuộc header “Content-type:”;
  2. một thực thể kí tự (&tênthựcthể;), từ chỉ định HTML phù hợp (HTML 2.0/3.2, HTML 4, v.v.);
  3. một tham chiếu kí tự số (&#number;) để chỉ định tham chiếu Unicode đến kí tự mong muốn. Chúng tôi khuyên bạn dùng tham chiếu theo số thập phân; còn các tham chiếu theo hệ thập lục phân thì ít được hỗ trợ phổ biến.

Về lý thuyết thì các cách này đều đúng và tương đương. Trên thực tế, sẽ khó hơn do sự tiện lợi của tác gỉa web và sự hỗ trợ có hạn từ phía trình duyệt.

HTTP là một giao thức đảm bảo “8-bit đúng”, bạn có thể thoải mái gửi đi các kí tự 8-bit hay nhiều byte, trong các quy cách coding được hỗ trợ bởi trình duyệt.

A. HTML 2.0/3.2 (Latin-1)

Đến giờ dường như không có lý do nào thật thuyết phục để chọn &entityname; hay &#number;, bởi vậy bạn cứ chọn cái nào bạn thấy tiện hơn.

Nếu bạn tự tin có thể xử lý các kí tự mã hóa 8-bit thì điều này cũng tốt, có lẽ là thích hợp nhất để viết các thứ tiếng châu Âu có “dấu”. Hãy cẩn thận nếu lập web trên các hệ không dựa theo chuẩn ISO-8859 như Mac, Psion, máy tính lớn IBM (mainframe) v.v. vì khi đó kĩ thuật tải lên sẽ phải bàn giao một tài liệu được mã hóa đúng đến máy chủ. Việc dùng & sẽ tránh được những vấn đề như vậy.

B. Một cách khác hơn Latin-1

Trong những cách mã hóa như ISO-8859-7 Greek (Hy Lạp), koi8-r Russian Cyrillic (Nga), và Trung-Nhật-Hàn (CJK), việc dùng những kí tự được mã hóa là cách được hỗ trợ phổ biến và tiến hành nhiều nhất.

Dù không được đề cập bởi HTML 3.2, nhưng các trình duyệt đã hỗ trợ điều đó khá phổ biến được một thời gian rồi; và đó là một lựa chọn hợp lệ trong chỉ định HTML 4–hãy dùng một công cụ thẩm định như the WDG HTML Validator hay the W3C HTML Validation Service vốn hỗ trợ HTML 4 để hiểu được những cách mã hóa khác nhau cho kí tự.

Việc hỗ trợ từ phía trình duyệt cho các kí tự mã hóa có thể tùy thuộc vào cấu hình hóa và nguồn font. Trong một số trường hợp, các chương trình phụ trợ hay “add-in” sẽ hỗ trợ font ảo cho trình duyệt.

Những chương trình “add-in” trước đây được dùng để hỗ trợ tham chiếu dạng số đến những giao thức mã 15-bit hay 16-bit như Chinese Big5 hay Chinese GB2312.

Về lý thuyết bạn có thể bao gói được không chỉ những kí tự được mã hóa mà còn cả những tham chiếu số Unicode, song sự hỗ trợ phía trình duyệt nhìn chung đều kém. Các tham chiếu số đến các mã hóa “chỉ định theo bộ kí tự” có thể sẽ hiện đúng kí tự trên một số trình duyệt, song đây là cách làm sai và nên tránh không dùng. Các thực thể kí tự cũng có thể gây rắc rối, bên cạnh những kí tự có ý nghĩa trong HTML như &lt;, &amp; v.v.

C. Quốc tế hóa bằng HTML 4

Những phiên bản gần đây của các trình duyệt thông dụng đều hỗ trợ một trong những đặc điểm này, song tại lúc tác gỉa viết bài dường như sẽ không hay nếu chỉ dựa vào điều trên khi viết web cho giới độc gỉa rộng rãi.

Xem thêm

5.4. Tôi nên viết thẻ bằng chữ in hay chữ thường?

Trong HTML, tên các phần tử và thuộc tính trong các thẻ đều không phân biệt chữ in/thường, nên chẳng quan trọng. Việc lựa chọn chỉ theo phong cách và thói quen từng người. (Bạn có thể nhận thấy rằng bài hỏi-đáp này còn không thống nhất cách viết chữ in.) Nhiều người ưa dùng chữ in hơn để cho các thẻ hiện rõ trên nền văn bản, và khiến cho việc tìm kiếm các phần tử và tên thuộc tính bằng công cụ Search được dễ dàng hơn. Người khác lại thích dùng chữ thường để các thẻ hòa lẫn vào nội dung văn bản hơn, và XHTML cũng yêu cầu vậy.

Lưu ý rằng một số gía trị thuộc tính thì lại phân biệt chữ in-thường. Chẳng hạn, <OL TYPE="A"><ol type="A"> là giống nhau, nhưng <ol type="a"> thì khác cả hai. Để nói rõ hơn thì rất nên dùng đúng thuật ngữ. Trong ví dụ này, OL là phần tử, TYPE là tên thuộc tính, còn A hay a là gía trị thuộc tính. Thẻ là <OL TYPE="A">.)

Các tên thực thể như &nbsp; đôi khi được nói nhầm là thẻ. Chúng có phân biên chữ in-thường. Chẳng hạn cả hai &Eacute;&eacute; đều hợp lệ và là hai thứ khá nhau. Và &nbsp; là thực thể hợp lệ còn &NBSP; thì không.

Lưu ý rằng XHTML yêu cầu tất cả các phần tử và tên thuộc tính phải được viết chữ thường.

5.5. Tôi nên viết web cho cỡ màn hình nào?

HTML không phụ thuộc vào cỡ màn hình. Thường thì dòng chữ dài qúa bề rộng phần hiển thị sẽ được trình duyệt tự ngắt xuống dòng. (Lưu ý rằng các trình duyệt đồ họa thường được dùng với các cửa sổ nhỏ hơn bề rộng toàn màn hình.)

Các dòng được định dạng trước (chữ giữa các phần tử <PRE>) chỉ nên vượt qúa 70 kí tự nếu nội dung bắt buộc vậy. Các dòng dài sẽ hình thành nên những chố ngắt dòng xấu xí treen các trình duyệt chế độ chữ, và sẽ buộc phải dùng đến thanh trượt ngang trên các trình duyệt đồ họa. Người đọc rất ghét trượt ngang, trừ khi họ nhận thấy rằng nội dung buộc phải như vậy.

Các hình ảnh không thể ngắt xuống dòng được, nên bạn phải cẩn thận với chúng. Dường như rằng một bề rộng 600 pixel (điểm ảnh) là hợp lý; bất kì hình nào rộng hơn sẽ khiến cho một số người phải trượt ngang mới nhìn thấy hết phần bên phải của hình đó. Số người như vậy càng tăng nếu hình càng rộng. (Lưu ý rằng không phải ai xem mạng cũng mở cửa sổ toàn màn hình!)

Những người dùng MSN TV (trước đây là WebTV) không có cách nào trượt ngang, bởi vậy bất kì hình nào qúa 544 pixel sẽ bị nén lại bởi trình duyệt của họ. Các thiết bị khác (đặc biệt là thiết bị di động) sẽ còn hạn chế hơn về tính năng.

Việc dùng các bảng để trình bày, đặc biệt khi các ô có độ rộng cố định, là một cách làm đơn giản thông dụng để tránh cho các trang khỏi phải điều chỉnh độ rộng theo cửa sổ.

Xem thêm

5.6. Tại sao trang web tôi viết thì hiển thị tốt ở trình duyệt này nhưng bị khác đi hoặc không hiển thị được ở trình duyệt khác?

Có vài khả năng.

Trước hết,  có thể bạn đã viết sai cú pháp HTML hoặc CSS. Các trình duyệt khác nhau thì cũng khác nhau về khả năng phán đoán trúng ý của bạn, và các trình duyệt khác nhau khi vấp phải lỗi cũng sẽ phục hồi theo cách khác nhau.

Thứ hai, bạn có thể có những mã lệnh  HTML và CSS hợp lệ song các trình duyệt khác nhau lại diễn giải theo cách riêng. Chẳng hạn, chỉ định CSS cho phép các trình duyệt tương thích có thể bỏ lờ đi những thuộc tính và gía trị nhất định. Hơn nữa, chỉ thị cũng không cho biết rõ rằng cần làm gì với một chuỗi các kí tự &nbsp;. Một số trình duyệt sẽ dồn chúng lại thành một dấu cách thôi; số khác thì lại để một dấu cách ứng với mỗi &nbsp;.

Thứ ba, máy chủ của bạn có thể đã gửi kiểu MIME không đúng cho một số file của bạn. Internet Explorer thì đã không đúng khi lờ đi các kiểu MIME cung cấp bởi server, do vậy đôi khi nó lại “làm điều đúng” khi máy chủ bị cấu hình hóa sai. Những trình duyệt khác thì chúy ý đúng những kiểu MIME cung cấp bởi máy chủ, bởi vậy chúng sẽ bộ lộc các cấu hình hóa sai của máy chủ. Điều này bao gồm các style sheet bên ngoài, vốn đáng bị gửi dưới dạng “text/css”.

Thứ tư, bạn đã gặp phải một lỗi của trình duyệt. Chẳng hạn, nhiều trình duyệt thông dụng xử lý CSS tốt hơn khi mà các tài liệu HTML có kèm theo các thẻ đóng tùy chọn như </p>, </li>, và </td>.

Một khả năng khác là các cài đặt tùy chọn người dùng khác nhau trong những trình duyệt.

Xem thêm

5.7. Tại sao trình duyệt lại hiển thị mã nguồn HTML của tôi?

Nếu Microsoft Internet Explorer hiển thị tài liệu của bạn một cách bình thường nhưng các trình duyệt khác chỉ hiển thị mã nguồn HTML thuần túy, thì nhiều khả năng là máy chủ web của bạn đã gửi tài liệu đi với kiểu “text/plain”. Máy chủ web của bạn cần được cấu hình hóa để gửi đi tên file đó với kiểu MIME là “text/html”. Thông thường, chỉ cần dùng đuôi file “.html” hay “.htm” là đủ.

Nếu bạn thấy biểu hiện như vậy trong qúa trình xem các tài liệu HTML trên hệ thống file thuộc Windows của bạn thì có thể rằng trình soạn thảo của bạn đã tự động thêm phần đuôi file là “.txt”. Bạn cần phải chuyển tên file từ filename.html.txt sang filename.html để cho Windows coi file đó như một tài liệu HTML.

Xem thêm

5.8. Làm thế nào để cố định URL hiển thị trên trình duyệt của người khách?

Đây là một “đặc điểm” của sử dụng khung: Trình duyệt chỉ hiện URL của tài liệu bộ khung chứ không phải của từng tài liệu khung.

Tuy nhiên, biểu hiện này có thể dễ dàng khắc phục bởi người dùng. Nhiều trình duyệt cho phép người dùng mở các đường link trong các cửa sổ riêng, đánh dấu trang tài liệu trong một khung cụ thể (thay vì trong một tài liệu bộ khung), hay đánh dấu các đường link. Bởi vậy, không có cách nào đảm bảo ngăn chặn được người dùng lấy URL của một tài liệu cụ thể.

Ngoài ra, việc ngăn người dùng không cho họ đánh dấu những tài liệu cụ thể thậm chí còn gây đối địch với người dùng. Một thẻ đánh dấu hay đường dẫn mà không đưa đến tài liệu mong muốn thì vô dụng, và thậm chí có thể bị lờ đi hoặc xóa đi.

Xem thêm

5.9. Làm thế nào để đặt các đường link dọc theo lề trái trang web của tôi?

Một cách thông dụng để làm việc này là dùng một bảng hai cột với các đường link bên cột trái và nội dung ở cột phải. Điều này thường được kết hợp với một hình nền để tạo nên một dải màu phía bên trái, dưới những đường link. Hình nền có thể xếp dọc lần lượt từ trên xuống, nhưng phải đủ rộng để không bị xếp ngang (chẳng hạn rộng 1600 điểm ảnh).

Một biến thể của cách này (vốn giảm thiểu một số vấn đề phát sinh với các bảng khi bố trí nội dung) đó là dùng bảng chỉ có 1 ô với ALIGN=”left”. Chỉ có các đường links được xếp vào trong bảng này, vì vậy sẽ dạt hết về phía trái. Còn nội dung tài liệu sẽ tự sắp xếp và lấp đầy chỗ trống bên phải và phía dưới của “bảng”. Sau đây là một ví dụ:

<table align="left">
<tr><td><!-- các link cho vào đây --></td></tr>
</table>
<!-- nội dung vào đây -->

Các bảng bài trí có thể hoàn toàn không cần đến nếu dùng CSS. Các đường link và nội dung chính được đặt trong các phần tử DIV riêng, và sau đó CSS sẽ được dùng để định vị các phần tử DIV này so với nhau. Style sheet này có thể dùng một hình nền nhỏ hơn, xếp nó về bên trái và lặp lại hình theo chiều dọc, chẳng hạn:

body { color: black;
background: white url(foo.gif) repeat-y left }

Sau cùng, một dải định vị bên trái có thể thực hiện được bằng khung. Tuy nhiên, khung có thể gây nên trục trặc và tốt nhất là tránh dùng chúng.

Xem thêm

5.10. Làm thế nào để chỉ định màu sắc?

Nếu bạn muốn những người khác xem trang web của bạn với màu sắc cụ thể thì cách làm thích hợp nhất là gợi ý các màu theo một style sheet. Cascading Style Sheet dùng các thuộc tính colorbackground-color để chỉ định màu chữ và màu nền. Để tránh xung đột giữa các màu mặc định của độc gỉa và màu do tác gỉa gợi ý thì hai thuộc tính trên luôn cần được sử dụng cùng nhau.

Với HTML, bạn có thể gợi ý các màu bằng những thuộc tính TEXT, LINK, VLINK (các đường link đã ghé thăm), ALINK (link hoạt động), và BGCOLOR (màu nền) của phần tử BODY.

Lưu ý rằng những thuộc tính trên đều bị lỗi thời ở HTML 4. Hơn nữa, nếu động đến một trong các thuộc tính trên thì tất cả thuộc tính đó phải được sử dụng cùng nhau để đảm bảo rằng màu mặc định của độc gỉa không can thiệp vào những màu được tác gỉa gợi ý. Sau đây là một ví dụ:

<body bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#800080" alink="#000080">

Tác gỉa không nên dựa vào các màu chỉ định vì các trình duyệt cho phép người dùng của họ ghi đè lên những màu quy định cho tài liệu.

Xem thêm

5.11. Làm thế nào để đổi màu chữ?

Cách thích hợp nhất là sử dụng đánh dấu cấu trúc phù hợp, và gợi ý màu mong muốn bằng style sheet. Nếu bạn muốn chỉ định một màu chỉ với những trường hợp riêng của loại phần tử nào đó, thì bạn có thể dùng một lớp (class) để chỉ định những trường hợp nào là đặc biệt. Ví dụ CSS sau đây chỉ định rằng dòng chữ nhấn mạnh bằng lớp “special” phải có màu xanh (trên nền trắng):

em.special { color: green; background: white; }

Khi hiển thị theo bộ quy tắc CSS này, thì dòng chữ nhấn mạnh trong ví dụ HTML sẽ được hiển thị màu xanh

normal text <em class="special">emphasized text</em> normal text

Với HTML, phần tử FONT cũng dùng được để đề xuất các màu. Lưu ý rằng phần tử FONT bị  lỗi thời ở HTML 4. Cũng lưu ý rằng việc dùng phần tử FONT mang đến nhiều vấn đề về tính tiện dụng cùng khả năng khai thác.

Xem thêm

5.12. Làm thế nào để chỉ định màu sắc cho thanh trượt?

Trong Internet Explorer 5.5, Microsoft đã giới thiệu các thuộc tính CSS riêng cho màu sắc thanh trượt. Từ đó, những trình duyệt khác (như KDE Konqueror, Opera) cũng hỗ trợ thêm các thuộc tính này. Các thuộc tính gồm có: scrollbar-3dlight-color, scrollbar-arrow-color, scrollbar-base-color, scrollbar-darkshadow-color, scrollbar-face-color, scrollbar-highlight-color, và scrollbar-shadow-color.

Xem thêm

5.13. Làm thế nào để chỉ định font cho trang web của tôi?

Nếu bạn muốn độc gỉa xem trang web của bạn dưới một font riêng thì cách làm thích hợp nhất là đề xuất font đó với một style sheet. Các Cascading Style Sheet sử dụng thuộc tính font-family để chỉ định loại font.

Với HTML, phần tử BASEFONT có thể được dùng để sử dụng để đề xuất các font riêng cho toàn bộ tài liệu.

Với HTML, phần tử FONT cũng có thể được dùng để đề xuất những font cụ thể. Phần tử FONT phải được lặp lại trong ỗi phần tử ở cấp độ khối (block) vì nó chỉ có thể chứa các phần tử ở cấp độ cùng với dòng chữ (inline). Việc dùng phần tử FONT kéo theo nhiều vấn đề về sử dụng và truy cập.

Dù có chỉ định font với CSS hay HTML, các tác gỉa đều có khả năng gặp khó khăn khi trên máy người dùng có một font cùng tên nhưng khác hẳn. Chẳng hạn, “Chicago” có thể là một font chữ đẹp, một font hiển thị với các chữ cái lỗ chỗ, hay một font mới toanh chứa hình ảnh của các cao ốc (để tạo nên “đường chân trời”).

Ngoài ra, tác gỉa cũng cần dùng các font (hoặc nhóm font tương đồng) thông dụng trên nhiều máy, hoặc phải cung cấp các font động cho người đọc. Độc gỉa nào không cài sẵn các font cụ thể như vậy, hay không tải về những font động mà tác gỉa cung cấp, thì sẽ chỉ nhìn thấy font mặc định. Một số trình duyệt có thể dùng font thay thế khó coi hơn các font mặc định ở máy, trong trường hợp không tìm thấy font mà tác gỉa nêu tên. Internet Explorer thì hỗ trợ các font nhúng bằng công cụ Web Embedding Fonts Tool của Microsoft (WEFT).

Xem thêm

Mục 6: Hyperlink (siêu liên kết)

6.1. Tạo một liên kết bằng cách nào?

Hãy dùng một phần tử neo (anchor). Thuộc tính HREF chỉ định URL của tài liệu mà bạn muốn liên kết tới. Trong ví dụ sau, dòng chữ “Web Authoring FAQ” được kết nối đến <URL:http://www.htmlhelp.com/faq/html/&gt;:

<A HREF="http://www.htmlhelp.com/faq/html/">Web Authoring FAQ</A>

Xem thêm

6.2. Làm thế nào để liên kết đến điểm giữa của một tài liệu HTML?

Trước hết, hãy gắn nhãn chỗ đích đến của liên kết. Cách làm cũ là dùng neo với thuộc tính NAME. Chẳng hạn:

<h2><a name="section2">Mục 2: Beyond Introductions</a></h2>

Cách hiện đại là gắn nhãn đích đến bằng một thuộc tính ID. Chẳng hạn:

<h2 id="section2">Mục 2: Beyond Introductions</h2>

Tiếp theo là đặt liên kết tới điểm đích đã gắn nhãn. URL chính là URL của tài liệu, với “#” và gía trị của thuộc tính NAME hoặc ID đi cùng. Tiếp tục ví dụ nêu trên, ở bất kì chỗ nào trong cùng tài liệu bạn có thể viết:

<a href="#section2">đi đến Mục 2</a>

Tương tự, trong một tài liệu khác bạn có thể viết:

<a href="book.html#section2">đến Mục 2 trong cuốn sách của tôi</a>

6.3. Làm thế nào để tạo liên kết mở ra cửa sổ mới?

<a target="_blank" href=...> sẽ mở ra một cửa sổ mới, không có tên.

<a target="example" href=...> mở ra một cửa sổ mới có tên “example”, miễn là trước đó chưa có cửa sổ hay khung nào trùng với tên này.

Lưu ý rằng thuộc tính TARGET không thuộc về HTML 4 Strict. Trong HTML 4 Strict, các cửa sổ mới chỉ có thể tạo được bằng JavaScript. (Xem mục hỏi đáp tiếp theo.) Ngoài ra, các liên kết mở cửa sổ mới sẽ có thể làm độc gỉa khó chịu nếu không nhằm mục đích hợp lý (mà điều này lại theo ý kiến chủ quan của độc gỉa).

6.4. Làm thế nào để tạo nên liên kết mở ra một cửa sổ mới với kích cỡ định trước?

Bằng HTML, không cách nào có thể kiểm soát được kích thước (hay cách bài trí hoặc đặc điểm khác) của một của sổ mới. Tuy nhiên, bằng JavaScript bạn có thể chỉ định những chi tiết như vậy khi dùng hàm window.open(). Bắt đầu từ một liên kết HTML thông thường (có thể là cái liên kết mở cửa sổ mới của mục hỏi-đáp trước). Sau đó dùng thuộc tính ONCLICK để bật ra một cửa sổ mới với kiểu dáng mong muốn cho độc gỉa có trình duyệt hỗ trợ và đã bật JavaScript. Ví dụ sau đây quy định một cửa sổ  “popup” có kích cỡ 300 pixel × 150 pixel.

<a href="example.html" target="popup" onclick="window.open('example.html', 'popup', 'width=300,height=150'); return false">View Foo</a>

Bằng cách này, JavaScript có thể chỉ định một cửa sổ mới với dáng vẻ như mong muốn, mà không ngăn cản truy cập khi JavaScript không được hỗ trợ hoặc bị vô hiệu hóa.

Bên cạnh những tham số heightwidth (vốn nhận gía trị là số pixel), thì tham số thứ ba cho window.open() có thể bao gồm các tham số boole sau đây (nhận gía trị "yes" hoặc "no"): directories, location, menubar, resizable, scrollbars, status, and toolbar. Các tham số boole này kiểm soát sự hiện diện của các thành phần tương ứng trong cửa sổ được tạo nên.

Xem thêm

6.5. Làm thế nào để cho người dùng tải về một file từ trang web của tôi?

Một khi file đã được tải lên máy chủ, bạn chỉ cần dùng một thẻ tham chiếu neo để liên kết đến nó. Một ví dụ như là:
<a href="../files/foo.zip">Download Foo Now! (100kb ZIP)</a>

Có thể máy chủ cần được cấu hình với các loại file khác nhau. (Xem mục hỏi đáp tiếp theo.)

Xem thêm

6.6. Làm thế nào để buộc trình duyệt phải tải về một file? Làm thế nào buộc trình duyệt bản thân nó phải hiển thị hoặc chạy một file? Làm thế nào để buộc file phải được mở bằng một chương trình cụ thể?

Bạn không thể chắc làm được bất cứ việc nào trong số trên, bởi Web không hoạt động theo cách đó.

Khi trình duyệt yeu cầu một tài liệu (siêu văn bản, hình ảnh, âm thanh, đa phương tiện, v.v.) thì máy chủ sẽ báo trình duyệt về kiểu của file đó. Máy chủ cần được cấu hình hóa để nhận diện đúng kiểu của dữ liệu văn bản.

Sau đó trình duyệt sẽ quyết định phải làm gì với nó. Các trình duyệt khác nhau có thể hiển thị, và cũng được cấu hình hóa để hiển thị, các dạng tài liệu khác nhau. Các trình duyệt thường được cấu hình hóa những kiểu file khác bằng cách dùng các trình trợ giúp thích hợp hoặc bằng cách đề nghị người dùng lưu tài liệu vào hệ thống file.

RFC 2183 mô tả header Content-disposition, vốn có thể được dùng để gợi ý cách trình duyệt xử lý tài liệu thế nào. Gía trị “inline” gợi ý rằng tài liệu cần được tự động hiển thị, và gía trị “attachment” gợi ý rằng người dùng cần được nhắc trước khi tài liệu được hiển thị (hay sao lưu). Chú ý rằng cơ chế này có những ngụ ý quan trọng về an ninh, vốn được trình bày trong bản RFC.

Đa số các trình duyệt đều cho phép người dung tải về đĩa nếu họ muốn. Nếu file cần được lưu vào đĩa, nếu thực sự không còn cách nào khác để xử lý nó, thì kiểu MIME có thể là “application/octet-stream”. Tuy vậy, điều này nghĩa là “Tôi không thể hoặc sẽ không cho bạn biết nội dung này là gì.” Hơn nữa, kiểu MIME  “application/octet-stream” kích hoạt các ứng xử không đúng trong phiên bản HTTP của MSIE. Một cách làm tốt hơn có thể là một kiểu MIME tùy chỉnh như “application/x-some-explanation”, vốn sẽ tránh được những vấn đề này.

Xem thêm

6.7. Làm thế nào để tạo ra một nút bấm hoạt động như một liên kết?

Việc này tốt nhất là nên làm với một form nhỏ:

<FORM ACTION="[URL]" METHOD=GET>

<INPUT TYPE=submit VALUE="Text on button">

</FORM>

Nếu bạn muốn dàn hàng các nút cạnh nhau thì bạn sẽ phải đặt chúng vào một bảng 1 hàng, trong đó mỗi nút chiếm một ô riêng.

Lưu ý rằng các máy tìm kiếm có thể không tìm thấy tài liệu đích trừ khi có một đường liên kết bình thường khác ở trong trang đó.

Một nút, để đi đến trang khác, cũng có thể được lập bằng JavaScript, nhưng cách làm trên là với HTML chuẩn và hoạt động được cho nhiều người đọc hơn.

6.8. Làm thế nào để tạo một nút quay lại trên trang web của tôi?

Bạn không thể làm điều này bằng HTML. Việc quay trở lại nghĩa là đến vị trí trước đây trong lịch sử. Bạn có thể tạo ra một đường liên kết tới URL được chỉ định trong đoạn đầu HTTP Referer (có ở biến môi trường HTTP_REFERER trong các chương trình CGI), nhưng điều này tạo nên một đường dẫn tiến đến một vị trí mới trong lịch sử máy của bạn. Ngay cả khi đó, thông tin từ đoạn đầu Referer có thể là sai. Một số trình duyệt gửi đoạn đầu Referer sai cách khi người dùng nhập URL bằng tay hoặc dùng công cụ đánh dấu trang (bookmark). Một số không bao giowf gửi đoạn đầu Referer (điều này tùy ý, không bắt buộc). Bạn có thể dùng phương thức history.back() của JavaScript để tạo nên một nút (hoặc link) quay lui. Lẽ tự nhiên, điều này chỉ hoạt động được khi JavaScript được hỗ trợ và bật lên.

Hơn nữa, cần lưu ý ràng ngoài tính năng “quay lại” thì chỉ có một công cụ di chuyển khác được dùng phổ biến hơn, đó chính là link. Các độc gỉa chắc sẽ phải biết dùng tính năng quay lại trên trình duyệt của họ. Các độc gỉa không biết các dùng tính năng cơ bản của tình duyệt sẽ thấy lẫn khi các trang web khác nhau bắt chước những tính năng đó theo cách khác nhau.

Xem thêm

6.9. Làm thế nào để tạo một nút cho phép tự động đánh dấu trang trên website của tôi?

Bạn không thể làm điều này bằng HTML. Tuy nhiên, Internet Explorer 4+ hỗ trợ phương thức window.external.AddFavorite(), một phần mở rộng riêng của Microsoft cho JavaScript để mở một hộp thoại “Add to Favorites”. Ví dụ sau tránh tạo ra một nút không hoạt động với những người dùng trình duyệt khác hay với những trình duyệt vô hiệu hóa JavaScript:

function addf() {
    window.external.AddFavorite('http://www.htmlhelp.com/', 'Web Design Group'); }
if (window.external && typeof window.external.AddFavorite != 'undefined'){
        document.write(''); }

Lưu ỷ rằng các độc gỉa đã biết dùng tính năng đánh dấu trang thì chắc hẳn sẽ đánh dấu được trên website của bạn. Tương tự, số ít độc gỉa không biết dùng đánh dấu trang thì có lẽ cũng không biết dùng tính năng đánh dấu mà bạn tạo cho họ. Các độc gỉa không biết các dùng tính năng cơ bản của tình duyệt sẽ thấy lẫn khi các trang web khác nhau bắt chước những tính năng đó theo cách khác nhau.

6.10. Làm thế nào để tạo một nút để in trang đang xem?

Bạn không thể làm điều này bằng HTML. Tuy nhiên, một số trình duyệt hỗ trợ phương thức window.print() của JavaScript, vốn mở ra một cửa sổ “Print”. Ví dụ sau tránh tạo ra một nút không hoạt động với những người dùng trình duyệt khác hay với những trình duyệt vô hiệu hóa JavaScript:

if (window.print) {
    document.write(''); }

Lưu ý rằng các độc gỉa có máy in thì chắc sẽ biết dùng tính năng in từ trình duyệt. Các độc gỉa không biết các dùng tính năng cơ bản của tình duyệt sẽ thấy lẫn khi các trang web khác nhau bắt chước những tính năng đó theo cách khác nhau.

Xem thêm

6.11. Làm thế nào để tạo một nút để đóng cửa sổ đang mở?

Bạn không thể làm điều này bằng HTML. Tuy nhiên, phương thức window.close() của JavaScript sẽ đóng một cửa sổ. Ví dụ sau tránh tạo ra một nút không hoạt động với những người dùng trình duyệt khác hay với những trình duyệt vô hiệu hóa JavaScript:

if(self.close) {
    document.write(''); }

Lưu ý rằng các độc gỉa có thể đã quen thuộc với thao tác cơ bản đóng cửa sổ trên hệ thống của họ. Các độc gỉa không biết các dùng tính năng cơ bản của tình duyệt sẽ thấy lẫn khi các trang web khác nhau bắt chước những tính năng đó theo cách khác nhau.

6.12. Làm thế nào để tạo đường link có nhiệm vụ gửi email cho tôi?

Hãy dùng một liên kết mailto, kiểu như

Send me email at <A HREF="mailto:me@mydomain.com">me@mydomain.com</A>.

Lưu ý rằng  bất kì địa chỉ email nào bạn xuất bản lên WWW thế này có thể sẽ phải nhận hàng đống thư thương mại mà không được phép trước. Tốt hơn là bảo vệ địa chỉ email thực sự của bạn (chẳng hạn, bằng cách lọc thư đến, hay dùng một địa chỉ riêng cho các đường kết nối mailto).

6.13. Làm thể nào để chỉ định một chủ đề trong thư gửi theo đường link mailto?

Bạn không thể chắc chắn làm điều này. Các phương thức thường được đăng không có hiệu qủa trong tất cả tổ hợp giữa trình duyệt và phần mềm email (ngay cả giữa những tổ hợp thông dụng nhất), và trong số đó nhiều cái có nhược điểm lớn: khi chúng bị lỗi thì email sẽ mất.

Nếu bạn thực sự cần có tiêu đề, thì có thể làm được bằng cách cung cấp một form (mẫu) trên trang web của bạn, vốn đệ trình (submit) dữ liệu đến một chương tình CGI có tác dụng gửi email dữ liệu form đó với dòng chủ đề bạn muốn. Tuy nhiên, trong form đó phải có một dòng nhập địa chỉ email người nhận, và bạn phải hi vọng độc gỉa nhập vào đúng.

Sau đây là một số cách khác để chuyển thông tin kiểu chủ đề:

  • Tạo ra các tên email khác chỉ dùng riêng cho các đường kết nối mailto, nhờ vậy bạn sẽ biết rằng mọi thứ gửi đến email khó đó là nhằm phản hồi đến các trang web tương ứng.
  • Bộ phận xử lý mail cho nhiều trình duyệt web có kèm theo một đoạn đầu (header) “X-Url” nhằm chỉ định URL của trang Web có chứa đường kết nối mailto đó. Nếu bạn cấu hình hóa trình đọc mail của bạn để hiển thị đoạn đầu này thì nhiều lúc bạn sẽ thấy được người gửi cần phải hồi đến trang web nào.  Nếu bạn cấu hình hóa trình đọc mail của bạn để hiển thị tiêu đề đầu này, bạn sẽ thấy trang web mà người gửi thường phản hồi tới.
  • Dùng <a href="mailto:user@site" title="Your Subject">. Đa số trình duyệt sẽ lờ đi thuộc tính TITLE, nhưng vài trình duyệt nhỏ sẽ dùng nó như một chủ đề của email. Tất cả trình duyệt sẽ gửi email này.
  • Dùng <a href="mailto:user@site?subject=Your%20Subject">, vốn đặt “Your Subject” (dấu cách được mã hóa thành “%20“) trong trường đầu đề “Subject” của nội dung thư, ở hầu hết trình duyệt hiện đại. Tuy vậy cần lưu ý rằng bạn sẽ mất thư từ những người dùng trình duyệt cũ, nên bạn cần cân nhắc xem cách làm chủ đề tự động này có đáng để bị mất các thư đó không.

Xem thêm

6.14. Làm thế nào để ẩn dấu gạch chân dưới các đường link?

Nếu bạn muốn ẩn các dấu gạch chân đường link mà bạn xem trong trình duyệt, thì hãy kiểm tra các tùy chọn cấu hình của trình duyệt đó. Chẳng hạn, trong Mozilla Firefox hãy xem phần Tools > Options… > Fonts & Colors… với tùy chọn Underline links, trong Opera thì Tools > Preferences… > Web pages với các tùy chọn Underline normal links và Underline visited links, còn trong MSIE 6 xem Tools > Internet Options > Advanced > Browsing với tùy chọn Underline links.

Nếu bạn muốn tránh không cho các đường link trông trang bị gạch dưới khi người dùng thấy [hươ chuột qua?] chúng thì không có cách nào bằng HTML để hoàn thành việc này. Bạn có thể đề xuất cách biểu thị này bằng style sheet qua việc định nghĩa

a:link, a:visited, a:active {text-decoration: none}

6.15. Làm thế nào để có hai bộ đường link với màu sắc khác nhau?

Bạn có thể đề xuất cách biểu thị này bằng style sheet. Trước hết, hãy chỉ định màu sắc cho các đường link thường, như:

a:link              {color: blue;   background: white}
a:visited           {color: purple; background: white}
a:active            {color: red;    background: white}

Tiếp theo, xác định các đường link mà bạn muốn có màu khác nhau. Bạn có thể dùng thuộc tính CLASS trong HTML của bạn như sau:

<a class="example1" href="[URL]">[link text]</a>

Tiếp theo, trong style sheet của bạn, hãy dùng selector (chỉ định) với các link có thuộc tính CLASS như thế này:

a.example1:link     {color: yellow; background: black}
a.example1:visited  {color: white;  background: black}
a.example1:active   {color: red;    background: black}

Một cách làm khác, bạn có thể xác định một phần tử có chứa các đường link mà bạn muốn có màu khác nhau, như thế này:

 ...

Sau đó, trong your sheet của bạn, hãy dùng selector (chỉ định) với các link trong phần tử chứa này:

.example2 a:link    {color: yellow; background: black}
.example2 a:visited {color: white;  background: black}
.example2 a:active  {color: red;    background: black}

Xem thêm

6.16. Làm thế nào để làm đường link thay đổi khi di chuột qua chúng?

Trong style sheet của bạn, hãy dùng gỉa lớp hover để chỉ định một diện mạo khác với các link mà con trỏ chuột hươ qua. Hãy chỉ định gỉa lớp hover theo sau các gỉa lớp linkvisited. Chẳng hạn:

A:link { color: blue ; background: white }
A:visited { color: purple ; background: white }
A:hover { color: red ; background: white }

Xem thêm

6.17. Tại sao các đường link của tôi bị hiện ra sai hoặc không tải được?

Mã lệnh HTML của bạn có thể chứa lỗi cú pháp có ảnh hưởng đến link. Chảng hạn, có thể không có dấu nháy quanh các gía trị thuộc tính đòi hỏi dấu nháy, hoặc có thể thiếu mất một dấu đóng nháy sau cuối gía trị thuộc tính HREF.

Thậm chí mã lệnh markup hoàn toàn hợp lệ vẫn có thể phạm phải các lỗi của trình duyệt. Chẳng hạn, ngay cả kí tự “>” là hợp lệ bên trong các gía trị thuộc tính (được nháy), nhưng một số trình duyệt cổ vẫn nghĩ rằng thẻ kết thúc ở đây, bởi vậy phần còn lại của thuộc tính thẻ được hiển thị như chữ thường. Tương tự, kí tự “>” bên trong dòng chú thích vẫn có thể phạm lỗi trình duyệt tương tự.

Một ví dụ khác, những phiên bản cũ hơn của Netscape Navigator có vấn đề với các đường link tới neo có tên khi mà các neo này được đặt trong bảng có dùng thuộc tính ALIGN.

Cũng có thể là các URL của bạn không đúng. Chẳng hạn phần mềm viết web của bạn có thể dùng các URL file (như file:C:\path\file.html). Nếu vậy, bạn phải thay thế chúng bằng các URL tương đối (như file.html) hay URL http (như http://example.com/path/file.html).

Các trình thẩm định HTML sẽ tìm ra lỗi cú pháp trong mã lệnh bạn viết. Các bộ kiểm tra/lint HTML có thể tìm một số lỗi cú pháp và cả mã lệnh hợp lệ như gây lỗi ở trình duyệt. Các bộ kiểm tra lint có thể tìm các đường link tớiURL không đúng.

Xem thêm

6.18. Tại sao đường link của tôi hoạt động được trong một trình duyệt này nhưng không được ở trình duyệt khác?

Liệu có một dấu cách, dấu #, ?, hay kí tự đặc biệt khác trong đường dẫn hay tên file không? Các dấu cách không hợp lệ trong URL. Nếu bạn mã hóa dấu cách bằng việc thay thế nó với %20, đường link của bạn sẽ có hiệu lực.

Bạn có thể mã hóa kí tự bất kì trong URL bằng dấu % cùng với hai chữ số gía trị hex (hệ thập lục phân) của kí tự đó. (Các “chữ số” A-F có thể viết in hay viết thường đều được.) Theo tiêu chuẩn, thì chỉ những chữ cái, chữ số và các kí tự đặc biệt -_.!*'() là không cần phải mã hóa.

Bạn nên mã hóa tất cả các kí tự khác khi chúng xuất hiện trong một URL, trừ khi chúng được sử dụng với mục đích riêng. Chẳng hạn, nếu bạn muosn chuyển gía trị “Jack&Jill” tới một văn lệnh CGI, bạn cần phải mã hóa kí tự “&” thành “%26”, và URL có thể sẽ là: http://www.foo.com/foo.cgi?rhyme=Jack%26Jill&audience=child

Lưu ý rằng kí tự “?” và các kí tự “&” khác trong URL này lại không được mã hóa vì chúng được dành riêng cho mục đích đặc biệt. Tuy vậy, khi URL này được dùng làm thuộc tính trong một tài liệu HTML, thì dấu “&” phải được mã hóa thành “&amp;”, như sau: <a href="http://www.foo.com/foo.cgi?rhyme=Jack%26Jill&amp;audience=child">

Xem thêm

6.19. Tại so đường link của tôi đến một file … lại tải về một đống các kí tự?

Nếu bạn đang cố gắng kết nối đến một kiểu file cụ thể và không nhận được két qủa mong muốn thì có thể là máy chủ cần phải cấu hình kiểu file đó. Hãy trao đổi với người quản trị để bổ sung các kiểu file này vào danh sách kiểu nội dung (content type). Sau đây là một loạt các kiểu thông dụng mà bạn có thể phải cấu hình hóa:

Kiểu nội dung Mô tả
application/msword Microsoft Word Document
application/octet-stream Unclassified binary data (often used for compressed file or
executable)
application/pdf PDF Document
application/vnd.ms-excel Microsoft Excel spreadsheet
application/zip ZIP archive
audio/x-wav WAV audio format
audio/midi MIDI audio format
audio/x-pn-realaudio RealAudio
image/gif GIF, định dạng hình ảnh
image/jpeg JPEG, định dạng hình ảnh
image/png PNG, định dạng hình ảnh
text/css CSS style sheet
text/html HTML document
text/plain Plain text
video/mpeg MPEG, định dạng video
video/quicktime QuickTime, định dạng video
video/x-msvideo AVI, định dạng video

Một cách khác để đảm bảo rằng file của bạn được gửi tới máy khách là hãy nén nó dưới dạng chuẩn. Gần như tất cả các máy chủ đều được định trước để xử lý đuôi .zip và loại file này cũng được nhiều người nhận biết.

Một số máy chủ (NCSA, Apache, v.v.) có thể được cấu hình hóa để hỗ trợ các kiểu nội dung người dùng cấu hình hóa. Về chi tiết thì phụ thuộc vào từng máy chủ, nên hãy hỏi người quản trị hoặc tham khảo tài liệu.

Lưu ý rằng Internet Explorer lại lờ đi một cách sai lầm những kiểu MIME được máy chủ cung cấp, nên đôi khi nó lại “làm đúng” khi server bị cấu hình hóa sai. Những trình duyệt khác thì nhất nhất tuân theo các kiểu MIME được máy chủ cấp, nên chúng sẽ làm lộ ra những cấu hình sai từ phía máy chủ.

Xem thêm

3 bình luận

Filed under Tin học

Ngôn ngữ lập trình Lua: những hỏi – đáp bên lề (phần 2)

Phần tiếp theo của Lua: những hỏi đáp bên lề trình bày về các vấn đề: dữ liệu, hệ điều hành, các thư viện, phần cứng, tính tương thích, API của C và Lua 5.2. Nội dung như sau:

2. Dữ liệu
2.1 Làm thế nào để truy cập các đối số dòng lệnh
2.2 Làm thế nào để bóc tách các đối số dòng lệnh
2.3 Làm thế nào để đọc được tất cả các dòng trong một file?
2.4 Đọc các số bằng cách nào?
2.5 Định dạng đẹp các chữ và số bằng cách nào?
2.6 Đọc dữ liệu CSV bằng cách nào?
2.7 Làm việc với dữ liệu nhị phân bằng cách nào?
2.8 Có các thư viejn biểu thức thường quy không?
2.9 Bóc tách các dữ liệu văn bản có cấu trúc phức tạp?
2.10 Có thư viện toán học nào cho số phức, các số có độ chính xác coa, với ma trận, v.v.?
2.11 Bóc tách văn bản XML bằng cách nào?
2.12 Giao tiếp với các cơ sở dữ liệu như thế nào?
2.13 Lưu giữ trạng thái chương trình?
Tiếp tục đọc

7 bình luận

Filed under Tin học

Ngôn ngữ lập trình Lua: những hỏi-đáp bên lề

Tài liệu được dịch từ Lua Unofficial FAQ (uFAQ) http://www.luafaq.org/

Lua [http://www.lua.org/] là một ngôn ngữ rất nhỏ gọn. Có thể còn ít bạn đọc biết đến Lua, nhưng nếu có thời gian, bạn nên tìm hiểu xem sao. Lua được dùng rất nhiều cho việc scripting (viết những đoạn chương trình ngắn), đặc biệt là những đoạn plug-in do những người sử dụng viết thêm để mở rộng cho trình ứng dụng lớn có sẵn. Một ví dụ là trò chơi World of Warcraft (WoW), người chơi có thể điều chỉnh độ mạnh yếu của các nhân vật, hay sửa đổi một số tính chất trò chơi bằng các đoạn lệnh Lua, thật thú vị!

Bài hỏi đáp này có thể không phù hợp với bạn đọc mới lập trình, nhưng nếu bạn đã biết qua ngôn ngữ Lua hay đã từng lập trình quen với C hay Python hoặc những ngôn ngữ tương tự, thì đây là bài đọc rất thú vị và hé lộ nhiều đặc điểm hay của ngôn ngữ Lua.

Bài hướng dẫn này được chia làm hai phần: phần 1 ở đây còn phần 2 ở trang này.

uFAQ

Tiếp tục đọc

2 bình luận

Filed under Lua