Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
譯自: https://medium.freecodecamp.org/for-your-first-html-code-lets-help-batman-write-a-love-letter-64c203b9360b
作者: Kunal Sarkar
譯者: MjSeven
在一個(gè)美好的夜晚,你的肚子拒絕消化你在晚餐吃的大塊披薩,所以你不得不在睡夢(mèng)中沖進(jìn)洗手間。
在浴室里,當(dāng)你在思考為什么會(huì)發(fā)生這種情況時(shí),你聽(tīng)到一個(gè)來(lái)自通風(fēng)口的低沉聲音:“嘿,我是蝙蝠俠。”
這時(shí),你會(huì)怎么做呢?
在你恐慌并處于關(guān)鍵時(shí)刻之前,蝙蝠俠說(shuō):“我需要你的幫助。我是一個(gè)超級(jí)極客,但我不懂 HTML。我需要用 HTML 寫一封情書,你愿意幫助我嗎?”
誰(shuí)會(huì)拒絕蝙蝠俠的請(qǐng)求呢,對(duì)吧?所以讓我們用 HTML 來(lái)寫一封蝙蝠俠的情書。
HTML 網(wǎng)頁(yè)與你電腦上的其它文件一樣。就同一個(gè) .doc 文件以 MS Word 打開(kāi),.jpg 文件在圖像查看器中打開(kāi)一樣,一個(gè) .html 文件在瀏覽器中打開(kāi)。
那么,讓我們來(lái)創(chuàng)建一個(gè) .html 文件。你可以在 Notepad 或其它任何編輯器中完成此任務(wù),但我建議使用 VS Code。 在這里下載并安裝 VS Code 。它是免費(fèi)的,也是我唯一喜歡的微軟產(chǎn)品。
在系統(tǒng)中創(chuàng)建一個(gè)目錄,將其命名為 “HTML Practice”(不帶引號(hào))。在這個(gè)目錄中,再創(chuàng)建一個(gè)名為 “Batman’s Love Letter”(不帶引號(hào))的目錄,這將是我們的項(xiàng)目根目錄。這意味著我們所有與這個(gè)項(xiàng)目相關(guān)的文件都會(huì)在這里。
打開(kāi) VS Code,按下 ctrl+n 創(chuàng)建一個(gè)新文件,按下 ctrl+s 保存文件。切換到 “Batman’s Love Letter” 文件夾并將其命名為 “l(fā)oveletter.html”,然后單擊保存。
現(xiàn)在,如果你在文件資源管理器中雙擊它,它將在你的默認(rèn)瀏覽器中打開(kāi)。我建議使用 Firefox 來(lái)進(jìn)行 web 開(kāi)發(fā),但 Chrome 也可以。
讓我們將這個(gè)過(guò)程與我們已經(jīng)熟悉的東西聯(lián)系起來(lái)。還記得你第一次拿到電腦嗎?我做的第一件事是打開(kāi) MS Paint 并繪制一些東西。你在 Paint 中繪制一些東西并將其另存為圖像,然后你可以在圖像查看器中查看該圖像。之后,如果要再次編輯該圖像,你在 Paint 中重新打開(kāi)它,編輯并保存它。
我們目前的流程非常相似。正如我們使用 Paint 創(chuàng)建和編輯圖像一樣,我們使用 VS Code 來(lái)創(chuàng)建和編輯 HTML 文件。就像我們使用圖像查看器查看圖像一樣,我們使用瀏覽器來(lái)查看我們的 HTML 頁(yè)面。
我們有一個(gè)空的 HTML 文件,以下是蝙蝠俠想在他的情書中寫的第一段。
“After all the battles we fought together, after all the difficult times we saw together, and after all the good and bad moments we’ve been through, I think it’s time I let you know how I feel about you.”
復(fù)制這些到 VS Code 中的 loveletter.html。單擊 “View -> Toggle Word Wrap (alt+z)” 自動(dòng)換行。
保存并在瀏覽器中打開(kāi)它。如果它已經(jīng)打開(kāi),單擊瀏覽器中的刷新按鈕。
瞧!那是你的第一個(gè)網(wǎng)頁(yè)!
我們的第一段已準(zhǔn)備就緒,但這不是在 HTML 中編寫段落的推薦方法。我們有一種特定的方法讓瀏覽器知道一個(gè)文本是一個(gè)段落。
如果你用 <p> 和 </p> 來(lái)包裹文本,那么瀏覽器將識(shí)別 <p> 和 </p> 中的文本是一個(gè)段落。我們這樣做:
<p>After all the battles we fought together, after all the difficult times we saw together, after all the good and bad moments we've been through, I think it's time I let you know how I feel about you.</p>
通過(guò)在 <p> 和 </p>中編寫段落,你創(chuàng)建了一個(gè) HTML 元素。一個(gè)網(wǎng)頁(yè)就是 HTML 元素的集合。
讓我們首先來(lái)認(rèn)識(shí)一些術(shù)語(yǔ):<p> 是開(kāi)始標(biāo)簽,</p> 是結(jié)束標(biāo)簽,“p” 是標(biāo)簽名稱。元素開(kāi)始和結(jié)束標(biāo)簽之間的文本是元素的內(nèi)容。
在上面,你將看到文本覆蓋屏幕的整個(gè)寬度。
我們不希望這樣。沒(méi)有人想要閱讀這么長(zhǎng)的行。讓我們?cè)O(shè)定段落寬度為 550px。
我們可以通過(guò)使用元素的 style 屬性來(lái)實(shí)現(xiàn)。你可以在其 style 屬性中定義元素的樣式(例如,在我們的示例中為寬度)。以下行將在 p 元素上創(chuàng)建一個(gè)空樣式屬性:
<p style="">...</p>
你看到那個(gè)空的 "" 了嗎?這就是我們定義元素外觀的地方。現(xiàn)在我們要將寬度設(shè)置為 550px。我們這樣做:
<p style="width:550px;">
After all the battles we fought together, after all the difficult times we saw together, after all the good and bad moments we've been through, I think it's time I let you know how I feel about you.
</p>
我們將 width 屬性設(shè)置為 550px,用冒號(hào) : 分隔,以分號(hào) ; 結(jié)束。
另外,注意我們?nèi)绾螌?<p> 和 </p> 放在單獨(dú)的行中,文本內(nèi)容用一個(gè)制表符縮進(jìn)。像這樣設(shè)置代碼使其更具可讀性。
接下來(lái),蝙蝠俠希望列出他所欽佩的人的一些優(yōu)點(diǎn),例如:
You complete my darkness with your light. I love:
- the way you see good in the worst things
- the way you handle emotionally difficult situations
- the way you look at Justice
I have learned a lot from you. You have occupied a special place in my heart over time.
這看起來(lái)很簡(jiǎn)單。
讓我們繼續(xù),在 </p> 下面復(fù)制所需的文本:
<p style="width:550px;">
After all the battles we faught together, after all the difficult times we saw together, after all the good and bad moments we've been through, I think it's time I let you know how I feel about you.
</p>
<p style="width:550px;">
You complete my darkness with your light. I love:
- the way you see good in the worse
- the way you handle emotionally difficult situations
- the way you look at Justice
I have learned a lot from you. You have occupied a special place in my heart over the time.
</p>
保存并刷新瀏覽器。
哇!這里發(fā)生了什么,我們的列表在哪里?
如果你仔細(xì)觀察,你會(huì)發(fā)現(xiàn)沒(méi)有顯示換行符。在代碼中我們?cè)谛碌囊恍兄芯帉懥斜眄?xiàng),但這些項(xiàng)在瀏覽器中顯示在一行中。
如果你想在 HTML(新行)中插入換行符,你必須使用 <br>。讓我們來(lái)使用 <br>,看看它長(zhǎng)什么樣:
<p style="width:550px;">
After all the battles we faught together, after all the difficult times we saw together, after all the good and bad moments we've been through, I think it's time I let you know how I feel about you.
</p>
<p style="width:550px;">
You complete my darkness with your light. I love: <br>
- the way you see good in the worse <br>
- the way you handle emotionally difficult situations <br>
- the way you look at Justice <br>
I have learned a lot from you. You have occupied a special place in my heart over the time.
</p>
保存并刷新:
好的,現(xiàn)在它看起來(lái)就像我們想要的那樣!
另外,注意我們沒(méi)有寫一個(gè) </br>。有些標(biāo)簽不需要結(jié)束標(biāo)簽(它們被稱為自閉合標(biāo)簽)。
還有一件事:我們沒(méi)有在兩個(gè)段落之間使用 <br>,但第二個(gè)段落仍然是從一個(gè)新行開(kāi)始,這是因?yàn)?<p> 元素會(huì)自動(dòng)插入換行符。
我們使用純文本編寫列表,但是有兩個(gè)標(biāo)簽可以供我們使用來(lái)達(dá)到相同的目的:<ul> and <li>。
讓我們解釋一下名字的意思:ul 代表 無(wú)序列表(Unordered List),li 代表 列表項(xiàng)目(List Item)。讓我們使用它們來(lái)展示我們的列表:
<p style="width:550px;">
After all the battles we faught together, after all the difficult times we saw together, after all the good and bad moments we've been through, I think it's time I let you know how I feel about you.
</p>
<p style="width:550px;">
You complete my darkness with your light. I love:
<ul>
<li>the way you see good in the worse</li>
<li>the way you handle emotionally difficult situations</li>
<li>the way you look at Justice</li>
</ul>
I have learned a lot from you. You have occupied a special place in my heart over the time.
</p>
在復(fù)制代碼之前,注意差異部分:
讓我們保存文件并刷新瀏覽器以查看結(jié)果:
你會(huì)立即注意到在每個(gè)列表項(xiàng)之前顯示了重點(diǎn)標(biāo)志。我們現(xiàn)在不需要在每個(gè)列表項(xiàng)之前寫 “-”。
經(jīng)過(guò)仔細(xì)檢查,你會(huì)注意到最后一行超出 550px 寬度。這是為什么?因?yàn)?HTML 不允許 <ul> 元素出現(xiàn)在 <p> 元素中。讓我們將第一行和最后一行放在單獨(dú)的 <p> 元素中:
<p style="width:550px;">
After all the battles we faught together, after all the difficult times we saw together, after all the good and bad moments we've been through, I think it's time I let you know how I feel about you.
</p>
<p style="width:550px;">
You complete my darkness with your light. I love:
</p>
<ul style="width:550px;">
<li>the way you see good in the worse</li>
<li>the way you handle emotionally difficult situations</li>
<li>the way you look at Justice</li>
</ul>
<p style="width:550px;">
I have learned a lot from you. You have occupied a special place in my heart over the time.
</p>
保存并刷新。
注意,這次我們還定義了 <ul> 元素的寬度。那是因?yàn)槲覀儸F(xiàn)在已經(jīng)將 <ul> 元素放在了 <p> 元素之外。
定義情書中所有元素的寬度會(huì)變得很麻煩。我們有一個(gè)特定的元素用于此目的:<div> 元素。一個(gè) <div> 元素就是一個(gè)通用容器,用于對(duì)內(nèi)容進(jìn)行分組,以便輕松設(shè)置樣式。
讓我們用 <div> 元素包裝整個(gè)情書,并為其賦予寬度:550px 。
<div style="width:550px;">
<p>
After all the battles we faught together, after all the difficult times we saw together, after all the good and bad moments we've been through, I think it's time I let you know how I feel about you.
</p>
<p>
You complete my darkness with your light. I love:
</p>
<ul>
<li>the way you see good in the worse</li>
<li>the way you handle emotionally difficult situations</li>
<li>the way you look at Justice</li>
</ul>
<p>
I have learned a lot from you. You have occupied a special place in my heart over the time.
</p>
</div>
棒極了,我們的代碼現(xiàn)在看起來(lái)簡(jiǎn)潔多了。
到目前為止,蝙蝠俠對(duì)結(jié)果很高興,他希望在情書上標(biāo)題。他想寫一個(gè)標(biāo)題: “Bat Letter”。當(dāng)然,你已經(jīng)看到這個(gè)名字了,不是嗎?:D
你可以使用 <h1>、<h2>、<h3>、<h4>、<h5> 和 <h6> 標(biāo)簽來(lái)添加標(biāo)題,<h1> 是最大的標(biāo)題和最主要的標(biāo)題,<h6> 是最小的標(biāo)題。
讓我們?cè)诘诙沃笆褂?<h1> 做主標(biāo)題和一個(gè)副標(biāo)題:
<div style="width:550px;">
<h1>Bat Letter</h1>
<p>
After all the battles we faught together, after all the difficult times we saw together, after all the good and bad moments we've been through, I think it's time I let you know how I feel about you.
</p>
<h2>You are the light of my life</h2>
<p>
You complete my darkness with your light. I love:
</p>
<ul>
<li>the way you see good in the worse</li>
<li>the way you handle emotionally difficult situations</li>
<li>the way you look at Justice</li>
</ul>
<p>
I have learned a lot from you. You have occupied a special place in my heart over the time.
</p>
</div>
保存,刷新。
我們的情書尚未完成,但在繼續(xù)之前,缺少一件大事:蝙蝠俠標(biāo)志。你見(jiàn)過(guò)是蝙蝠俠的東西但沒(méi)有蝙蝠俠的標(biāo)志嗎?
并沒(méi)有。
所以,讓我們?cè)谇闀刑砑右粋€(gè)蝙蝠俠標(biāo)志。
在 HTML 中包含圖像就像在一個(gè) Word 文件中包含圖像一樣。在 MS Word 中,你到 “菜單 -> 插入 -> 圖像 -> 然后導(dǎo)航到圖像位置為止 -> 選擇圖像 -> 單擊插入”。
在 HTML 中,我們使用 <img> 標(biāo)簽讓瀏覽器知道我們需要加載的圖像,而不是單擊菜單。我們?cè)?src 屬性中寫入文件的位置和名稱。如果圖像在項(xiàng)目根目錄中,我們可以簡(jiǎn)單地在 src 屬性中寫入圖像文件的名稱。
在我們深入編碼之前,從 這里 下載蝙蝠俠標(biāo)志。你可能希望裁剪圖像中的額外空白區(qū)域。復(fù)制項(xiàng)目根目錄中的圖像并將其重命名為 “bat-logo.jpeg”。
<div style="width:550px;">
<h1>Bat Letter</h1>
<img src="bat-logo.jpeg">
<p>
After all the battles we faught together, after all the difficult times we saw together, after all the good and bad moments we've been through, I think it's time I let you know how I feel about you.
</p>
<h2>You are the light of my life</h2>
<p>
You complete my darkness with your light. I love:
</p>
<ul>
<li>the way you see good in the worse</li>
<li>the way you handle emotionally difficult situations</li>
<li>the way you look at Justice</li>
</ul>
<p>
I have learned a lot from you. You have occupied a special place in my heart over the time.
</p>
</div>
我們?cè)诘?3 行包含了 <img> 標(biāo)簽。這個(gè)標(biāo)簽也是一個(gè)自閉合的標(biāo)簽,所以我們不需要寫 </img>。在 src 屬性中,我們給出了圖像文件的名稱。這個(gè)名稱應(yīng)與圖像名稱完全相同,包括擴(kuò)展名(.jpeg)及其大小寫。
保存并刷新,查看結(jié)果。
該死的!剛剛發(fā)生了什么?
當(dāng)使用 <img> 標(biāo)簽包含圖像時(shí),默認(rèn)情況下,圖像將以其原始分辨率顯示。在我們的例子中,圖像比 550px 寬得多。讓我們使用 style 屬性定義它的寬度:
<div style="width:550px;">
<h1>Bat Letter</h1>
<img src="bat-logo.jpeg" style="width:100%">
<p>
After all the battles we faught together, after all the difficult times we saw together, after all the good and bad moments we've been through, I think it's time I let you know how I feel about you.
</p>
<h2>You are the light of my life</h2>
<p>
You complete my darkness with your light. I love:
</p>
<ul>
<li>the way you see good in the worse</li>
<li>the way you handle emotionally difficult situations</li>
<li>the way you look at Justice</li>
</ul>
<p>
I have learned a lot from you. You have occupied a special place in my heart over the time.
</p>
</div>
你會(huì)注意到,這次我們定義寬度使用了 “%” 而不是 “px”。當(dāng)我們?cè)?“%” 中定義寬度時(shí),它將占據(jù)父元素寬度的百分比。因此,100% 的 550px 將為我們提供 550px。
保存并刷新,查看結(jié)果。
太棒了!這讓蝙蝠俠的臉露出了羞澀的微笑 :)。
現(xiàn)在蝙蝠俠想在最后幾段中承認(rèn)他的愛(ài)。他有以下文本供你用 HTML 編寫:
“I have a confession to make
It feels like my chest does have a heart. You make my heart beat. Your smile brings a smile to my face, your pain brings pain to my heart.
I don’t show my emotions, but I think this man behind the mask is falling for you.”
當(dāng)閱讀到這里時(shí),你會(huì)問(wèn)蝙蝠俠:“等等,這是給誰(shuí)的?”蝙蝠俠說(shuō):
“這是給超人的。”
你說(shuō):哦!我還以為是給神奇女俠的呢。
蝙蝠俠說(shuō):不,這是給超人的,請(qǐng)?jiān)谧詈髮懮?“I love you Superman.”。
好的,我們來(lái)寫:
<div style="width:550px;">
<h1>Bat Letter</h1>
<img src="bat-logo.jpeg" style="width:100%">
<p>
After all the battles we faught together, after all the difficult times we saw together, after all the good and bad moments we've been through, I think it's time I let you know how I feel about you.
</p>
<h2>You are the light of my life</h2>
<p>
You complete my darkness with your light. I love:
</p>
<ul>
<li>the way you see good in the worse</li>
<li>the way you handle emotionally difficult situations</li>
<li>the way you look at Justice</li>
</ul>
<p>
I have learned a lot from you. You have occupied a special place in my heart over the time.
</p>
<h2>I have a confession to make</h2>
<p>
It feels like my chest does have a heart. You make my heart beat. Your smile brings smile on my face, your pain brings pain to my heart.
</p>
<p>
I don't show my emotions, but I think this man behind the mask is falling for you.
</p>
<p>I love you Superman.</p>
<p>
Your not-so-secret-lover, <br>
Batman
</p>
</div>
這封信差不多完成了,蝙蝠俠另外想再做兩次改變。蝙蝠俠希望在最后段落的第一句中的 “does” 一詞是斜體,而 “I love you Superman” 這句話是粗體的。
我們使用 <em> 和 <strong> 以斜體和粗體顯示文本。讓我們來(lái)更新這些更改:
<div style="width:550px;">
<h1>Bat Letter</h1>
<img src="bat-logo.jpeg" style="width:100%">
<p>
After all the battles we faught together, after all the difficult times we saw together, after all the good and bad moments we've been through, I think it's time I let you know how I feel about you.
</p>
<h2>You are the light of my life</h2>
<p>
You complete my darkness with your light. I love:
</p>
<ul>
<li>the way you see good in the worse</li>
<li>the way you handle emotionally difficult situations</li>
<li>the way you look at Justice</li>
</ul>
<p>
I have learned a lot from you. You have occupied a special place in my heart over the time.
</p>
<h2>I have a confession to make</h2>
<p>
It feels like my chest <em>does</em> have a heart. You make my heart beat. Your smile brings smile on my face, your pain brings pain to my heart.
</p>
<p>
I don't show my emotions, but I think this man behind the mask is falling for you.
</p>
<p><strong>I love you Superman.</strong></p>
<p>
Your not-so-secret-lover, <br>
Batman
</p>
</div>
你可以通過(guò)三種方式設(shè)置樣式或定義 HTML 元素的外觀:
讓我們來(lái)看看如何定義 <div> 的內(nèi)聯(lián)樣式:
<div style="width:550px;">
我們可以在 <style> 和 </style> 里面寫同樣的樣式:
div{
width:550px;
}
在嵌入式樣式中,我們編寫的樣式是與元素分開(kāi)的。所以我們需要一種方法來(lái)關(guān)聯(lián)元素及其樣式。第一個(gè)單詞 “div” 就做了這樣的活。它讓瀏覽器知道花括號(hào) {...} 里面的所有樣式都屬于 “div” 元素。由于這種語(yǔ)法確定要應(yīng)用樣式的元素,因此它稱為一個(gè)選擇器。
我們編寫樣式的方式保持不變:屬性(width)和值(550px)用冒號(hào)(:)分隔,以分號(hào)(;)結(jié)束。
讓我們從 <div> 和 <img> 元素中刪除內(nèi)聯(lián)樣式,將其寫入 <style> 元素:
<style>
div{
width:550px;
}
img{
width:100%;
}
</style>
<div>
<h1>Bat Letter</h1>
<img src="bat-logo.jpeg">
<p>
After all the battles we faught together, after all the difficult times we saw together, after all the good and bad moments we've been through, I think it's time I let you know how I feel about you.
</p>
<h2>You are the light of my life</h2>
<p>
You complete my darkness with your light. I love:
</p>
<ul>
<li>the way you see good in the worse</li>
<li>the way you handle emotionally difficult situations</li>
<li>the way you look at Justice</li>
</ul>
<p>
I have learned a lot from you. You have occupied a special place in my heart over the time.
</p>
<h2>I have a confession to make</h2>
<p>
It feels like my chest <em>does</em> have a heart. You make my heart beat. Your smile brings smile on my face, your pain brings pain to my heart.
</p>
<p>
I don't show my emotions, but I think this man behind the mask is falling for you.
</p>
<p><strong>I love you Superman.</strong></p>
<p>
Your not-so-secret-lover, <br>
Batman
</p>
</div>
保存并刷新,結(jié)果應(yīng)保持不變。
但是有一個(gè)大問(wèn)題,如果我們的 HTML 文件中有多個(gè) <div> 和 <img> 元素該怎么辦?這樣我們?cè)?<style> 元素中為 div 和 img 定義的樣式就會(huì)應(yīng)用于頁(yè)面上的每個(gè) div 和 img。
如果你在以后的代碼中添加另一個(gè) div,那么該 div 也將變?yōu)?550px 寬。我們并不希望這樣。
我們想要將我們的樣式應(yīng)用于現(xiàn)在正在使用的特定 div 和 img。為此,我們需要為 div 和 img 元素提供唯一的 id。以下是使用 id 屬性為元素賦予 id 的方法:
<div id="letter-container">
以下是如何在嵌入式樣式中將此 id 用作選擇器:
#letter-container{
...
}
注意 # 符號(hào)。它表示它是一個(gè) id,{...} 中的樣式應(yīng)該只應(yīng)用于具有該特定 id 的元素。
讓我們來(lái)應(yīng)用它:
<style>
#letter-container{
width:550px;
}
#header-bat-logo{
width:100%;
}
</style>
<div id="letter-container">
<h1>Bat Letter</h1>
<img id="header-bat-logo" src="bat-logo.jpeg">
<p>
After all the battles we faught together, after all the difficult times we saw together, after all the good and bad moments we've been through, I think it's time I let you know how I feel about you.
</p>
<h2>You are the light of my life</h2>
<p>
You complete my darkness with your light. I love:
</p>
<ul>
<li>the way you see good in the worse</li>
<li>the way you handle emotionally difficult situations</li>
<li>the way you look at Justice</li>
</ul>
<p>
I have learned a lot from you. You have occupied a special place in my heart over the time.
</p>
<h2>I have a confession to make</h2>
<p>
It feels like my chest <em>does</em> have a heart. You make my heart beat. Your smile brings smile on my face, your pain brings pain to my heart.
</p>
<p>
I don't show my emotions, but I think this man behind the mask is falling for you.
</p>
<p><strong>I love you Superman.</strong></p>
<p>
Your not-so-secret-lover, <br>
Batman
</p>
</div>
HTML 已經(jīng)準(zhǔn)備好了嵌入式樣式。
但是,你可以看到,隨著我們包含越來(lái)越多的樣式,<style></style> 將變得很大。這可能很快會(huì)混亂我們的主 HTML 文件。
因此,讓我們更進(jìn)一步,通過(guò)將 <style> 標(biāo)簽內(nèi)的內(nèi)容復(fù)制到一個(gè)新文件來(lái)使用鏈接樣式。
在項(xiàng)目根目錄中創(chuàng)建一個(gè)新文件,將其另存為 “style.css”:
#letter-container{
width:550px;
}
#header-bat-logo{
width:100%;
}
我們不需要在 CSS 文件中寫 <style> 和 </style>。
我們需要使用 HTML 文件中的 <link> 標(biāo)簽來(lái)將新創(chuàng)建的 CSS 文件鏈接到 HTML 文件。以下是我們?nèi)绾巫龅竭@一點(diǎn):
<link rel="stylesheet" type="text/css" href="style.css">
我們使用 <link> 元素在 HTML 文檔中包含外部資源,它主要用于鏈接樣式表。我們使用的三個(gè)屬性是:
link 元素的結(jié)尾沒(méi)有 </link>。因此,<link> 也是一個(gè)自閉合的標(biāo)簽。
<link rel="gf" type="cute" href="girl.next.door">
如果只是得到一個(gè)女朋友,那么很容易:D
可惜沒(méi)有那么簡(jiǎn)單,讓我們繼續(xù)前進(jìn)。
這是我們 “l(fā)oveletter.html” 的內(nèi)容:
<link rel="stylesheet" type="text/css" href="style.css">
<div id="letter-container">
<h1>Bat Letter</h1>
<img id="header-bat-logo" src="bat-logo.jpeg">
<p>
After all the battles we faught together, after all the difficult times we saw together, after all the good and bad moments we've been through, I think it's time I let you know how I feel about you.
</p>
<h2>You are the light of my life</h2>
<p>
You complete my darkness with your light. I love:
</p>
<ul>
<li>the way you see good in the worse</li>
<li>the way you handle emotionally difficult situations</li>
<li>the way you look at Justice</li>
</ul>
<p>
I have learned a lot from you. You have occupied a special place in my heart over the time.
</p>
<h2>I have a confession to make</h2>
<p>
It feels like my chest <em>does</em> have a heart. You make my heart beat. Your smile brings smile on my face, your pain brings pain to my heart.
</p>
<p>
I don't show my emotions, but I think this man behind the mask is falling for you.
</p>
<p><strong>I love you Superman.</strong></p>
<p>
Your not-so-secret-lover, <br>
Batman
</p>
</div>
“style.css” 內(nèi)容:
#letter-container{
width:550px;
}
#header-bat-logo{
width:100%;
}
保存文件并刷新,瀏覽器中的輸出應(yīng)保持不變。
我們的情書已經(jīng)準(zhǔn)備好給蝙蝠俠,但還有一些正式的片段。
與其他任何編程語(yǔ)言一樣,HTML 自出生以來(lái)(1990 年)經(jīng)歷過(guò)許多版本,當(dāng)前版本是 HTML5。
那么,瀏覽器如何知道你使用哪個(gè)版本的 HTML 來(lái)編寫頁(yè)面呢?要告訴瀏覽器你正在使用 HTML5,你需要在頁(yè)面頂部包含 <!DOCTYPE html>。對(duì)于舊版本的 HTML,這行不同,但你不需要了解它們,因?yàn)槲覀儾辉偈褂盟鼈兞恕?/p>
此外,在之前的 HTML 版本中,我們?cè)?jīng)將整個(gè)文檔封裝在 <html></html> 標(biāo)簽內(nèi)。整個(gè)文件分為兩個(gè)主要部分:頭部在 <head></head> 里面,主體在 <body></body> 里面。這在 HTML5 中不是必須的,但由于兼容性原因,我們?nèi)匀贿@樣做。讓我們用 <Doctype>, <html>、 <head> 和 <body> 更新我們的代碼:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="letter-container">
<h1>Bat Letter</h1>
<img id="header-bat-logo" src="bat-logo.jpeg">
<p>
After all the battles we faught together, after all the difficult times we saw together, after all the good and bad moments we've been through, I think it's time I let you know how I feel about you.
</p>
<h2>You are the light of my life</h2>
<p>
You complete my darkness with your light. I love:
</p>
<ul>
<li>the way you see good in the worse</li>
<li>the way you handle emotionally difficult situations</li>
<li>the way you look at Justice</li>
</ul>
<p>
I have learned a lot from you. You have occupied a special place in my heart over the time.
</p>
<h2>I have a confession to make</h2>
<p>
It feels like my chest <em>does</em> have a heart. You make my heart beat. Your smile brings smile on my face, your pain brings pain to my heart.
</p>
<p>
I don't show my emotions, but I think this man behind the mask is falling for you.
</p>
<p><strong>I love you Superman.</strong></p>
<p>
Your not-so-secret-lover, <br>
Batman
</p>
</div>
</body>
</html>
主要內(nèi)容在 <body> 里面,元信息在 <head> 里面。所以我們把 <div> 保存在 <body> 里面并加載 <head> 里面的樣式表。
保存并刷新,你的 HTML 頁(yè)面應(yīng)顯示與之前相同的內(nèi)容。
我發(fā)誓,這是最后一次改變。
你可能已經(jīng)注意到選項(xiàng)卡的標(biāo)題正在顯示 HTML 文件的路徑:
我們可以使用 <title> 標(biāo)簽來(lái)定義 HTML 文件的標(biāo)題。標(biāo)題標(biāo)簽也像鏈接標(biāo)簽一樣在 <head> 內(nèi)部。讓我們我們?cè)跇?biāo)題中加上 “Bat Letter”:
<!DOCTYPE html>
<html>
<head>
<title>Bat Letter</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="letter-container">
<h1>Bat Letter</h1>
<img id="header-bat-logo" src="bat-logo.jpeg">
<p>
After all the battles we faught together, after all the difficult times we saw together, after all the good and bad moments we've been through, I think it's time I let you know how I feel about you.
</p>
<h2>You are the light of my life</h2>
<p>
You complete my darkness with your light. I love:
</p>
<ul>
<li>the way you see good in the worse</li>
<li>the way you handle emotionally difficult situations</li>
<li>the way you look at Justice</li>
</ul>
<p>
I have learned a lot from you. You have occupied a special place in my heart over the time.
</p>
<h2>I have a confession to make</h2>
<p>
It feels like my chest <em>does</em> have a heart. You make my heart beat. Your smile brings smile on my face, your pain brings pain to my heart.
</p>
<p>
I don't show my emotions, but I think this man behind the mask is falling for you.
</p>
<p><strong>I love you Superman.</strong></p>
<p>
Your not-so-secret-lover, <br>
Batman
</p>
</div>
</body>
</html>
保存并刷新,你將看到在選項(xiàng)卡上顯示的是 “Bat Letter” 而不是文件路徑。
蝙蝠俠的情書現(xiàn)在已經(jīng)完成。
恭喜!你用 HTML 制作了蝙蝠俠的情書。
我們學(xué)習(xí)了以下新概念:
我們學(xué)習(xí)了以下 HTML 標(biāo)簽:
我們學(xué)習(xí)了以下 CSS 屬性:
朋友們,這就是今天的全部了,下一個(gè)教程中見(jiàn)。
作者簡(jiǎn)介:開(kāi)發(fā)者 + 作者 | supersarkar.com | twitter.com/supersarkar
via: https://medium.freecodecamp.org/for-your-first-html-code-lets-help-batman-write-a-love-letter-64c203b9360b
作者: Kunal Sarkar 譯者: MjSeven 校對(duì): wxy
本文由 LCTT 原創(chuàng)編譯, Linux中國(guó) 榮譽(yù)推出
<html>
<head>
<title>DOM 教程</title>
</head>
<body>
<h1>DOM 第一課</h1>
<p class="example">Hello world!</p>
<input name="myInput" type="text" size="20" /><br />
<h1 id="myHeader">This is a header</h1>
</body>
</html>
上面的 HTML 中:
<html> 節(jié)點(diǎn)沒(méi)有父節(jié)點(diǎn);它是根節(jié)點(diǎn)
<head> 和 <body> 的父節(jié)點(diǎn)是 <html> 節(jié)點(diǎn)
文本節(jié)點(diǎn) "Hello world!" 的父節(jié)點(diǎn)是 <p> 節(jié)點(diǎn)
并且:
<html> 節(jié)點(diǎn)擁有兩個(gè)子節(jié)點(diǎn):<head> 和 <body>
<head> 節(jié)點(diǎn)擁有一個(gè)子節(jié)點(diǎn):<title> 節(jié)點(diǎn)
<title> 節(jié)點(diǎn)也擁有一個(gè)子節(jié)點(diǎn):文本節(jié)點(diǎn) "DOM 教程"
<h1> 和 <p> 節(jié)點(diǎn)是同胞節(jié)點(diǎn), 同時(shí)也是 <body> 的子節(jié)點(diǎn)
并且:
<head> 元素是 <html> 元素的首個(gè)子節(jié)點(diǎn)
<body> 元素是 <html> 元素的最后一個(gè)子節(jié)點(diǎn)
<h1> 元素是 <body> 元素的首個(gè)子節(jié)點(diǎn)
<p> 元素是 <body> 元素的最后一個(gè)子節(jié)點(diǎn)
訪問(wèn)節(jié)點(diǎn):
var oLi = document.getElementsByTagName("li");
var oLi = document.getElementById("myHeader");
var oLi = document.getElementsByName("myInput"); //通過(guò)name屬性訪問(wèn)
querySelector訪問(wèn)方式: IE8開(kāi)始支持, IE8以下不支持
var div = document.querySelector("#myHeader"); //通過(guò)id訪問(wèn)
var div = document.querySelector("li"); //通過(guò)標(biāo)簽訪問(wèn)
document.querySelector(".example"); //通過(guò)class屬性訪問(wèn)
獲取表單值
document.getElementById(id).value
querySelector() 方法返回文檔中匹配指定 CSS 選擇器的一個(gè)元素。
注意: querySelector() 方法僅僅返回匹配指定選擇器的第一個(gè)元素。
如果你需要返回所有的元素, 請(qǐng)使用 querySelectorAll() 方法替代。
利用父子兄關(guān)系查找節(jié)點(diǎn):
使用childNodes屬性
對(duì)象屬性
nodeName 返回當(dāng)前節(jié)點(diǎn)名字
元素節(jié)點(diǎn)的 nodeName 是標(biāo)簽名稱
屬性節(jié)點(diǎn)的 nodeName 是屬性名稱
文本節(jié)點(diǎn)的 nodeName 永遠(yuǎn)是 #text
文檔節(jié)點(diǎn)的 nodeName 永遠(yuǎn)是 #document
nodeValue 返回當(dāng)前節(jié)點(diǎn)的值, 僅對(duì)文本節(jié)點(diǎn)和屬性節(jié)點(diǎn)
對(duì)于文本節(jié)點(diǎn), nodeValue 屬性包含文本。
對(duì)于屬性節(jié)點(diǎn), nodeValue 屬性包含屬性值。
nodeValue 屬性對(duì)于文檔節(jié)點(diǎn)和元素節(jié)點(diǎn)是不可用的。
注意:nodeValue與tagName的區(qū)別對(duì)于空白節(jié)點(diǎn)的返回值:nodeValue返回null, tagName返回undefined
對(duì)于文本節(jié)點(diǎn)的返回值:nodeValue返回文本, tagName返回undefined
nodeType 檢測(cè)節(jié)點(diǎn)類型:
alert(document.nodeType);
元素節(jié)點(diǎn)的nodeType值為1; 標(biāo)簽名稱
屬性節(jié)點(diǎn)的nodeType值為2; 屬性名稱 屬性節(jié)點(diǎn)不能算是其元素節(jié)點(diǎn)的子節(jié)點(diǎn)
文本節(jié)點(diǎn)的nodeType值為3; #text
注釋(Comment) 8: #comment
文檔(Document) 9 #document <HTML>
文檔類型(DocumentType) 10: <!DOCTYPE HTML PUBLIC"...">
節(jié)點(diǎn) nodeType nodeName nodeValue
元素節(jié)點(diǎn) 1 大寫的標(biāo)簽名 null
屬性節(jié)點(diǎn) 2 屬性名 屬性值
文本節(jié)點(diǎn) 3 #text 文本值
tagName 返回標(biāo)簽的名稱, 僅對(duì)元素節(jié)點(diǎn)
parentNode 返回當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn), 如果存在的話
childNodes 返回當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)集合
firstChild 對(duì)標(biāo)記的子節(jié)點(diǎn)集合中第一個(gè)節(jié)點(diǎn)的引用, 如果存在的話
lastChild 對(duì)標(biāo)記的子節(jié)點(diǎn)集合中最后一個(gè)節(jié)點(diǎn)的引用, 如果存在的話
previousSibling 對(duì)同屬一個(gè)父節(jié)點(diǎn)的前一個(gè)兄弟節(jié)點(diǎn)的引用
nextSibling 對(duì)同屬一個(gè)父節(jié)點(diǎn)的下一個(gè)兄弟節(jié)點(diǎn)的引用
Attributes 返回當(dāng)前節(jié)點(diǎn)(標(biāo)記)屬性的列表 用于XML文件
ownerDocument 返回節(jié)點(diǎn)所屬的根元素
一些 DOM 對(duì)象方法
getElementById() 返回帶有指定 ID 的元素。
getElementsByTagName() 返回包含帶有指定標(biāo)簽名稱的所有元素的節(jié)點(diǎn)列表(集合/節(jié)點(diǎn)數(shù)組)。
getElementsByName() 返回包含帶有指定類名的所有元素的節(jié)點(diǎn)列表。
appendChild() 把新的子節(jié)點(diǎn)添加到指定節(jié)點(diǎn)。
removeChild() 刪除子節(jié)點(diǎn)。
replaceChild() 替換子節(jié)點(diǎn)。
insertBefore() 在指定的子節(jié)點(diǎn)前面插入新的子節(jié)點(diǎn)。
createAttribute() 創(chuàng)建屬性節(jié)點(diǎn)。
createElement() 創(chuàng)建元素節(jié)點(diǎn)。
createTextNode() 創(chuàng)建文本節(jié)點(diǎn)。
getAttribute() 返回指定的屬性值。
setAttribute() 把指定屬性設(shè)置或修改為指定的值。
刪除、替換、插入子節(jié)點(diǎn)必須通過(guò)父節(jié)點(diǎn)的removeChild()方法來(lái)完成的
createAttribute() 創(chuàng)建屬性節(jié)點(diǎn)
var att=document.createAttribute("class");
att.value="democlass";
document.getElementsByTagName("H1")[0].setAttributeNode(att);
以上代碼可以簡(jiǎn)化為
document.getElementsByTagName("H1")[0].class="democlass";
createAttribute()結(jié)合setAttributeNode()使用
等同于:
document.getElementsByTagName("H1")[0].setAttributeNode("class", "democlass");
DOM獲取所有子節(jié)點(diǎn):
<html>
<head>
<title>childNodes</title>
<script language="javascript">
function myDOMInspector(){
var oUl = document.getElementById("myList"); //獲取<ul>標(biāo)記
var DOMString = "";
if(oUl.hasChildNodes()){ //判斷是否有子節(jié)點(diǎn)
var oCh = oUl.childNodes;
for(var i=0;i<oCh.length;i++) //逐一查找
DOMString += oCh[i].nodeName + "\n";
}
alert(DOMString);
}
</script>
</head>
<body onload="myDOMInspector()">
<ul id="myList">
<li>糖醋排骨</li>
<li>圓籠粉蒸肉</li>
<li>泡菜魚(yú)</li>
<li>板栗燒雞</li>
<li>麻婆豆腐</li>
</ul>
</body>
</html>
使用parentNode屬性:
<html>
<head>
<title>parentNode</title>
<script language="javascript">
function myDOMInspector(){
var myItem = document.getElementById("myDearFood");
alert(myItem.parentNode.tagName); //返回值為ul
}
</script>
</head>
<body onload="myDOMInspector()">
<ul>
<li>糖醋排骨</li>
<li>圓籠粉蒸肉</li>
<li>泡菜魚(yú)</li>
<li id="myDearFood">板栗燒雞</li>
<li>麻婆豆腐</li>
</ul>
</body>
</html>
DOM的兄弟關(guān)系:
<html>
<head>
<title>Siblings</title>
<script language="javascript">
function myDOMInspector(){
var myItem = document.getElementById("myDearFood");
//訪問(wèn)兄弟節(jié)點(diǎn)
var nextListItem = myItem.nextSibling;
var preListItem = myItem.previousSibling;
alert(nextListItem.tagName +" "+ preListItem.tagName);
}
</script>
</head>
<body onload="myDOMInspector()">
<ul>
<li>糖醋排骨</li>
<li>圓籠粉蒸肉</li>
<li>泡菜魚(yú)</li>
<li id="myDearFood">板栗燒雞</li>
<li>麻婆豆腐</li>
</ul>
</body>
</html>
編寫自定義函數(shù)解決Firefox等瀏覽器包含眾多的空格作為文本節(jié)點(diǎn)問(wèn)題。
<html>
<head>
<title>Siblings</title>
<script language="javascript">
function nextSib(node){
var tempLast = node.parentNode.lastChild;
//判斷是否是最后一個(gè)節(jié)點(diǎn),如果是則返回null
if(node == tempLast)
return null;
var tempObj = node.nextSibling;
//逐一搜索后面的兄弟節(jié)點(diǎn),直到發(fā)現(xiàn)元素節(jié)點(diǎn)為止
while(tempObj.nodeType!=1 && tempObj.nextSibling!=null)
tempObj = tempObj.nextSibling;
//三目運(yùn)算符,如果是元素節(jié)點(diǎn)則返回節(jié)點(diǎn)本身,否則返回null
return (tempObj.nodeType==1)?tempObj:null;
}
function prevSib(node){
var tempFirst = node.parentNode.firstChild;
//判斷是否是第一個(gè)節(jié)點(diǎn),如果是則返回null
if(node == tempFirst)
return null;
var tempObj = node.previousSibling;
//逐一搜索前面的兄弟節(jié)點(diǎn),直到發(fā)現(xiàn)元素節(jié)點(diǎn)為止
while(tempObj.nodeType!=1 && tempObj.previousSibling!=null)
tempObj = tempObj.previousSibling;
return (tempObj.nodeType==1)?tempObj:null;
}
function myDOMInspector(){
var myItem = document.getElementById("myDearFood");
//獲取后一個(gè)元素兄弟節(jié)點(diǎn)
var nextListItem = nextSib(myItem);
//獲取前一個(gè)元素兄弟節(jié)點(diǎn)
var preListItem = prevSib(myItem);
alert("后一項(xiàng):" + ((nextListItem!=null)?nextListItem.firstChild.nodeValue:null) + " 前一項(xiàng):" + ((preListItem!=null)?preListItem.firstChild.nodeValue:null) );
}
</script>
</head>
<body onload="myDOMInspector()">
<ul>
<li>糖醋排骨</li>
<li>圓籠粉蒸肉</li>
<li>泡菜魚(yú)</li>
<li id="myDearFood">板栗燒雞</li>
<li>麻婆豆腐</li>
</ul>
</body>
</html>
注意:最新版的IE瀏覽器也包含眾多的空格作為文本節(jié)點(diǎn);
設(shè)置節(jié)點(diǎn)屬性:
getAttribute()方法和setAttibute()方法
<html>
<head>
<title>getAttribute()</title>
<script language="javascript">
function myDOMInspector(){
//獲取圖片
var myImg = document.getElementsByTagName("img")[0];
//獲取圖片title屬性
alert(myImg.getAttribute("title")); //也可以用myImg.title獲取屬性值
}
</script>
</head>
<body onload="myDOMInspector()">
<img src="01.jpg" title="情人坡" />
</body>
</html>
<html>
<head>
<title>setAttribute()</title>
<script language="javascript">
function changePic(){
//獲取圖片
var myImg = document.getElementsByTagName("img")[0];
//設(shè)置圖片src和title屬性
myImg.setAttribute("src","02.jpg"); //可以在屬性節(jié)點(diǎn)不存在時(shí),添加節(jié)點(diǎn)的屬性值;
myImg.setAttribute("title","紫荊公寓"); //也可以通過(guò)myImg.title="紫荊公寓";
}
</script>
</head>
<body>
<img src="01.jpg" title="情人坡" onclick="changePic()" />
</body>
</html>
setAttribute()設(shè)置HTML標(biāo)簽的屬性
oTable.setAttribute("border", "3"); //為表格邊框設(shè)置寬度
oTable.setAttribute("border", 3);
oTable.setAttribute("border", "3px"); //經(jīng)過(guò)測(cè)試, 此種寫法也正確
建議: 具體格式參照HTML屬性值的語(yǔ)法格式
setAttibute()設(shè)置行內(nèi)樣式
obj.setAttribute("style", "position:absolute;left:200px;top:200px");
注意:具體格式參考CSS樣式的語(yǔ)法格式
setAttibute()設(shè)置事件屬性
obj.setAttribute("onclick", "remove_img()"); //remove_img() 編寫自定義函數(shù), 這里不能使用自定義函數(shù)
注意:關(guān)于文本節(jié)點(diǎn)兼容性
元素節(jié)點(diǎn)
子節(jié)點(diǎn): childNodes children
首尾子節(jié)點(diǎn): firstChild firstElementChild
lastChild lastElementChild
兄弟節(jié)點(diǎn): nextSibling nextElementSibling
previousSibling previousElementSibling
childNodes firstChild lastChild nextSibling previousSibling屬性IE6-IE8版本瀏覽器不會(huì)返回空白節(jié)點(diǎn),
IE9以上版本瀏覽器會(huì)返回文本節(jié)點(diǎn), W3C瀏覽器(包括火狐瀏覽器)也會(huì)返回文本節(jié)點(diǎn)
children firstElementChild lastElementChild nextElementSibling previousElementSibling 只返回元素節(jié)點(diǎn), 不會(huì)返回空白節(jié)點(diǎn)
注意: DOM操作必須保住DOM節(jié)點(diǎn)必須存在, 當(dāng)然也包括使用css樣式display:none隱藏的DOM節(jié)點(diǎn), 否則會(huì)導(dǎo)致js語(yǔ)法錯(cuò)誤;
者:子非魚(yú)
轉(zhuǎn)發(fā)鏈接:https://mp.weixin.qq.com/s/uQ8c2Z6GJr4eyH3kidZt3g
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。