Các tính năng ẩn của HTML


110

HTML là ngôn ngữ được sử dụng rộng rãi nhất (ít nhất là ngôn ngữ đánh dấu) đã không nhận được tín dụng phù hợp.
Xét rằng nó đã tồn tại trong nhiều năm, những thứ như điều khiển FORM / INPUT vẫn giữ nguyên mà không có điều khiển mới nào được thêm vào.

Vậy ít nhất từ ​​những tính năng hiện có, bạn có biết những tính năng nào chưa được nhiều người biết đến nhưng rất hữu ích.

Tất nhiên, câu hỏi này thuộc về:

Tính năng ẩn của JavaScript
Tính năng ẩn của CSS
Tính năng ẩn của C #
Tính năng ẩn của VB.NET
Tính năng ẩn của Java
Tính năng ẩn của ASP cổ điển
Tính năng ẩn của ASP.NET
Tính năng ẩn của Python
Tính năng ẩn của TextPad
Tính năng ẩn của Eclipse

Không đề cập đến các tính năng của HTML 5.0, vì nó đang trong bản nháp

Vui lòng chỉ định một tính năng cho mỗi câu trả lời .

Câu trả lời:


244

Sử dụng đường dẫn tuyệt đối không phụ thuộc vào giao thức:

<img src="//domain.com/img/logo.png"/>

Nếu trình duyệt đang xem một trang trong SSL thông qua HTTPS, thì trình duyệt sẽ yêu cầu nội dung đó bằng giao thức https, nếu không, trình duyệt sẽ yêu cầu nội dung đó bằng HTTP.

Điều này ngăn thông báo lỗi khủng khiếp "Trang này chứa cả mục an toàn và không an toàn" trong IE, giữ tất cả các yêu cầu nội dung của bạn trong cùng một giao thức.

Lưu ý: Khi được sử dụng trên <link> hoặc @import cho biểu định kiểu, IE7 và IE8 tải tệp xuống hai lần . Tuy nhiên, tất cả các mục đích sử dụng khác đều tốt.


29
Đó không phải là một tính năng HTML mà là một tính năng URL / URI.
Gumbo

44
@Gumbo: Đúng, đó là một tính năng của URI, nhưng tôi thấy rằng nó đủ tốt để bẻ cong các quy tắc và đưa vào đây. Và tôi không mong đợi một tính năng ẩn của Thông số URI sẽ sớm xuất hiện. :)
Paul Ailen

2
một dấu gạch chéo là tương đối từ phần miền, không phải từ phần giao thức
SztupY

2
IE là rất nhiều DUMB! Tại sao nó lại DL tệp hai lần?

5
Có một nhược điểm lớn: khi tệp được lưu vào đĩa và được truy cập bằng file:giao thức, trình duyệt sẽ không thể tìm thấy tài nguyên (ví dụ: CDN hoặc một số máy chủ bên ngoài khác).
Marcel Korpel

138

Thẻ nhãn liên kết nhãn với phần tử biểu mẫu một cách hợp lý bằng thuộc tính "for". Hầu hết các trình duyệt biến điều này thành một liên kết để kích hoạt phần tử biểu mẫu liên quan.

<label for="fiscalYear">Fiscal Year</label>
<input name="fiscalYear" type="text" id="fiscalYear"/>

24
vâng, đáng ngạc nhiên là có rất ít trang web tích cực sử dụng điều này. Tôi đã thấy các trang web sử dụng js để làm điều này ...
Boris Callens

2
Đã phát hiện ra cái này khá gần đây.
Arnis Lapsa

4
cagdas, không có tính năng thực sự ẩn trong HTML, đó là một tiêu chuẩn cụ thể.
mí mắt

54
Để mở rộng câu trả lời, người ta cũng có thể quấn một đầu vào với một nhãn và bỏ qua cho thuộc tính: <label> Năm tài chính <input name = "fiscalYear" type = "text" /> </ label>
eyelidlessness

32
Sử dụng hộp kiểm và nút radio mà không có nó sẽ là một tội ác.
Kornel

136

Các contentEditable tài sản cho (IE, Firefox, và Safari)

<table>
    <tr>
      <td><div contenteditable="true">This text can be edited<div></td>
      <td><div contenteditable="true">This text can be edited<div></td>
    </tr>
</table>

Điều này sẽ làm cho các ô có thể chỉnh sửa được! Hãy tiếp tục, hãy thử nó nếu bạn không tin tôi.


7
Câu hỏi yêu cầu các tính năng không được HTML5 giới thiệu
Quentin

15
David Dorward, Thật không công bằng khi nói rằng nó được giới thiệu với HTML5, vì contentEditable đã được MS giới thiệu trong IE 5.5, nhưng đúng là nó chưa được chuẩn hóa cho đến khi có HTML5; Tyson & Steve, contentEditable đã được giới thiệu cho Safari trong phiên bản 2.0, nhưng nhiều phương pháp định dạng quan trọng đã không được thêm vào cho đến khi 3.x; Victor H Valle, tùy thuộc vào loại tài liệu của bạn. HTML 4 sẽ mở rộng nó thành = "true" khi thu gọn.
mí mắt.

2
thử nó liên kết không dẫn đến một ví dụ thích hợp
Gordon Gustafson

4
@Binoj - Hoàn toàn không. "Thuộc tính có thể thay đổi nội dung là thuộc tính được liệt kê có từ khóa là chuỗi rỗng, true và false" - w3.org/TR/html5/editing.html
Quentin

2
Tốt hơn, hãy thêm phần sau làm bookmarklet để cho phép chỉnh sửa bất kỳ trang web nào bạn đang truy cập: javascript: document.body.contentEditable = 'true'; document.designMode = 'on'; void (0);
Amro

102

Tôi nghĩ rằng thẻ optgroup là một tính năng mà mọi người không thường xuyên sử dụng. Hầu hết những người tôi nói chuyện không có xu hướng nhận ra rằng nó tồn tại.

Thí dụ:

<select>
  <optgroup label="Swedish Cars">
    <option value="volvo">Volvo</option>
    <option value="saab">Saab</option>
  </optgroup>
  <optgroup label="German Cars">
    <option value="mercedes">Mercedes</option>
    <option value="audi">Audi</option>
  </optgroup>
</select>

Thật không may, trình duyệt triển khai hệ thống phân cấp menu để lại nhiều điều mong muốn. Tôi nghi ngờ optgroup không được sử dụng nhiều vì các trường hợp sử dụng liên quan của nó rất ít và xa.
mí mắt.

1
Một cấp nên được hỗ trợ trong tất cả các trình duyệt. Một diễn đàn web tôi khác biệt ở chỗ sử dụng nó trong một số màn hình để chia danh sách diễn đàn thành các phần giống như được sử dụng trên trang chính.
staticsan

@staticsan. Tôi đồng ý rằng nó rất hữu ích cho việc phân loại nhỏ một số mục.
RichardOD

5
@eyelidless: Tôi thấy menu thả xuống mọi lúc đều thụt lề các phần tử hoặc sử dụng một số loại văn bản 'tiêu đề' như ---category---.
DisgruntledGoat

4
Đây là một tính năng gọn gàng mà tôi không biết!
Chrisb

100

Bit yêu thích của tôi là thẻ cơ sở, đây là một trình tiết kiệm nếu bạn muốn sử dụng định tuyến hoặc ghi lại URL ...

Giả sử bạn đang ở:

www.anypage.com/folder/subfolder/

Sau đây là mã và kết quả cho các liên kết từ trang này.

Neo thường xuyên:

<a href="test.html">Click here</a>

Dẫn đến

www.anypage.com/folder/subfolder/test.html

Bây giờ nếu bạn thêm thẻ cơ sở

<base href="http://www.anypage.com/" />
<a href="test.html">Click here</a>

Neo bây giờ dẫn đến:

www.anypage.com/test.html

48
Bạn cũng có thể chỉ sử dụng /images/image.png, với dấu gạch chéo ở đầu. :-)
molf

46
Thẻ cơ sở là một tùy chọn hạt nhân - nó tương đương với #define: nếu bạn không theo dõi nó, hãy làm cho nó thực sự rõ ràng với các nhà phát triển trong tương lai và biến nó thành một phần thực sự thấp của kiến ​​trúc trang web, điều này có thể dẫn đến sự bực bội lỗi không rõ ràng. Tôi chưa bao giờ cần cái này, hãy sử dụng một cách thận trọng.
annakata

2
Có, tôi cũng đã thấy thẻ cơ sở can thiệp vào JavaScript của tôi khi cố gắng tải động các tệp CSS vào trang. Ngoài ra, một lỗi trong IE6 yêu cầu bạn đóng thẻ (</base>) một cách rõ ràng, thẻ này không hợp lệ. Nhận xét có điều kiện có thể giúp làm điều đó.
avdgaag

4
Lưu ý rằng URL cơ sở được áp dụng cho mọi URL tương đối và không chỉ cho các đường dẫn URL tương đối. Vì vậy, tham chiếu #topsẽ được giải quyết thành "đầu" trong tài liệu chỉ mục gốc và lên "đầu" trong cùng một tài liệu.
Gumbo

17
Tôi thấy điều này cực kỳ hữu ích trong các tình huống mà tôi phải 'xem nguồn' và tải xuống HTML của một trang để làm việc với nó. Khi nguồn được tải xuống, bạn có thể thêm phần tử BASE với thuộc tính href thích hợp. Bằng cách này, bạn có thể làm việc cục bộ sau khi chỉ tải xuống HTML nguồn ... mà không cần tải xuống tất cả javascript, css và hình ảnh.
Andy Ford

99
<img onerror="{javascript}" />

onerror là một sự kiện JavaScript sẽ được kích hoạt ngay trước khi hình chữ thập đỏ nhỏ (trong IE) được hiển thị.

Bạn có thể sử dụng điều này để viết một tập lệnh sẽ thay thế hình ảnh bị hỏng bằng một số nội dung thay thế hợp lệ, để người dùng không phải đối phó với vấn đề chữ thập đỏ.

Ngay từ cái nhìn đầu tiên, điều này có thể được coi là hoàn toàn vô dụng, bởi vì, trước đây bạn không biết liệu hình ảnh có sẵn ở nơi đầu tiên hay không? Nhưng, nếu bạn cân nhắc, có những ứng dụng hoàn hảo hợp lệ cho điều này; Ví dụ: giả sử bạn đang cung cấp hình ảnh từ tài nguyên của bên thứ ba mà bạn không kiểm soát. Giống như gravatar của chúng tôi ở đây trong SO ... nó được cung cấp từ http://www.gravatar.com/ , một tài nguyên mà nhóm stackoverflow hoàn toàn không kiểm soát - mặc dù nó đáng tin cậy. Nếu http://www.gravatar.com/ bị lỗi, stackoverflow có thể giải quyết vấn đề này bằng cách sử dụng onerror.


Aha ... nếu đây là những gì tôi nghĩ, tôi nên biết điều này sớm hơn khi tôi thực sự cần nó. : /
Arnis Lapsa

để làm rõ, onerror là một sự kiện javascript (giống như onclick) cho phép bạn thực hiện điều gì đó khi hình ảnh không tải được.
Jehiah

1
Daniel Silveira, bạn sẽ làm rõ rằng điều này, trên thực tế, chạy mã onerror trong trường hợp hình ảnh bị hỏng (ví dụ: 404)? Bất kể, đây là một tính năng DOM, không phải là một tính năng HTML.
mí mắt.

2
Tôi đã có một lần sử dụng numpty cái này, trỏ đến một hình ảnh không tồn tại, bất cứ ai đệ quy ???
Pharabus

96

Các <kbd>yếu tố để đánh dấu lên cho đầu vào bàn phím

Ctrl+ Alt+Del


Có điều gì đặc biệt về <kbd> ngoài định dạng phông chữ khác không? nếu không, đây là danh sách các thẻ định dạng khác? w3schools.com/tags/tag_phrase_elements.asp
Bạn của bạn Ken

Không đặc biệt, chỉ cần không nổi tiếng Tôi không nghĩ rằng
Russ Cam

3
Không có gì theo mặc định, nhưng sẽ rõ ràng hơn nếu đánh dấu phần tử bằng CSS như cách SO làm.
Agent_9191

1
Không biết nó tồn tại, đó là niềm vui.
Kzqai

85
<blink>

Phải được sử dụng cho bất kỳ thứ gì quan trọng trên trang web. Hầu hết các trang web quan trọng gói gọn tất cả nội dung trong nháy mắt.

<marquee>

Tạo hiệu ứng cuộn thực tế, tuyệt vời cho sách điện tử, v.v.

Chỉnh sửa: Các bạn dễ tính, đây chỉ là một nỗ lực hài hước


62
Có lẽ câu hỏi nên đã xác định rằng bạn không nên danh sách các tính năng mà chúng tôi muốn vẫn ẩn.
Ben Blank

12
... Tôi đã sử dụng <blink>, như một phần của kiểu psuedo-terminal cho mã hiển thị div (: before {content: "drthomas @ house: ~ $";}: after {content: "_"; text -decoration: chớp mắt;} ... thật tuyệt vời. Có lẽ tôi nên tìm kiếm sự giúp đỡ. =]
David nói hãy phục hồi Monica

2
<marquee> <blink> Các thẻ HTML khó chịu nhất từ ​​trước đến nay !!! </blink> </marquee> Những thẻ này không bị ẩn mà chỉ là không được sử dụng vì một lý do.
Bạn của bạn Ken

2
Tôi quấn toàn bộ trang của tôi trong Marquee và Blink vì tôi chỉ là mát mẻ
Sphvn

3
Xin vui lòng. Cách sử dụng hợp pháp duy nhất cho <blink> là: Con mèo của Schroedinger là <blink> không </blink> đã chết. (Tôi nghĩ đây là trên xkcd, nhưng tôi không thể tìm thấy nó vào lúc này.)
Christopher Creutzig

84

Không được biết đến nhiều nhưng bạn có thể chỉ định lowsrccho hình ảnh sẽ hiển thị lowsrctrong khi tải srchình ảnh:

<img lowsrc="monkey_preview.png" src="monkey.png" />

Đây là một lựa chọn tốt cho những ai không thích xen kẽ hình ảnh .

Một câu đố nhỏ: tại một thời điểm, thuộc tính này đủ mờ để nó được sử dụng để khai thác Hotmail , vào khoảng năm 2000.


Điều này tôi không biết. Nó có thể được sử dụng để "tải" hoạt ảnh không?
Boris Callens

2
Tôi nhận được cảnh báo gian lận trong Opera từ liên kết "khai thác Hotmail" đó. : o
jrista 06/06

2
Đó là một trang web bảo mật, nó an toàn.
Joey Robert

27
Nhưng nó thuộc tính độc quyền. msdn.microsoft.com/library/ms534138(VS.85).aspx
Gumbo

17
Thuộc tính này không được dùng nữa kể từ HTML4 - bạn không nên sử dụng thuộc tính này trong các trang web sản xuất.
Ben Hull

67

DELINSđể đánh dấu nội dung đã xóa và đã chèn:

HTML <del>sucks</del> <ins>rocks</ins>!

10
Chắc chắn là không đủ dùng.
mí mắt

2
@eyelidless: đơn giản là không có đủ tình huống để đánh dấu văn bản đã xóa / chèn là hữu ích.
DisgruntledGoat

2
Tôi có thể thề rằng StackOverflow đã sử dụng <ins><del>trên các trang Bản sửa đổi vào một thời điểm nào đó, nhưng bây giờ nó sử dụng <span class="diff-add"><span class="diff-delete">. :(
hệ thống PAUSE

1
@DisgruntledGoat lịch sử sửa đổi wiki? rất nhiều trường hợp sử dụng cho nó
HorusKol

3
@Horus: chắc chắn bạn có thể tìm thấy các công dụng, nhưng trong một kế hoạch lớn của những thứ đó vẫn không phải là một số lượng lớn các tình huống.
Không hài lòng vào

58

Các nút tag là mớiinput submitthẻ và rất nhiều người dân vẫn chưa quen với nó. Ví dụ, văn bản trong nút có thể được tạo kiểu bằng thẻ nút.

<button>
    <b>Click</b><br />
    Me!
</button>

Sẽ hiển thị một nút có hai dòng, dòng đầu tiên in đậm " Nhấp vào " và dòng thứ hai nói "Tôi!". Hãy thử nó ở đây .


15
Thật xấu hổ khi nó bị hỏng trong IE <8. Có thể giải quyết các vấn đề, nhưng điều đó có thể gây khó khăn, và đôi khi bạn nhấn vào bảo vệ bảo mật chạy giữa máy chủ web và môi trường lập trình phía máy chủ.
Quentin

6
Nhưng IE <8 sẽ gửi nội dung của phần tử chứ không phải giá trị của nó. Tôi tin rằng một số phiên bản sẽ luôn coi nó là một điều khiển thành công (ngay cả khi nó không được nhấp vào).
Quentin

4
Và nếu bạn đặt nó thành <button contenteditable>, bạn cũng có thể thay đổi văn bản nút! Chỉ cho bất kỳ ai có thể tìm thấy cách sử dụng hợp lệ cho nó. :)
Gavin

4
Tôi chưa bao giờ hiểu tại sao lại có kiểu gửi "đầu vào". Nó không phải nhập bất cứ thứ gì, chỉ gửi những gì bạn đã nhập trên các trường khác.
DisgruntledGoat

3
@DisgruntledGoat: cặp tên / giá trị của nó thực sự sẽ được gửi. Hữu ích nếu bạn có nhiều hơn một nút trong một biểu mẫu (ví dụ: chỉnh sửa, xóa, di chuyển, v.v.) và muốn phân biệt nút được nhấn. Thật không may, điều tương tự không hoạt động buttontrong IE <8, nó gửi một cách đáng kinh ngạc các cặp tên / giá trị của TẤT CẢ buttoncác phần tử.
BalusC

56

Chỉ định css để in

<link type="text/css" rel="stylesheet" href="screen.css" media="screen" />
<link type="text/css" rel="stylesheet" href="print.css"  media="print" />

1
Phát hiện ra rằng một vài tuần trước
Daniel Moura

41
Không thực sự ẩn imo.
Dmitri Farkov 22/09/09

Đây là cách sử dụng phổ biến.
UpTheCreek

Nếu bạn chưa xử lý này trước đây, tôi hy vọng rằng bạn chưa thực hiện bất kỳ trang web sản xuất trước khi ...
Kzqai

làm thế nào điều này có thể được coi là ẩn?
Marin

54

cái <dl> <dt><dd> các mặt hàng thường bị lãng quên và họ đứng cho Danh sách Definition, Term Definition và định nghĩa.

Chúng hoạt động tương tự như một danh sách không có thứ tự ( <ul>) nhưng thay vì các mục nhập đơn lẻ, nó giống một danh sách khóa / giá trị hơn.

<dl>
  <dt>What</dt><dd>An Example</dd>
  <dt>Why</dt><dd>Examples are good</dd>
</dl>

Ngoài ra, ngữ nghĩa dl / dt / dd thích hợp cho các danh sách tương tự (ví dụ: cấu trúc đã được khuyến nghị cho các cuộc hội thoại).
mí mắt.

2
Bản trình bày mặc định không đẹp, nhưng mọi người quên rằng các phần tử có thể được tạo kiểu theo nhiều cách với CSS.
DisgruntledGoat

18
Điều thú vị hơn mà thường bị lãng quên là định dạng là key / value / value / value / value / key / value
Quentin 23/07/09

1
@D_N, tôi nghĩ chỗ bất đồng nằm ở chỗ tôi coi cách sử dụng được đề xuất là một phần của định nghĩa và ngữ nghĩa, thay vì tách biệt và mâu thuẫn với nó.
mí mắt

1
@D_N và @eyelidlessness - check out nốt Bruce Lawson trên đánh dấu một cuộc trò chuyện ngữ nghĩa ... cộng với ban giám khảo vẫn ra trên các yếu tố thoại HTML5 ... brucelawson.co.uk/2006/...
Fenton

52

Không chính xác bị ẩn, nhưng (và đây là lỗi của IE) không đủ người biết về thead, tbody, tfoot cho sở thích của tôi. Và có bao nhiêu người trong số các bạn biết rằng tfoot được cho là xuất hiện phía trên tbody trong đánh dấu?


1
boris callens, Vâng, tbody được ngụ ý nếu không có cái nào trong số cái, tbody và tfoot.
mí mắt

2
Nếu IE5 đã triển khai TBODY đúng cách, thì sẽ có nhiều người sử dụng nó hơn. Đây là vấn đề chính của vài năm trước. Mozilla và Opera hỗ trợ TBODY cuộn, điều này thực sự tuyệt vời; Thật không may, IE5 đã không.
staticsan

9
Chúng hữu ích cho việc in ấn vì nó sẽ đặt theadtfootở đầu và cuối mỗi trang. Thật tiếc là không có cơ chế lặp lại theadtrong trình duyệt, khi bạn có các bảng dài dài.
DisgruntledGoat

1
Tôi biết rằng bàn chân đã vượt lên trên thân người, và tôi nghĩ nó khá ngu ngốc. Tôi đặt bàn chân của mình bên dưới, nơi nó có ý nghĩa, gặp lỗi trình xác thực, di chuyển bàn chân phía trên tbody (nhầm lẫn nhưng luôn tuân thủ) và đoán xem ?! Khi bạn cố gắng làm nổi bật bảng, trình duyệt (ít nhất là FF) sẽ đánh dấu bàn chân TRƯỚC phần thân, ngay cả khi nó nằm dưới phần thân một cách trực quan! Và sau đó!!! khi bạn sao chép nó vào một trình soạn thảo văn bản, nó TRÊN phần thân một cách trực quan. Quy tắc hoàn toàn tùy ý.
Anthony

3
@Anthony: có lý nếu bạn có kết nối chậm, điều đó có nghĩa là bạn có thể xem tất cả đầu trang và chân trang trong khi nội dung bảng vẫn đang tải.
me_và

50

Thẻ wbrhoặc ngắt từ. Từ Quirksmode:

(ngắt từ) có nghĩa là: "Trình duyệt có thể chèn ngắt dòng ở đây, nếu muốn." Trình duyệt không nghĩ rằng việc ngắt dòng không cần thiết sẽ không xảy ra.

<div class="name">getElements<wbr>ByTagName()</div>

Tôi cung cấp cho trình duyệt tùy chọn thêm dấu ngắt dòng. Điều này sẽ không cần thiết đối với độ phân giải quá lớn, khi bảng có nhiều không gian. Tuy nhiên, trên các độ phân giải nhỏ hơn, các ngắt dòng được đặt một cách chiến lược như vậy sẽ giữ cho bảng không phát triển lớn hơn cửa sổ và do đó gây ra các thanh cuộn ngang.

Cũng có &shy;thực thể HTML được đề cập trên cùng một trang. Điều này giống như wbrnhưng khi ngắt được chèn một dấu gạch ngang (- ) được thêm vào để biểu thị ngắt. Giống như cách nó được thực hiện trong bản in.

Một ví dụ:

TextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextText


2
Hãy cẩn thận bởi vì có trình duyệt hỗ trợ người nghèo về cái này
Christophe Eblé

7
"IE8 as IE8" không hỗ trợ nó và nó có lỗi trong Safari 3.0 dành cho windows. Ngoài ra hỗ trợ là khá tốt. Tham khảo biểu đồ tương thích trong liên kết.
aleemb

Hmm tham chiếu trang web đã đánh dấu thẻ này là không được dùng nữa và vô dụng, ai đúng? reference.sitepoint.com/html/wbr
Christophe Eblé

Nó có thể không được dùng nữa như một phần của đặc tả HTML nhưng nó vẫn hoạt động trong các trình duyệt. Bất cứ khi nào nghi ngờ, hãy xem xét phán quyết của QuirksMode (bảng tính tương thích hiện được Google tài trợ).
aleemb

Có vẻ như đây sẽ là một thứ rất hữu ích để đưa vào tiêu chuẩn css tiếp theo!
James

43

Một tính năng không được sử dụng nhiều là thực tế là hầu hết mọi phần tử, cung cấp nội dung hiển thị trên trang, đều có thể có thuộc tính 'title'.

Việc thêm một thuộc tính như vậy khiến 'chú giải công cụ' xuất hiện khi con chuột được 'di chuột qua' trên phần tử và có thể được sử dụng để cung cấp thông tin không cần thiết - nhưng hữu ích - theo cách không khiến trang trở nên quá đông đúc . (Hoặc nó có thể là một cách để thêm thông tin vào một trang đã đông đúc)


Có, thuộc tính "title" (tiêu đề) khá hữu ích — đặc biệt là đối với các phần tử được dùng để nhấp vào.
Steve Harrison

6
Chú giải công cụ xuất hiện dành riêng cho trình duyệt. Không phải tất cả các trình duyệt sẽ hiển thị thuộc tính tiêu đề giống nhau. Nhưng đó là một tính năng hay mà tôi chắc chắn sử dụng.
Travis

8
Thuộc tính tiêu đề rất hữu ích, nhưng chỉ khi được sử dụng thích hợp. Hầu hết các trình duyệt chỉ hiển thị chú giải công cụ trong vài giây trước khi nó biến mất. Tôi ghét điều đó khi các nhà thiết kế cảm thấy cần phải điền vào thuộc tính tiêu đề với 3 hoặc 4 dòng văn bản khiến bạn phải di chuột qua, sau đó lại di chuột vào để đọc phần còn lại của nó.
Priestc

Sử dụng điều này cùng với jQuery tương đương với sự tuyệt vời.
Levi Morrison,

Levi - bạn có thể đưa ra một số ví dụ?
belugabob

38

Áp dụng nhiều lớp html / css cho một thẻ. Bài tương tự ở đây

<p class="Foo Bar BlackBg"> Foo, Bar and BlackBg are css classes</p>

22
Đó là các lớp HTML, không phải lớp CSS. CSS không có các lớp (nó có các bộ chọn lớp). Các lớp HTML hữu ích cho những thứ khác ngoài CSS.
Quentin

36
Chà! Tôi chỉ đơn giản là không thể vượt qua thực tế là mọi người thấy đây là một tính năng "ẩn". Tôi cảm thấy thật ngu ngốc khi đăng một số tính năng "thực sự ẩn" bởi vì những người đã ủng hộ điều này có lẽ sẽ không hiểu được việc mở rộng DTD nghĩa là gì.
aleemb

5
d03boy, p.foo, p.var không giống với p.foo.bar. Cái trước chọn bất kỳ đoạn nào có lớp "foo" hoặc "var", cái sau chọn một đoạn có cả hai lớp.
mí mắt

5
Vấn đề liên quan đến các lớp HTML là một điểm tốt, bởi vì nó đưa tôi đến một điểm - html không nên biết về css .. bạn 'nên' có thể tạo html và chuyển nó cho một nhà thiết kế có thể thực hiện thiết kế của họ mà không cần cần phải thay đổi html (vẫn chưa hoàn toàn đúng;)) .. vì vậy điều này phụ thuộc vào việc bạn đặt tên và cách bạn sử dụng các lớp .. không tạo các lớp để nhắm mục tiêu thuộc tính css .. sử dụng các lớp để xác định phần tử 'là gì '.
mandmycode

1
Về mặt kỹ thuật, "Foo Bar BlackBg" là một lớp đơn và p.foo chỉ là đường cú pháp cho p [class ~ = foo] (xem thông số kỹ thuật ). Tuy nhiên, sẽ dễ dàng hơn khi nghĩ về nó là có nhiều lớp.
Tgr

34

Tất cả chúng ta đều biết về Khai báo loại tài liệu hoặc của DTD (những thứ khiến trang của bạn bị lỗi với trình xác thực W3C). Tuy nhiên, có thể mở rộng DTD bằng cách khai báo danh sách thuộc tính cho các phần tử tùy chỉnh.

Ví dụ: trình xác thực W3C sẽ không thành công cho trang nàybehavior="mouseover"đã thêm vào <p>thẻ. Tuy nhiên, bạn có thể làm cho nó trôi qua bằng cách làm như sau:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
[
<!ATTLIST p behavior CDATA #IMPLIED>
]>

Xem thêm về DTD tùy chỉnh tại QuirksMode .


10
Tất nhiên, điều này làm cho nó trở thành "Hợp lệ: Ngôn ngữ đánh dấu tùy chỉnh của bạn" chứ không phải "XHTML 1.0 Chuyển tiếp"
Quentin

3
+1. Tôi không biết tại sao điều này là -1. Dù sao cần lưu ý rằng hỗ trợ trình duyệt là khá nhiều.
mí mắt.

Khá chắc chắn Opera hỗ trợ điều này.
Rich Bradshaw

2
@eyelidless nó chỉ hoạt động trong XHTML. Không hoạt động trong XHTML đáng tin cậy được gửi dưới dạng văn bản / HTML.
Kornel

2
Eesh, không phải là một fan hâm mộ của điều này. Đối với tôi, giá trị của HTML là tất cả mọi người trên hành tinh đều biết ý nghĩa của nó (dù ít hay nhiều), bởi vì tất cả chúng ta đều sử dụng các thẻ và thuộc tính giống nhau. Tôi không chắc tại sao classthuộc tính không đủ khả năng mở rộng.
Paul D. Waite

28

Chúng tôi có thể gán chuỗi mã hóa cơ sở 64 làm thuộc tính nguồn / href của hình ảnh, JavaScript, iframe, liên kết

ví dụ

<img alt="Embedded Image" width="297" height="246" 
  src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASkA..." />

div.image {
  width:297px;
  height:246px;
  background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASkA...);
}

<image>
  <title>An Image</title>
  <link>http://www.your.domain</link>
  <url>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASkA...</url>
</image>

<link rel="stylesheet" type="text/css"
  href="data:text/css;base64,LyogKioqKiogVGVtcGxhdGUgKioq..." />

<script type="text/javascript"
  href="data:text/javascript;base64,dmFyIHNjT2JqMSA9IG5ldyBzY3Jv..."></script>

Người giới thiệu

Làm cách nào để tạo hình ảnh bằng cách sử dụng đánh dấu HTML?

Tệp nhị phân đến Bộ mã hóa / Bộ dịch Base64


4
Đáng buồn thay, IE <8 không hỗ trợ điều này. Tuy nhiên, bạn có thể sử dụng MHTML để thay thế cho các trình duyệt này: phpied.com/mhtml-when-you-need-data-uris-in-ie7-and-under
Mathias Bynens

26

Gần đây tôi đã tìm hiểu về tập trường và thẻ nhãn. Như trên, không ẩn nhưng hữu ích cho các biểu mẫu.

giải thích <fieldset>

Thí dụ:

<form>
  <fieldset>
    <legend>Personalia:</legend>
    Name: <input type="text" size="30" /><br />
    Email: <input type="text" size="30" /><br />
    Date of birth: <input type="text" size="10" />
  </fieldset>
</form>

Vui lòng cung cấp một mẫu sử dụng này.
Binoj Antony


Đã phát hiện tập trường từ trang mẫu mvc aspnet. ^^
Arnis Lapsa

2
Không biết về cái này. Heres spec W3C: w3.org/TR/html401/interact/forms.html#h-17.10
MitMaro

Fields và huyền thoại là tuyệt vời. Một cách thực sự tốt để đánh dấu các biểu mẫu của bạn.
Neil Aitken

25

Bạn có thể sử dụng objectthẻ thay vì một iframeđể đưa tài liệu khác vào trang:

<object data="data/test.html" type="text/html" width="300" height="200">
  alt : <a href="data/test.html">test.html</a>
</object>

57
Điều này kết thúc hoạt động gần giống như iframe ngoại trừ việc nó ít được hỗ trợ hơn và có ít tính năng hơn.
Quentin

iframe bị phản đối, chúng tôi hy vọng sẽ nhận được hỗ trợ tốt hơn sớm,
Gordon Gustafson

12
iframe không bị phản đối trong HTML 5.
Zach

Nó có ngăn chặn các cuộc tấn công XSS từ trang nhúng không?
vô danh hèn nhát

1
Tôi tin rằng nó sử dụng SOP, giống như với iframe.
Zach

25

<optgroup>là một điều tuyệt vời mà mọi người thường bỏ qua khi thực hiện <select>danh sách được phân đoạn .

<select>
  <optgroup label="North America">
    <option value='us'>United States</option>
    <option value='ca'>Canada</option>
  </optgroup>
  <optgroup label="Europe">
    <option value='fr'>France</option>
    <option value='ir'>Ireland</option>
  </optgroup>
</select>

là những gì bạn nên sử dụng thay vì

<select>
  <option value=''>----North America----</option>
  <option value='us'>United States</option>
  <option value='ca'>Canada</option>
  <option value=''>----Europe----</option>
  <option value='fr'>France</option>
  <option value='ir'>Ireland</option>
</select>

25

Hầu hết cũng không biết thực tế là bạn có thể phân biệt nút biểu mẫu được nhấn bằng cách chỉ cho chúng một cặp tên / giá trị. Ví dụ

<form action="process" method="post">
     ...
     <input type="submit" name="edit" value="Edit">
     <input type="submit" name="delete" value="Delete">
     <input type="submit" name="move_up" value="Move up">
     <input type="submit" name="move_up" value="Move down">
</form>

Ở phía máy chủ, nút thực được nhấn sau đó có thể nhận được bằng cách chỉ kiểm tra sự hiện diện của tham số yêu cầu được liên kết với tên nút. Nếu không phải vậynull , thì nút đã được nhấn.

Tôi đã nhìn thấy rất nhiều của không cần thiết hacks JS / cách giải quyết cho điều đó, ví dụ như thay đổi hình thức hành động hoặc thay đổi một giá trị đầu vào ẩn trước tùy thuộc vào nút nhấn. Nó chỉ đơn giản là đáng kinh ngạc.

Ngoài ra, tôi đã thấy gần như nhiều phương pháp hack / cách giải quyết JS để thu thập những cái đã chọn của nhiều hộp kiểm như trong các hàng bảng. Trên mỗi lần chọn / kiểm tra hàng trong bảng, JS sẽ thêm chỉ mục hàng vào một số giá trị được phân tách bằng dấu phẩy trong một phần tử đầu vào ẩn, sau đó sẽ được tách / phân tích cú pháp thêm ở phía máy chủ. Đó là kết quả của việc bạn không biết rằng bạn có thể cung cấp cho nhiều phần tử đầu vào có cùng tên nhưng giá trị khác và bạn vẫn có thể truy cập chúng dưới dạng một mảng ở phía máy chủ. Ví dụ

<tr><td><input type="checkbox" name="rowid" value="1"></td><td> ... </td></tr>
<tr><td><input type="checkbox" name="rowid" value="2"></td><td> ... </td></tr>
<tr><td><input type="checkbox" name="rowid" value="3"></td><td> ... </td></tr>
...

Việc không biết sẽ đặt cho mỗi hộp kiểm một tên khác nhau và bỏ qua toàn bộ thuộc tính giá trị. Trong một số tình huống JS-hack / workaround-free, tôi cũng đã thấy một số phép thuật áp đảo không cần thiết trong mã phía máy chủ để phân biệt các mục đã chọn.


1
Này .. Đó rõ ràng là một tính năng ẩn khác của HTML: /;)
BalusC

1
Nếu một biểu mẫu có nhiều nút gửi và người dùng nhấp vào một nút, một số phiên bản nhất định của Internet Explorer sẽ vui vẻ cho máy chủ của bạn biết rằng tất cả họ đã được nhấp. Tuyệt vời.
gièm pha

1
@detly: chỉ khi bạn sử dụng <button type="submit">thay vì <input type="submit">:)
BalusC

1
... buuuuut không IE6 cũng có vấn đề với <input type="submit">? (Trí nhớ của tôi về vấn đề này rất mơ hồ - từ lâu tôi đã thuyết phục các nhà tuyển dụng không lo lắng về khả năng tương thích của IE cho các ứng dụng web nội bộ, vì vậy đây không phải là vấn đề của tôi nữa. Nhưng tôi nhớ lại một số rào cản khiến vấn đề này có thể giải quyết được trong IE6. )
detly

2
Điều đó không thân thiện với i18n cho lắm.
zneak

22

Thẻ nhóm .

<table width="100%">
    <colgroup>
        <col style="width:40%;" />
        <col style="width:60%;" />
    </colgroup>
    <thead>
        <tr>
            <td>Column 1<!--This column will have 40% width--></td>
            <td>Column 2<!--This column ill have 60% width--></td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Cell 1</td>
            <td>Cell 2</td>
        </tr>
    </tbody>
</table>

15
Theo kinh nghiệm của tôi, hỗ trợ colgroup là tốt nhất.
mí mắt.

rất giống là WPF Lưới
Binoj Antony

18

Nếu forthuộc tính của <label>thẻ không được chỉ định, thì nó sẽ được đặt ngầm định là thẻ con đầu tiên<input> , tức là

<label>Alias: <input name="alias" id="alias"></label>

tương đương với

<label for="alias">Alias:</label> <input name="alias" id="alias">

4
Nhưng điều này được hưởng hỗ trợ trình duyệt ít hơn cho thuộc tính
Quentin

4
@David - Bạn có tài liệu nào để sao lưu không? Tôi không nghĩ rằng tôi đã từng thấy một trình duyệt không hỗ trợ cách sử dụng này. Cá nhân tôi đã thử nghiệm trong IE6 / 7, FF2 / 3, Safari 3 và Chrome 1/2. Tôi chưa thử nghiệm bản thân trong Opera, nhưng tôi sẽ rất ngạc nhiên nếu nó không hoạt động. Hành vi này là một phần của bản gốc HTML 4.0 spec, đầu tiên xuất bản hơn mười một năm trước: w3.org/TR/1998/REC-html40-19980424/interact/forms.html#adef-for
Ben Blank

Ngoài ra, việc đặt đầu vào bên trong nhãn là không hợp lệ và DOH bạn đã không đóng thẻ đầu vào của mình trong cả hai ví dụ!
Anthony

5
Bạn sai cả hai số: đây là phương pháp hợp lệ và thẻ đóng bị cấm đối với các phần tử đầu vào.
moo

15

Nút dưới dạng liên kết, không có JavaScript :

Bạn có thể đặt bất kỳ loại tệp nào trong hành động biểu mẫu và bạn có một nút hoạt động như một liên kết. Không cần sử dụng các sự kiện onclick hoặc như vậy. Bạn thậm chí có thể mở tệp trong một cửa sổ mới bằng cách dán một "mục tiêu" vào biểu mẫu. Tôi không thấy kỹ thuật đó được ứng dụng nhiều.

Thay thế cái này

<a href="myfile.pdf" target="_blank">Download file</a>

Với cái này:

<form method="get" action="myfile.pdf" target="_blank">
    <input type="submit" value="Download file">
</form>

27
Nút sẽ không có tùy chọn "Lưu tệp dưới dạng", có thể cần thiết bởi những người dùng không thích Adobe Acrobat tiếp quản trình duyệt của họ.
Kornel

Nó sẽ hoạt động với hành vi trình duyệt mặc định khi truy cập tệp PDF. Đó có thể là tệp HTML, tệp word, tệp zip hoặc bất kỳ thứ gì khác mà bạn muốn.
Wadih M.

Trong tình huống nào, thẻ liên kết yêu cầu sự kiện onclick? và tại sao 3 dòng html lại tốt hơn 1 dòng? Ý tưởng rằng bạn CÓ THỂ có một nút thay vì một liên kết, vì vậy nó đẹp và nút thích? Mặc dù tôi nghe có vẻ cáu kỉnh về điều này, nhưng tôi thực sự có một trang sử dụng các nút thay vì liên kết vì tệp được tạo động khi người dùng yêu cầu, vì vậy tôi không muốn liên kết đến: blah.php? Thing = "userdata" Mặc dù tôi có thể đã đi theo con đường đó, tôi không muốn mạo hiểm tên tệp có tập lệnh tạo tệp làm tên thay vì tên tệp mà tập lệnh cung cấp cho tệp.
Anthony

1
Tại sao không chỉ tạo kiểu cho thẻ <a> giống như một nút? Điều này có vẻ như có rất nhiều rác trong đánh dấu của bạn.
UpTheCreek

2
@UpTheCreek một số ứng dụng web muốn trông giống như hệ điều hành. Ví dụ như một nút xấu xí khi người dùng sử dụng Windows, và một nút đẹp khi người dùng sử dụng Mac OS X.

13

Cách đơn giản nhất để làm mới trang trong X giây - META Refresh

<meta http-equiv="refresh" content="600">

Giá trị trong nội dung biểu thị số giây mà sau đó bạn muốn trang làm mới.
[Biên tập]

<meta http-equiv="refresh" content="0; url=foobar.com/index.html">

Để thực hiện một chuyển hướng đơn giản!
(Cảm ơn @rlb)


13
Tất nhiên, việc tìm ra yếu tố nào cần làm mới và sau đó cập nhật chúng qua AJAX sẽ mang lại trải nghiệm người dùng tốt hơn nhiều ...
Steve Harrison

11
Làm mới META không thực sự làm bất cứ điều gì tốt trong các trang cũng có một số hoạt động biểu mẫu của người dùng, bởi vì nó có thể làm gián đoạn việc điền biểu mẫu của người dùng và hủy bỏ tất cả công việc. Tôi nghĩ hiếm khi có dịp mà những kiểu làm mới như thế này là tốt nhất. Nó chỉ là một lối thoát dễ dàng bình thường.
Robert Koritnik

11
/ tôi ghét những trang làm mới như vậy ... nên bị cấm = /
Svish

3
Điều này cũng có thể hữu ích nếu được đặt thành ít hơn thời gian chờ của phiên một chút để thông báo cho người dùng rằng phiên của họ đã hết thời gian chờ và đã bị xóa.
fforw

1
Hết thời gian ngắn ngắt nút quay lại.
Kornel

12

<html>, <head><body>thẻ là không bắt buộc. Nếu bạn bỏ qua chúng, chúng sẽ được trình phân tích cú pháp chèn vào những vị trí thích hợp. Đó là hoàn toàn hợp lệ để làm như vậy trong HTML (giống như ngụ ý<tbody> ).

Về lý thuyết, HTML là một ứng dụng SGML. Đây có lẽ là tài liệu HTML 4 hợp lệ ngắn nhất :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<title//<p/

Phần trên không hoạt động ở bất kỳ đâu ngoại trừ W3C Validator. Tuy nhiên, text/htmltài liệu HTML5 hợp lệ ngắn nhất hoạt động ở mọi nơi:

<!DOCTYPE html><title></title>

4
Bạn nên cẩn thận với những gì bạn quảng cáo. Đoạn mã trên sẽ vượt qua quá trình xác thực với 4 cảnh báo tại trình xác thực w3c, nhưng DocType là HTML 4.0. Khá rõ ràng là HTML 4 là hậu duệ của SGML và do đó duy trì tiêu chuẩn xác thực lỏng lẻo này, nhưng nếu bạn thay đổi DTD đó thành XHTML 1.0 STRICT, nó sẽ nhận được 15 lỗi, gần bằng số ký tự. XHTML được phát triển vì HTML quá lười biếng (và do đó không an toàn) nên chúng tôi không muốn tận dụng nó nữa.
Anthony

3
Nếu bạn thay đổi DOCTYPE của tài liệu HTML / SGML thành XHTML / XML, bạn sẽ nhận được sự kết hợp vô nghĩa. Điều đó khá rõ ràng và tôi không chắc tại sao bạn lại chỉ ra điều đó.
Kornel

3
Về mặt kỹ thuật, ví dụ này có thể là HTML 4 hợp lệ, nhưng các trình duyệt không hỗ trợ cú pháp SGML viết tắt đó. Sau đây là ngắn nhất có giá trị tài liệu HTML 5, mà các trình duyệt thực sự hỗ trợ:<!DOCTYPE html><title></title>
Brian Campbell

Bất kỳ ý tưởng nào về mức độ tương thích của nó để loại bỏ head/ body, không chỉ từ quan điểm xác nhận?
kibibu

@kibibu: Các trình duyệt không gặp vấn đề với điều này. Các phiên bản cũ của Opera <head>đôi khi bỏ qua DOM, nhưng nội dung phần đầu vẫn nằm trong DOM và vẫn hoạt động. Vấn đề lớn nhất mà tôi nhận thấy là các ứng dụng khách OpenID yêu cầu <head>phải có mặt rõ ràng.
Kornel

11

Các lang thuộc tính không phải là rất nổi tiếng nhưng rất hữu ích. Thuộc tính được sử dụng để xác định ngôn ngữ của nội dung trong toàn bộ tài liệu hoặc trong một phần tử đơn lẻ. Mã Langage được cung cấp bằng mã Ngôn ngữ 2 chữ cái ISO (tức là 'en' đối với tiếng Anh, 'fr' đối với tiếng Pháp).

Nó hữu ích cho các trình duyệt có thể điều chỉnh việc hiển thị dấu ngoặc kép, v.v. Trình đọc màn hình cũng được hưởng lợi từ lang thuộc tính cũng như các công cụ tìm kiếm.

Sitepoint có một số giải thích hay vềlang thuộc tính này.

Ví dụ

Chỉ định ngôn ngữ là tiếng Anh cho toàn bộ tài liệu, trừ khi bị ghi đè bởi một langthuộc tính khác ở cấp thấp hơn trong DOM.

<html lang="en">

Chỉ định ngôn ngữ trong đoạn văn sau là tiếng Thụy Điển.

<p lang="sv">Ät din morgongröt och bli stor och stark!</p>

10

Các "! DOCTYPE" tuyên bố . Đừng nghĩ đó là một tính năng ẩn, có vẻ như nó không được nhiều người biết đến nhưng lại rất hữu ích.

ví dụ

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
    "http://www.w3.org/TR/html4/strict.dtd">

10
Và chưa kể đến "bắt buộc đối với hầu hết các ngôn ngữ đánh dấu hiện tại và nếu không có ngôn ngữ này thì không thể xác thực tài liệu một cách đáng tin cậy" ... validator.w3.org/docs/help.html#faq-doctype
Svish

Tôi không nghĩ rằng điều này là "không được biết đến" nữa. Trong khoảng thời gian giữa IE 6 và IE 7, việc sử dụng doctype đã tăng từ ~ 1% lên> 50%.
mí mắt

@eyelidless Hầu hết IDE đều bao gồm thẻ này, đó là lý do tại sao việc sử dụng nó tăng lên. Tôi nghĩ rằng thẻ này không được biết đến nhiều.
Daniel Moura

6
Và việc sử dụng loại tài liệu nghiêm ngặt sẽ khắc phục được 95% sự không nhất quán của trình duyệt.
DisgruntledGoat

3
Một phần của tính năng nổi bật và được sử dụng bởi 99% các nhà phát triển ngoài kia nghe không giống như "tính năng ẩn".
WhyNotHugo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.