HTML是前端頁面佈局中的重要組成部分,如何編寫出符合W3C規範的代碼一直是前端工程師關註的問題。 ...
1.如何理解HTML?
- HTML類似於一份word“文檔”
- 描述文檔的“結構”
- 有區塊和大綱
2.對WEB標準的理解?
Web標準是由一系列標準組合而成。一個網頁主要由三部分組成:結構層、表現層和行為層。
對應的標準也分三方面:
- 結構化標準語言主要包括XHTML和HTML以及XML,
- 表現層標準語言主要包括CSS,
- 行為標準主要包括對象模型,DOM、ECMAScript等
2.1 結構層標準
結構化標準語言,就是W3C規定的主要包括HTML和XHTML以及XML,在頁面body裡面我們寫入的標簽都是為了頁面的結構。
- 標簽的書寫,需要開始和結束。單便簽除外;
- 塊級元素不能放在p標簽裡面。li內可以包含div標簽。
- 塊元素裡面可以放在塊和內聯,特殊的 p和 h1—h6裡面不要放塊元素,li和div可以放很多。因為這兩個標簽,本身就有容器的屬性
- 內聯裡面要放內聯,不要放塊。(嵌套關係)
- 結構與表現分離
- 命名一定要規範
2.2 表現層標準
表現標準語言主要包括CSS(Cascading Style Sheets)層疊式樣式表,通過CSS樣式表,W3C創建CSS標準的目的是以CSS取代HTML表格式佈局、幀和其他表現的語言,通過CSS樣式可以是頁面的結構標簽更具美感。
- 儘可能使用外部引入的方式,達到分離的目的
- CSS選擇器,優先順序
- 代碼簡潔
2.3 行為層標準
行為是指頁面和用戶具有一定的交互,同時頁面結構或者表現發生變化,標準主要包括對象模型(如W3C DOM)、ECMAScript並要求這三部分分離。
DOM是Document Object Model文檔對象模型的縮寫。DOM解決了Netscaped的Javascript和Microsoft的Jscript之間的衝突,給予web設計師和開發者一個標準的方法,讓他們來訪問他們站點中的數據、腳本和表現層對像。
ECMAScript是ECMA(EuropeanComputer Manufacturers Association)制定的標準腳本語言(JAVAScript)
3.對W3C的認識?
W3C對web標準提出了規範化的要求,也就是在實際編程中的一些代碼規範。
主要包含如下幾點:
3.1 對於結構的要求
- 1)標簽字母要小寫
- 2)標簽要閉合
- 3)標簽不允許隨意嵌套
3.2 對於css和js的要求
- 1)儘量使用外鏈css樣式表和js腳本。使結構、表現和行為分為三塊,符合規範。同時提高頁面渲染速度,提高用戶的體驗。
- 2)樣式儘量少用行間樣式表,使結構與表現分離,標簽的id和class等屬性命名要做到見文知義,標簽越少,載入越快,用戶體驗提高,代碼維護簡單,便於改版。
- 3)不需要變動頁面內容,便可提供列印版本而不需要複製內容,提高網站易用性。
4.什麼是前端語義化?
[!NOTE]
語義化就是是讓機器可以讀懂內容,web頁面的解析是由搜索引擎來進行搜索,機器來解析。
4.1 標簽是有語義的
h1~h6、thead、ul、ol等標簽,初期的語義化標簽:程式員利用HTML標簽的id和class屬性,進一步對HTML標簽進行描述,如對頁腳HTML標簽添加如id="footer"或者class="footer"的屬性(值)(使用有語義的對於需要聲明的變數和class,id)
4.2 HTML5的語義標簽
w3C採用了header/footer; section(章節、頁眉、頁腳)/article(內容區域); nav導航;aside 不重要的內容;em(emphasize)/strong增強; i(icon)製作圖標
5.談一下頁面佈局架構?
- CSS佈局:table佈局,float佈局,flex佈局(瀑布流佈局),inline-block佈局
- 三大框架,頁面架構
6.HTML的版本問題?
- HTML4/4.0.1(SGML)(標簽允許不結束)
- XHTML(XML)(標簽必須結束,屬性必須帶引號,屬性必須有值,標簽屬性必須有值)
- HTML5(類似於HTML4的寫法)
[!NOTE]
關鍵點:HTML是一種基本的WEB網頁設計語言,XHTML是一個基於XML的置標語言
7.HTML5新增的內容有哪些?
- 新的區塊標簽:section,article,nav,aside
- 表單增強:日期、時間、搜索(修改type的類型實現);表單驗證;placeholder
- 語義增強:header/footer; section/article; nav導航;aside 不重要的內容;em(emphasize)/strong增強; i(icon)製作圖標
8.HTML的元素分類?
- 塊級元素block(方塊形狀,占據一整行):div ul ol li dl dt dd h1 h2 h3 h4…p
- 行內元素inline(一行中的某個位置):a b span img input select strong(強調的語氣)
- inline-block(行內,有寬高屬性):selection
[!NOTE]
行內元素:a、b、span、img、input、strong、select、label、em、button、textarea
塊級元素:div、ul、li、dl、dt、dd、p、h1-h6、blockquote
空元素:br、meta、hr、link、input、img
9.HTML嵌套關係?
- 塊級元素可以包含行內元素
- 塊級元素不一定能包含塊級元素(p標簽不能包含div標簽)
- 行內元素“一般”不能包含塊級元素(a包含div是可以的)
10.HTML的預設樣式?
- 預設樣式的意義
- 預設樣式代理的問題
- CSS Reset 的作用
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
11.使用ajax方式來提交數據可以不使用form標簽嗎?
- form標簽可以使用submit, reset
- 使用form可以直接一次性獲取所有的form窗體的數據屬性
- form可以較好地實現表單驗證等功能
11.1 Form表單提交
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>login test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="login test">
</head>
<body>
<div id="form-div">
<form id="form1" action="/users/login" method="post">
<p>用戶名:<input name="userName" type="text" id="txtUserName" tabindex="1" size="15" value=""/></p>
<p>密 碼:<input name="password" type="password" id="TextBox2" tabindex="2" size="16" value=""/></p>
<p><input type="submit" value="登錄"> <input type="reset" value="重置"></p>
</form>
</div>
</body>
</html>
11.2 ajax提交
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>login test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="ajax方式">
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript">
function login() {
$.ajax({
//幾個參數需要註意一下
type: "POST",//方法類型
dataType: "json",//預期伺服器返回的數據類型
url: "/users/login" ,//url
data: $('#form1').serialize(),
success: function (result) {
console.log(result);//列印服務端返回的數據(調試用)
if (result.resultCode == 200) {
alert("SUCCESS");
}
;
},
error : function() {
alert("異常!");
}
});
}
</script>
</head>
<body>
<div id="form-div">
<form id="form1" onsubmit="return false" action="##" method="post">
<p>用戶名:<input name="userName" type="text" id="txtUserName" tabindex="1" size="15" value=""/></p>
<p>密 碼:<input name="password" type="password" id="TextBox2" tabindex="2" size="16" value=""/></p>
<p><input type="button" value="登錄" onclick="login()"> <input type="reset" value="重置"></p>
</form>
</div>
</body>
</html>
[!NOTE]
擴展思考:Form表單提交數據給一個非同源的網址,如在A網址(http://www.A.com)上直接向B網站(http://www.B.com)發送數據請求, 為什麼不會觸發瀏覽器的同源策略限制呢?