<table>ï¼è¡¨æ ¼å ç´
åºçº¿
广æ³å¯ç¨
*
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
* æ¤ç¹æ§çæäºé¨åçæ¯æç¨åº¦å¯è½ææä¸åã
HTML <table> å
ç´ è¡¨ç¤ºè¡¨æ ¼æ°æ®ââå³å¨ä¸ä¸ªç±å
嫿°æ®çè¡ååç»æçäºç»´è¡¨æ ¼ä¸åç°çä¿¡æ¯ã
å°è¯ä¸ä¸
<table>
<caption>
Front-end web developer course 2021
</caption>
<thead>
<tr>
<th scope="col">Person</th>
<th scope="col">Most interest in</th>
<th scope="col">Age</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">Chris</th>
<td>HTML tables</td>
<td>22</td>
</tr>
<tr>
<th scope="row">Dennis</th>
<td>Web accessibility</td>
<td>45</td>
</tr>
<tr>
<th scope="row">Sarah</th>
<td>JavaScript frameworks</td>
<td>29</td>
</tr>
<tr>
<th scope="row">Karen</th>
<td>Web performance</td>
<td>36</td>
</tr>
</tbody>
<tfoot>
<tr>
<th scope="row" colspan="2">Average age</th>
<td>33</td>
</tr>
</tfoot>
</table>
table {
border-collapse: collapse;
border: 2px solid rgb(140 140 140);
font-family: sans-serif;
font-size: 0.8rem;
letter-spacing: 1px;
}
caption {
caption-side: bottom;
padding: 10px;
font-weight: bold;
}
thead,
tfoot {
background-color: rgb(228 240 245);
}
th,
td {
border: 1px solid rgb(160 160 160);
padding: 8px 10px;
}
td:last-of-type {
text-align: center;
}
tbody > tr:nth-of-type(even) {
background-color: rgb(237 238 242);
}
tfoot th {
text-align: right;
}
tfoot td {
font-weight: bold;
}
| å 容åç±» | æµå¼å 容 |
|---|---|
| å 许çå 容 | æç §è¿ä¸ªé¡ºåºï¼ |
| æ ç¾çç¥ | ä¸å 许ï¼å¼å§æ ç¾åç»ææ ç¾é½ä¸è½çç¥ã |
| å 许çç¶å ç´ | 任使¯ææµå¼å 容çå ç´ |
| éå«ç ARIA è§è² |
table
|
| å 许ç ARIA è§è² | ä»»æ |
| DOM æ¥å£ | HTMLTableElement |
屿§
æ¤å ç´ å 嫿æçå ¨å±å±æ§ã
å¼ç¨ç屿§
align-
è¿ä¸ªæä¸¾å±æ§æå®äºå å«å¨ææ¡£ä¸çè¡¨æ ¼å¿ é¡»å¦ä½å¯¹é½ãå¯è½å«æå¦ä¸å¼ï¼
leftï¼è¡¨æ ¼å°å¨ææ¡£å·¦ä¾§æ¾ç¤ºï¼centerï¼è¡¨æ ¼å°å¨ææ¡£ä¸å¤®æ¾ç¤ºï¼rightï¼è¡¨æ ¼å°å¨ææ¡£å³ä¾§æ¾ç¤ºï¼
设置
margin-leftãmargin-right为autoï¼æè å°margin设置为0 autoæ¥å®ç°ç±»ä¼¼äº align 屿§çææã bgcolor-
è¡¨æ ¼çèæ¯é¢è²ã宿¯ä¸ä¸ª 6 ä½çåå è¿å¶ RGB ç¼ç ï¼ä»¥
'#'ä½ä¸ºåç¼ãå½ç¶ä¹å¯ä»¥ä½¿ç¨ä¸é¢å·²ç»è¢«é¢å å®ä¹çé¢è²å ³é®åã为äºå®ç°ç¸ä¼¼çææï¼å¯ä»¥ä½¿ç¨ CSS 屿§
background-colorã border-
è¿ä¸ªæ´å屿§å®ä¹äºç¯ç»è¡¨æ ¼å¤é¨çæ¡ç大å°ãå¦æè®¾ç½®ä¸º 0ï¼è¿æå³ç
frame屿§è¢«è®¾ç½®ä¸ºç©ºã为äºå®ç°ç¸ä¼¼çææï¼å¯ä»¥ä½¿ç¨ CSS ç®å屿§
borderã cellpadding-
è¿ä¸ªå±æ§å®ä¹äºä¸ä¸ªåå æ ¼çå 容åå®çè¾¹æ¡ä¹é´ç空é´ï¼æ 论æ¾ç¤ºä¸å¦ã妿 cellpadding çé¿åº¦æ¯ç¨åç´ å®ä¹çï¼è¿ä¸ªåç´ å¤§å°ç空é´å°è¢«åºç¨å°åå æ ¼å å®¹çææåè¾¹ã妿é¿åº¦æ¯ç¨ç¾åæ¯å¼å®ä¹çï¼å 容å°è¢«å± ä¸ï¼æ»çåç´ç©ºé´ï¼é¡¶é¨ååºé¨ï¼å°ä»£è¡¨è¿ä¸ªå¼ãå¯¹äºæ»ç水平空é´ï¼å·¦è¾¹åå³è¾¹ï¼ä¹æ¯å¦æ¤ã
为äºå®ç°ç¸ä¼¼çææï¼å¯ä»¥å¨
<table>å ç´ ä¸ä½¿ç¨å±æ§å¼ä¸º collapse çborder-collapse屿§ï¼å¨<td>å ç´ ä¸ä½¿ç¨å±æ§paddingã cellspacing-
è¿ä¸ªå±æ§å®ä¹äºæ°´å¹³ååç´æ¹åä¸ä¸¤ä¸ªåå æ ¼ä¹é´ç©ºé´ç大å°ï¼ä½¿ç¨ç¾åæ¯æåç´ ï¼å æ¬äºè¡¨æ ¼çé¡¶é¨ä¸ç¬¬ä¸è¡çåå æ ¼ã表ç左边ä¸ç¬¬ä¸ååå æ ¼ã表çå³è¾¹ä¸æåä¸åçåå æ ¼ã表çåºé¨ä¸æåä¸è¡åå æ ¼ä¹é´ç空é´ã
为äºå®ç°ç¸ä¼¼çææï¼å¯ä»¥å¨
<table>å ç´ ä¸ä½¿ç¨ CSS 屿§border-spacingãborder-spacingå¨border-collapse设置为 collapse æ¶å°æ æã frame-
è¿ä¸ªæä¸¾å±æ§å®ä¹äºå å´å¨è¡¨æ ¼å¨å´çæ¡æ¶çåªä¸ªè¾¹å¿ é¡»æ¾ç¤ºã
为äºå®ç°ç¸ä¼¼çææï¼å¯ä»¥ä½¿ç¨ CSS 屿§
border-styleåborder-widthã rules-
è¿ä¸ªæä¸¾å±æ§å®ä¹äºå¨ä¸ä¸ªè¡¨æ ¼ä¸åéçº¿çæ¾ç¤ºä½ç½®ãå®å¯ä»¥æä»¥ä¸å¼ï¼
noneï¼è¿è¡¨ææ²¡æåé线å°è¢«æ¾ç¤ºï¼è¿æ¯é»è®¤çå¼ï¼groupsï¼è¿å°ä½¿å¾åéçº¿åªæ¾ç¤ºå¨è¡ç»ï¼row groupï¼éè¿<thead>ã<tbody>å<tfoot>å ç´ å®ä¹ï¼ååç»ï¼column groupï¼éè¿<col>å<colgroup>å ç´ å®ä¹ï¼ä¹é´rowsï¼è¿å°ä½¿å¾åé线å¨è¡ä¹é´æ¾ç¤ºï¼colsï¼è¿å°ä½¿å¾åé线å¨åä¹é´æ¾ç¤ºï¼allï¼è¿å°ä½¿å¾åé线å¨ååè¡ä¹é´æ¾ç¤ºï¼
为äºå®ç°ç¸ä¼¼çææï¼å¯ä»¥å¨éå½ç
<thead>ã<tbody>ã<tfoot>ã<col>æ<colgroup>å ç´ ä¸ä½¿ç¨border屿§ã summary-
è¯¥å±æ§å®ä¹äºæ¦æ¬è¡¨æ ¼å å®¹çæ¿ä»£ææ¬ã请使ç¨
<caption>å ç´ ä»£æ¿ã width-
è¯¥å±æ§å®ä¹äºè¡¨æ ¼ç宽度ãè¯·ä½¿ç¨ CSS
width屿§ä»£æ¿ã
示ä¾
>ç®åçè¡¨æ ¼
<table>
<tr>
<td>John</td>
<td>Doe</td>
</tr>
<tr>
<td>Jane</td>
<td>Doe</td>
</tr>
</table>
æ´å¤ç®å示ä¾
<p>å«æè¡¨å¤´çè¡¨æ ¼</p>
<table>
<tr>
<th>å§</th>
<th>å</th>
</tr>
<tr>
<td>Doe</td>
<td>John</td>
</tr>
<tr>
<td>Doe</td>
<td>Jane</td>
</tr>
</table>
<p>å«æè¡¨å¤´ã表尾åè¡¨æ ¼ä¸»ä½çè¡¨æ ¼</p>
<table>
<thead>
<tr>
<th>表头å
容 1</th>
<th>表头å
容 2</th>
</tr>
</thead>
<tbody>
<tr>
<td>è¡¨æ ¼ä¸»ä½å
容 1</td>
<td>è¡¨æ ¼ä¸»ä½å
容 2</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>表尾å
容 1</td>
<td>表尾å
容 2</td>
</tr>
</tfoot>
</table>
<p>æåç»çè¡¨æ ¼</p>
<table>
<colgroup span="4"></colgroup>
<tr>
<th>å½å®¶</th>
<th>é¦é½</th>
<th>äººå£æ°é</th>
<th>è¯è¨</th>
</tr>
<tr>
<td>ç¾å½</td>
<td>åçé¡¿</td>
<td>3.09 亿</td>
<td>è±è¯</td>
</tr>
<tr>
<td>çå
¸</td>
<td>æ¯å¾·å¥å°æ©</td>
<td>900 ä¸</td>
<td>çå
¸è¯</td>
</tr>
</table>
<p>æåç»ååçè¡¨æ ¼</p>
<table>
<colgroup>
<col style="background-color: #0f0" />
<col span="2" />
</colgroup>
<tr>
<th>éæ </th>
<th>æ æª¬</th>
<th>æ©å</th>
</tr>
<tr>
<td>绿è²</td>
<td>é»è²</td>
<td>æ©è²</td>
</tr>
</table>
<p>ææ é¢çç®åè¡¨æ ¼</p>
<table>
<caption>
ç¾å¦çæ é¢
</caption>
<tr>
<td>ç¾å¦çæ°æ®</td>
</tr>
</table>
è¡¨æ ¼æåº
å¯¹è¡¨æ ¼çè¡è¿è¡æåº
没æåççæ¹æ³å¯¹ HTML è¡¨æ ¼çè¡ï¼<tr>å
ç´ ï¼è¿è¡æåºã使¯éè¿ä½¿ç¨ Array.prototype.slice()ãArray.prototype.sort()ãNode. removeChild() å Node.appendChild()ï¼ä½ å¯ä»¥å®ç°ä½ èªå·±ç sort() 彿°æ¥å¯¹ <tr> å
ç´ çHTMLCollection è¿è¡æåºã
å¨ä¸é¢ç示ä¾ä¸ï¼ä½ å¯ä»¥çå°å ·ä½å¦ä½è¿æ ·åãæä»¬æè¿ä¸ªèªå®ä¹æ¹æ³éå å° <tbody> å ç´ ä¸ï¼è¿æ ·å®å°±ä¼æç §æ°å¼å¢å ç顺åºå¯¹è¡¨æ ¼åå æ ¼è¿è¡æåºï¼å¹¶æ´æ°æ¾ç¤ºå 容以éåºéè¦ã
HTML
<table>
<tbody>
<tr>
<td>3</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>1</td>
</tr>
</tbody>
</table>
JavaScript
HTMLTableSectionElement.prototype.sort = function (cb) {
Array.from(this.rows)
.sort(cb)
.forEach((e) => this.appendChild(this.removeChild(e)));
};
document
.querySelector("table")
.tBodies[0].sort((a, b) => a.textContent.localeCompare(b.textContent));
ç»æ
éè¿ç¹å» th å ç´ å¯¹è¡è¿è¡æåº
ä¸é¢ç示ä¾ç» document 䏿¯ä¸ª <table> çæ¯ä¸ª <th> å
ç´ æ·»å äºä¸ä¸ªäºä»¶å¤çç¨åºï¼å®å¯¹ææ <tbody> çè¡è¿è¡æåºï¼æåºçåºç¡æ¯è¡ä¸å
å«ç td åå
æ ¼ã
夿³¨ï¼è¿ä¸ªè§£å³æ¹æ¡å设 <td> å
ç´ æ¯ç±åå§ææ¬å¡«å
çï¼æ²¡æåå
ç´ ã
HTML
<table>
<thead>
<tr>
<th>æ°å</th>
<th>忝</th>
</tr>
</thead>
<tbody>
<tr>
<td>3</td>
<td>A</td>
</tr>
<tr>
<td>2</td>
<td>B</td>
</tr>
<tr>
<td>1</td>
<td>C</td>
</tr>
</tbody>
</table>
JavaScript
const allTables = document.querySelectorAll("table");
for (const table of allTables) {
const tBody = table.tBodies[0];
const rows = Array.from(tBody.rows);
const headerCells = table.tHead.rows[0].cells;
for (const th of headerCells) {
const cellIndex = th.cellIndex;
th.addEventListener("click", () => {
rows.sort((tr1, tr2) => {
const tr1Text = tr1.cells[cellIndex].textContent;
const tr2Text = tr2.cells[cellIndex].textContent;
return tr1Text.localeCompare(tr2Text);
});
tBody.append(...rows);
});
}
}
ç»æ
å¨å°ç©ºé´å±ç¤ºå¤§åè¡¨æ ¼
ç½ç»ä¸è¡¨æ ¼çä¸ä¸ªæ®éé®é¢æ¯ï¼å½å 容éå¾å¤§æ¶ï¼å®ä»¬å¨å°å±å¹ä¸çåçææå¹¶ä¸å¥½ï¼èä¸ä½¿å®ä»¬å¯æ»å¨çæ¹æ³å¹¶ä¸ææ¾ï¼ç¹å«æ¯å½æ è®°å¯è½æ¥èª CMSï¼æ æ³æ·»å ä¸ä¸ªå è£ å¨æ¶ã
è¿ä¸ªä¾åæä¾äºä¸ç§å¨å°ç©ºé´ä¸æ¾ç¤ºè¡¨æ ¼çæ¹æ³ãæä»¬éèäº HTML å 容ï¼å 为å®é常大ï¼è䏿²¡æä»ä¹ç¹å«ä¹å¤ãå¨è¿ä¸ªä¾åä¸ï¼ç ç©¶å ¶ CSS ä»£ç æ´æç¨ã
彿¥çè¿äºæ ·å¼æ¶ï¼ä½ 伿³¨æå°è¡¨æ ¼ç display 屿§å·²è¢«è®¾ç½®ä¸º blockãè½ç¶å
许æ»å¨ï¼ä½è¡¨æ ¼å¤±å»äºä¸äºå®æ´æ§ï¼èä¸è¡¨æ ¼åå
æ ¼ä¼å°½éåå°ã为äºç¼è§£è¿ä¸ªé®é¢ï¼æä»¬å¨ <tbody> ä¸å° white-space 设置为 nowrapãç¶èï¼æä»¬æ²¡æå¯¹ <thead> è¿è¡è®¾ç½®ï¼ä»¥é¿å
é¿æ é¢è¿«ä½¿åç宽度è¶
è¿æ¾ç¤ºæ°æ®æéç宽度ã
为äºå¨å䏿»å¨æ¶ä¿æè¡¨å¤´å¨é¡µé¢ä¸ï¼æä»¬å¨ <th> å
ç´ ä¸å° position 设置为 stickyãæ³¨æï¼æä»¬æ²¡æå° border-collapse 设置为 collapseï¼å ä¸ºå¦ææä»¬è¿æ ·åï¼è¡¨å¤´å°±ä¸è½ä¸è¡¨æ ¼çå
¶ä»é¨åæ£ç¡®åå¼ã
table,
th,
td {
border: 1px solid;
}
table {
width: 100%;
max-width: 400px;
height: 240px;
margin: 0 auto;
display: block;
overflow-x: auto;
border-spacing: 0;
}
tbody {
white-space: nowrap;
}
th,
td {
padding: 5px 10px;
border-top-width: 0;
border-left-width: 0;
}
th {
position: sticky;
top: 0;
background: #fff;
vertical-align: bottom;
}
th:last-child,
td:last-child {
border-right-width: 0;
}
tr:last-child td {
border-bottom-width: 0;
}
ç»æ
æ éç¢èè
>æ é¢
æä¾ä¸ä¸ªæ¸
æ°ç®æ´å°æè¿°äºè¡¨æ ¼çç®ç <caption> å
ç´ ï¼æå©äºäººä»¬å³å®æ¯å¦éè¦é
è¯»è¡¨æ ¼çå
¶ä»å
容æè·³è¿å®ã
è¿æå©äºåå©è¾ 婿æ¯ï¼å¦å±å¹é 读å¨ï¼è¿è¡å¯¼èªç人ãç»åä½è§åç¶åµç人åæè®¤ç¥é®é¢ç人ã
ç¡®å®è¡ååçèå´
头é¨å
ç´ ç scope 屿§å¨ç®åæ
åµä¸æ¯å¤ä½çï¼å 为èå´æ¯æ¨æåºæ¥çãç¶èï¼ä¸äºè¾
婿æ¯å¯è½æ æ³ååºæ£ç¡®çæ¨æï¼æä»¥æå®å¤´çèå´å¯è½ä¼æ¹åç¨æ·ä½éªãå¨å¤æçè¡¨æ ¼ä¸ï¼å¯ä»¥æå®èå´ä»¥æä¾ä¸æ é¢ç¸å
³çåå
æ ¼çå¿
è¦ä¿¡æ¯ã
示ä¾
<table>
<caption>
è¡¨æ ¼åç§°åå¼
</caption>
<tbody>
<tr>
<th scope="col">åç§°</th>
<th scope="col">HEX</th>
<th scope="col">HSLa</th>
<th scope="col">RGBa</th>
</tr>
<tr>
<th scope="row">Teal</th>
<td><code>#51F6F6</code></td>
<td><code>hsla(180, 90%, 64%, 1)</code></td>
<td><code>rgba(81, 246, 246, 1)</code></td>
</tr>
<tr>
<th scope="row">Goldenrod</th>
<td><code>#F6BC57</code></td>
<td><code>hsla(38, 90%, 65%, 1)</code></td>
<td><code>rgba(246, 188, 87, 1)</code></td>
</tr>
</tbody>
</table>
å¨ <th> å
ç´ ä¸æä¾å£°æ scope="col"ï¼å°æå©äºæè¿°è¯¥åå
æ ¼å¤äºä¸åçé¡¶é¨ãå¨ <th> å
ç´ ä¸æä¾å£°æ scope="row"ï¼å°æå©äºæè¿°è¯¥åå
æ ¼æ¯æä¸è¡ç第ä¸ä¸ªã
å¤æè¡¨æ ¼
诸å¦å±å¹é
读å¨çè¾
婿æ¯å¯è½é¾ä»¥è§£æé£äºå¤æå°æ é¢åå
ä¸è½ä»¥ä¸¥æ ¼çæ°´å¹³æåç´æ¹å¼å
³èçè¡¨æ ¼ãè¿éå¸¸ç± colspan å rowspan 屿§çåå¨è¡¨ç¤ºã
çæ³æ
åµä¸ï¼èèç¨å
¶ä»æ¹å¼æ¥å±ç¤ºè¡¨æ ¼çå
容ï¼å
æ¬å°å
¶åè§£æä¸ç³»åè¾å°çãç¸å
³çè¡¨æ ¼ï¼èä¸å¿
ä¾èµ colspan å rowspan 屿§ãé¤äºå¸®å©ä½¿ç¨è¾
婿æ¯ç人ç解表çå
容å¤ï¼è¿ä¹å¯è½æå©äºæè®¤ç¥éç¢ç人ï¼è¿äºäººå¯è½é¾ä»¥ç解表çå¸å±ææè¿°çå
³èã
å¦æè¡¨æ ¼ä¸è½è¢«æå¼ï¼ä½¿ç¨ id å headers 屿§çç»åï¼ä»¥ç¼ç¨æ¹å¼å°æ¯ä¸ªè¡¨æ ¼åå
ä¸è¯¥åå
æå
³èçæ é¢ç¸å
³èã
è§è
| è§è |
|---|
| HTML> # the-table-element> |
æµè§å¨å ¼å®¹æ§
åè§
- HTML æ°æ®è¡¨æ ¼åæ¥
- å¯è½ç¹å«æç¨çå
³äºè®¾å®è¡¨æ ¼å
ç´ æ ·å¼ç CSS 屿§ï¼
widthæ§å¶è¡¨æ ¼ç宽度ï¼borderãborder-styleãborder-colorãborder-widthãborder-collapseãborder-spacingæ§å¶åå æ ¼è¾¹æ¡ï¼åéçº¿åæ¡æ¶æ¹é¢ï¼marginåpadding设å®ç¹å®çåå æ ¼å å®¹æ ·å¼ï¼text-alignåvertical-alignå®ä¹ææ¬ååå æ ¼å 容ç坹齿¹å¼ã