關於HTML語義化的一些理解

来源:http://www.cnblogs.com/shouce/archive/2016/01/27/5162076.html
-Advertisement-
Play Games

語義化這個詞我想大家都看到了無數次,特別是在一些招聘廣告上。其實我自己也是,不過每次看到都覺得是那些招聘公司複製的,其實他們根本說不清語義化是什麼,而且也根本不看重。所以我一直也沒把這東西當回事過。然而最近當我再次看到這個詞時,我想我應該好好思考下這問題了。就寫篇博客記錄下。一、什麼是語義化?在解釋...


語義化這個詞我想大家都看到了無數次,特別是在一些招聘廣告上。 其實我自己也是,不過每次看到都覺得是那些招聘公司複製的,其實他們根本說不清語義化是什麼,而且也根本不看重。 所以我一直也沒把這東西當回事過。 然而最近當我再次看到這個詞時,我想我應該好好思考下這問題了。就寫篇博客記錄下。     一、什麼是語義化? 在解釋這個概念之前,應該先解釋下“結構-表現-行為”。 如果說解耦合是代碼的高境界,那麼“結構-表現-行為”的原則就是前臺的標桿。 隨著前臺代碼的越來越龐大,各部分代碼各司其職的作用就越來越重要了。 眾所周知,前臺代碼是有HTML + CSS + JS來實現的。他們對應的就是負責“結構-表現-行為”。   HTML負責結構。 結構是什麼?簡單理解,結構就是HTML節點的層次、嵌套關係等。舉個例子來說
<header>
      <h1></h1>
</header>
<section></section>
<footer></footer>
上面的代碼展示了該文檔結構為 header、section、footer是同級的。然後h1是header的直接子節點,換句話說就是他們之間也就一層的嵌套。   但是,有個問題,看下麵的代碼
<div>
     <span style="font-size:16px;font-weight:bold;"></span>
</div>
<div></div>
<div></div>
這段代碼不也展現出了結構嗎?而且顯示效果而上面的沒有區別(這裡我假設H1預設是16px,bold的樣式),那上面的代碼和這段比起來的優勢是什麼呢?   優勢,其實就在語義化。 第一段代碼不僅展示了結構,而且告訴了我們,是頭部、區域塊、尾部同級,頭部中有個大標題。而第二段代碼,能體現出這些嗎?   所以,給個結論就是 — 語義化就是讓標簽和其所包裹的內容的意思想吻合       二、為什麼要語義化? 我歸納了3點,分開來說把   1.方便機器理解代碼,利於SEO 還拿上面兩段代碼舉例子,第二段代碼,別說機器了,就是人也看不出它表達的意思啊。而第一段代碼無論是人還是機器,都是可以去理解的。 搜索引擎爬蟲理解了你的代碼,你的網站排名自然有加分了。   2.代碼更簡潔,復用性更高。使用合適的標簽,可以少些很多css或者js。 代碼更簡潔:這個顯而易見了。第二段代碼多了樣式的定義,而第一段沒有。 復用性更高:假如這段HTML結構有很多地方用,那麼第一段的適用場景更多。比如第二段代碼固定了16像素加粗,而第一段代碼只是指明這是個h1,你不重寫那麼就用h1樣式,你若重寫了h1,那就用你的。 少寫css:在代碼簡潔那裡說了,就不重覆了。 少寫js:這個可以說說,比如看如下代碼 複製代碼
<!-- 語義化的form -->
<form>
    <input type="submit" />
</form>

<!-- 非語義化的form -->
<form>
    <a href="javascript:document.forms[0].submit()" >submit</a>
</form>
複製代碼 非語義化form代碼裡面,用a標簽和js實現提交功能。但是呢,一來多寫了js代碼。二來,在語義化的form裡面可以回車提交,用a標簽實現的無法回車提交。當然,你可以再多寫很多js來實現完美模擬,但是這又有什麼意思呢。   3.訪問性更好 這個主要就是針對讀屏器或者其他一些對CSS理解不好的瀏覽器。語義化的HTML可以做到脫離CSS還能看,而非語義化的就難了。     三、如何讓自己代碼語義化? w3c的驗證並不能驗證你代碼是否語義化,而且也沒有任何工具可以測試你代碼是否語義化。 這說明什麼?這說明你無法通過像學習一門語言一樣解決代碼語義化的問題。 關於如何讓自己代碼語義化,我覺得有個方法可行 首先,你需要掌握常用的標簽,包括標簽代表的含義。可以參考這裡 其次,在你寫html的時候,常常去想想,這麼寫是否滿足了語義化的要求。 最後,經常看一些大公司的網站(特別是新站)、開源項目代碼,我知道大家都會這麼做,但每當你看他們css如何寫的,js如何寫的時候,請抽出一點點時間,看看他們html是如何寫的,思考下為什麼這麼寫。 這樣,我相信慢慢的你的HTML代碼語義化會越來越好。 總之,語義化HTML代碼不是一個可以從不會到會的問題,而是一個不斷改進的問題,不值得一次花大量精力去學習,但是需要每天積累一點來提高的技能。     最後,我相信很多人看完這篇文章的第一反應就是——“哦,原來我一直使用的HTML寫法叫做語義化啊!”
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在任何應用程式中,中介者模式隨處可見。→ 有一個事件源,觸發事件,傳遞參數→ 中介者記下這個事件,向外界廣播,並帶上參賽→ 有一個地方偵聽中介者事件,一旦事件源觸發事件,就從中介者手裡獲取事件相關參數本篇,要體驗的是在AngularJS中的中介者模式。場景是:當創建一個訂單,需要引發一些動作,比如給...
  • 最近在學習移動網頁開發,首先看到head裡面設置了下麵這個屬性:通過搜集資料,大體瞭解了viewport屬性的含義。一、什麼是Viewport手機瀏覽器是把頁面放在一個虛擬的“視窗”(viewport)中,通常這個虛擬的“視窗”(viewport)比屏幕寬,這樣就不用把每個網頁擠到很小的視窗中,也不...
  • 聖杯佈局,很久之前就聽過,但是從來都沒深入瞭解過,最近因為做了一個項目,借鑒了薪人薪事這個公司的產品頁面,才第一次用到這種佈局方式。於是就花了點時間,測了下它所有分欄佈局的代碼,每段代碼都非常簡單,但佈局效果很完美,比我以前用的方式好用不少。本文是對它實現方式的一些總結,希望可以把這種技術推薦給跟我...
  • 定義日誌輸出函數(function(){ if(window['console']){ return; } window['console'] = { log: function(){} ,clear: function(){} ,debug: function(){} ,error: ...
  • 今天聊聊一個經典的佈局實例:實現一個三列佈局,其中左側和右側的部分寬度固定,中間部分寬度隨瀏覽器寬度的變化而自適應變化可能很多朋友已經笑了,這玩意兒通過雙飛翼佈局就能輕鬆實現。不過,還請容我在雙飛翼之外,循序漸進地介紹一下我們可以如何實現一個三列佈局。1. 首先,使用浮動佈局來實現一下See ...
  • var val=$('input:radio[name="sex"]:checked').val();附三種方法都可以:$('input:radio:checked').val(); $("input[type='radio']:checked").val();$("input[name='rd.....
  • 適合EXT keycode的查詢A 65B 66C 67D 68E 69F 70G 71H 72I 73J 74K 75L 76M 77N 78O 79P 80Q 81R 82S 83T 84U 85V 86W 87X 88Y 89Z 900 4...
  • 設置全站的字體一直是一個簡單而又不簡單的事,因為深入下去,這裡面牽扯到太多的東西。本文主要是想說說對於一個普通的網站,如何根據自己的需求選擇字體。1、必備知識首先,我們應該明確,並不是你設置了這種字體,用戶電腦便會以這種字體顯示。如果用戶電腦沒有安裝這種字體,那麼它便會以你設置的第二種字體來渲染。看...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...