整合營銷服務商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          2022年秋季CS50 Lecture8 HTML,

          2022年秋季CS50 Lecture8 HTML,CSS,JavaScript
          • elcome!
          • Routers
          • DNS
          • HTTP
          • HTML
          • CSS
          • Frameworks
          • JavaScript
          • Summing Up

          Welcome!


          • 在前幾周,我們向你介紹了 Python,這是一種高級編程語言,它利用了我們在 C 語言中學到的相同構建塊。今天,我們將在HTML,CSS和JavaScript中進一步擴展這些構建塊。
          • 互聯(lián)網(wǎng)是我們所有人都使用的一項技術。
          • 利用我們前幾周的技能,我們可以構建自己的網(wǎng)頁和應用程序。
          • 阿帕網(wǎng) 將互聯(lián)網(wǎng)上的每一個點相互連接起來。
          • 兩點之間的點可以被視為路由器

          Routers


          • 為了將數(shù)據(jù)從一個地方路由到另一個地方,我們需要做出路由決策。也就是說,有人需要對數(shù)據(jù)如何從 A 點傳輸?shù)?B 點進行編程。
          • 你可以想象數(shù)據(jù)如何從 A 點和 B 點采用多條路徑,這樣當路由器擁塞時,數(shù)據(jù)可以通過另一條路徑流動。
          • TCP/IP 是允許計算機通過互聯(lián)網(wǎng)在它們之間傳輸數(shù)據(jù)的兩種協(xié)議。
          • IP 或互聯(lián)網(wǎng)協(xié)議是計算機可以通過互聯(lián)網(wǎng)相互識別的一種方式。每臺計算機在世界上都有一個唯一的地址。地址采用以下形式:
           #.#.#.#
          • 數(shù)字范圍從0到 255。IP 地址為 32 位,這意味著這些地址可以容納超過 40 億個地址。較新版本的 IP 地址可以容納更多的計算機!
          • 在現(xiàn)實世界中,服務器為我們做了很多工作。
          • TCP 或傳輸控制協(xié)議用于區(qū)分Web服務。例如,80用于表示 HTTP和443用于表示 HTTPS。這些數(shù)字是 端口號
          • 將信息從一個位置發(fā)送到另一個位置時,將發(fā)送 IP 地址和 TCP 端口號。
          • 這些協(xié)議還用于將大文件分段為稱為數(shù)據(jù)包的多個部分。例如,一張貓的大照片可以分多個數(shù)據(jù)包發(fā)送。當數(shù)據(jù)包丟失時,TCP/IP 可以從源服務器再次請求丟失的數(shù)據(jù)包。
          • TCP將在發(fā)送和接收所有數(shù)據(jù)時進行確認。

          DNS


          • 如果你需要記住訪問網(wǎng)站的地址號碼,那將非常乏味。
          • DNS域名系統(tǒng) 是互聯(lián)網(wǎng)上的服務器集合,用于將網(wǎng)站地址(如 harvard.edu)路由到特定的 IP 地址。
          • DNS 只是保存一個表或數(shù)據(jù)庫,該表或數(shù)據(jù)庫將特定的完全限定域名鏈接到特定的 IP 地址。

          HTTP


          • HTTP超文本傳輸 協(xié)議是開發(fā)人員用來構建強大而有用的東西的應用程序級協(xié)議。
          • 當你看到一個地址時,例如https://www.example.com你實際上是在隱式訪問該地址,并在它的末尾使用 /。
          • 路徑是斜杠之后存在的 路徑。例如https://www.example.com/folder/file.html,訪問example.com并瀏覽folder,然后訪問名為file.html的文件。
          • https此地址中是用于連接到該 Web 地址的協(xié)議。通過協(xié)議,我們的意思是HTTP利用GET或POST請求 從服務器請求信息。例如,你可以啟動谷歌瀏覽器,右鍵單擊,然后單擊inspect。當你打開 developer tools 并訪問Network時,選擇Preserve log,你將看到Request Headers。你將看到提及GET。這在其他瀏覽器中也是可能的,使用的方法略有不同。
          • 通常,在向服務器發(fā)出請求后,你將在Response Headers收到以下內容:
           HTTP/1.1 200 OK 
           Content-Type: text/html
          • 這種檢查這些日志的方法可能比需要的要復雜一些。你可以在 code.cs50.io 分析HTTP協(xié)議的工作。例如,在終端窗口中鍵入以下內容:
           curl -I <https://www.harvard.edu>
          • 請注意,此命令的輸出返回服務器響應的所有標頭值。
          • 同樣,在終端窗口中執(zhí)行以下操作:
           curl -I <http://www.harvard.edu>
          • 請注意,s在https中已被刪除。服務器響應將顯示響應是301而不是100 ,表示網(wǎng)站已永久移動。
          • 此外,在終端窗口中執(zhí)行以下命令:
           curl -I <https://harvard.edu>
          • 請注意,你將看到相同的301響應,向瀏覽器提供提示,說明在哪里可以找到正確的網(wǎng)站。
          • 與301類似,代碼404表示尚未找到指定的 URL。還有許多其他響應代碼,例如:
            200 OK
            301 Moved Permanently
            302 Found
            304 Not Modified
            304 Temporary Redirect
            401 Unauthorized
            403 Forbidden
            404 Not Found
            418 I'm a Teapot
            500 Internal Server Error
            503 Service Unavailable
          • 值得一提的是,500錯誤始終是你作為開發(fā)人員的錯。這對于下周的 pset 尤其重要,也可能對你的最終項目也很重要!
          • 我們可以向服務器發(fā)送更復雜的命令。例如,我們可以嘗試以下操作:
            GET /search?q=cats HTTP/1.1
            Host: www.google.com
          • 請注意,我們不僅使用?標記指定路徑,還指定用戶輸入。 q用于表示 查詢,cats傳遞給它。
          • 如果你手動在網(wǎng)絡瀏覽器地址欄中輸入google.com/search?=cats內容,它將手動向 Google 查詢與cats有關的結果。

          HTML


          • HTML超文本標記語言由標記組成,每個標記可能具有一些描述它的屬性
          • 在終端中,鍵入code hello.html并編寫代碼,如下所示:
            <!DOCTYPE html>
          
            <!-- Demonstrates HTML -->
          
            <html lang="en">
                <head>
                    <title>hello, title</title>
                </head>
                <body>
                    hello, body
                </body>
            </html>
          • 請注意,html標記會打開和關閉此文件。此外,請注意lang屬性,該屬性修改了html標記的行為。另外,請注意,有head標簽和body標簽。縮進不是必需的,但確實建議層次結構。
          • 你可以通過鍵入http-server來提供代碼。此服務現(xiàn)在可在很長的 URL 上使用。如果單擊它,則可以使用自己的代碼訪問該網(wǎng)站。
          • 當你訪問此 URL 時,請注意文件名hello.html出現(xiàn)在此 URL 的末尾。
          • 標簽的層次結構可以表示如下:

          • 瀏覽器將從上到下和從左到右讀取你的 HTML 文件。
          • 由于空格在 HTML 中被有效忽略,因此你需要使用<p>段落標簽來打開和關閉段落。請考慮以下事項:
            <!DOCTYPE html>
          
            <!-- Demonstrates paragraphs -->
          
            <html lang="en">
                <head>
                    <title>paragraphs</title>
                </head>
                <body>
                    <p>
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus convallis scelerisque quam, vel hendrerit lectus viverra eu. Praesent posuere eget lectus ut faucibus. Etiam eu velit laoreet, gravida lorem in, viverra est. Cras ut purus neque. In porttitor non lorem id lobortis. Mauris gravida metus libero, quis maximus dui porta at. Donec lacinia felis consectetur venenatis scelerisque. Nulla eu nisl sollicitudin, varius velit sit amet, vehicula erat. Curabitur sollicitudin felis sit amet orci mattis, a tempus nulla pulvinar. Aliquam erat volutpat.
                    </p>
                    <p>
                        Mauris ut dui in eros semper hendrerit. Morbi vel elit mi. Sed sit amet ex non quam dignissim dignissim et vel arcu. Pellentesque eget elementum orci. Morbi ac cursus ex. Pellentesque quis turpis blandit orci dapibus semper sed non nunc. Nulla et dolor nec lacus finibus volutpat. Sed non lorem diam. Donec feugiat interdum interdum. Vivamus et justo in enim blandit fermentum vel at elit. Phasellus eu ante vitae ligula varius aliquet. Etiam id posuere nibh.
                    </p>
                    <p>
                        Aenean venenatis convallis ante a rhoncus. Nullam in metus vel diam vehicula tincidunt. Donec lacinia metus sem, sit amet egestas elit blandit sit amet. Nunc egestas sem quis nisl mattis semper. Pellentesque ut magna congue lorem eleifend sodales. Donec tortor tortor, aliquam vitae mollis sed, interdum ut lectus. Mauris non purus quis ipsum lacinia tincidunt.
                    </p>
                    <p>
                        Integer at justo lacinia libero blandit aliquam ut ut dui. Quisque tincidunt facilisis venenatis. Nullam dictum odio quis lorem luctus, vel malesuada dolor luctus. Aenean placerat faucibus enim a facilisis. Maecenas eleifend quis massa sed eleifend. Ut ultricies, dui ac vulputate hendrerit, ex metus iaculis diam, vitae fermentum libero dui et ante. Phasellus suscipit, arcu ut consequat sagittis, massa urna accumsan massa, eu aliquet nulla lorem vitae arcu. Pellentesque rutrum felis et metus porta semper. Nam ac consectetur mauris.
                    </p>
                    <p>
                        Suspendisse rutrum vestibulum odio, sed venenatis purus condimentum sed. Morbi ornare tincidunt augue eu auctor. Vivamus sagittis ac lectus at aliquet. Nulla urna mauris, interdum non nibh in, vehicula porta enim. Donec et posuere sapien. Pellentesque ultrices scelerisque ipsum, vel fermentum nibh tincidunt et. Proin gravida porta ipsum nec scelerisque. Vestibulum fringilla erat at turpis laoreet, nec hendrerit nisi scelerisque.
                    </p>
                    <p>
                        Sed quis malesuada mi. Nam id purus quis augue sagittis pharetra. Nulla facilisi. Maecenas vel fringilla ante. Cras tristique, arcu sit amet blandit auctor, urna elit ultricies lacus, a malesuada eros dui id massa. Aliquam sem odio, pretium vel cursus eget, scelerisque at urna. Vestibulum posuere a turpis consectetur consectetur. Cras consequat, risus quis tempor egestas, nulla ipsum ornare erat, nec accumsan nibh lorem nec risus. Integer at iaculis lacus. Integer congue nunc massa, quis molestie felis pellentesque vestibulum. Nulla odio tortor, aliquam nec quam in, ornare aliquet sapien.
                    </p>
                </body>
            </html> 
          • 請注意,段落以<p>標簽開頭,以</p>標簽結尾。
          • HTML 允許表示標題:
             <!DOCTYPE html>
          
            <!-- Demonstrates headings (for chapters, sections, subsections, etc.) -->
          
            <html lang="en">
          
                <head>
                    <title>headings</title>
                </head>
          
                <body>
          
                    <h1>One</h1>
                    <p>
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus convallis scelerisque quam, vel hendrerit lectus viverra eu. Praesent posuere eget lectus ut faucibus. Etiam eu velit laoreet, gravida lorem in, viverra est. Cras ut purus neque. In porttitor non lorem id lobortis. Mauris gravida metus libero, quis maximus dui porta at. Donec lacinia felis consectetur venenatis scelerisque. Nulla eu nisl sollicitudin, varius velit sit amet, vehicula erat. Curabitur sollicitudin felis sit amet orci mattis, a tempus nulla pulvinar. Aliquam erat volutpat.
                    </p>
          
                    <h2>Two</h2>
                    <p>
                        Mauris ut dui in eros semper hendrerit. Morbi vel elit mi. Sed sit amet ex non quam dignissim dignissim et vel arcu. Pellentesque eget elementum orci. Morbi ac cursus ex. Pellentesque quis turpis blandit orci dapibus semper sed non nunc. Nulla et dolor nec lacus finibus volutpat. Sed non lorem diam. Donec feugiat interdum interdum. Vivamus et justo in enim blandit fermentum vel at elit. Phasellus eu ante vitae ligula varius aliquet. Etiam id posuere nibh.
                    </p>
          
                    <h3>Three</h3>
                    <p>
                        Aenean venenatis convallis ante a rhoncus. Nullam in metus vel diam vehicula tincidunt. Donec lacinia metus sem, sit amet egestas elit blandit sit amet. Nunc egestas sem quis nisl mattis semper. Pellentesque ut magna congue lorem eleifend sodales. Donec tortor tortor, aliquam vitae mollis sed, interdum ut lectus. Mauris non purus quis ipsum lacinia tincidunt.
                    </p>
          
                    <h4>Four</h4>
                    <p>
                        Integer at justo lacinia libero blandit aliquam ut ut dui. Quisque tincidunt facilisis venenatis. Nullam dictum odio quis lorem luctus, vel malesuada dolor luctus. Aenean placerat faucibus enim a facilisis. Maecenas eleifend quis massa sed eleifend. Ut ultricies, dui ac vulputate hendrerit, ex metus iaculis diam, vitae fermentum libero dui et ante. Phasellus suscipit, arcu ut consequat sagittis, massa urna accumsan massa, eu aliquet nulla lorem vitae arcu. Pellentesque rutrum felis et metus porta semper. Nam ac consectetur mauris.
                    </p>
          
                    <h5>Five</h5>
                    <p>
                        Suspendisse rutrum vestibulum odio, sed venenatis purus condimentum sed. Morbi ornare tincidunt augue eu auctor. Vivamus sagittis ac lectus at aliquet. Nulla urna mauris, interdum non nibh in, vehicula porta enim. Donec et posuere sapien. Pellentesque ultrices scelerisque ipsum, vel fermentum nibh tincidunt et. Proin gravida porta ipsum nec scelerisque. Vestibulum fringilla erat at turpis laoreet, nec hendrerit nisi scelerisque.
                    </p>
          
                    <h6>Six</h6>
                    <p>
                        Sed quis malesuada mi. Nam id purus quis augue sagittis pharetra. Nulla facilisi. Maecenas vel fringilla ante. Cras tristique, arcu sit amet blandit auctor, urna elit ultricies lacus, a malesuada eros dui id massa. Aliquam sem odio, pretium vel cursus eget, scelerisque at urna. Vestibulum posuere a turpis consectetur consectetur. Cras consequat, risus quis tempor egestas, nulla ipsum ornare erat, nec accumsan nibh lorem nec risus. Integer at iaculis lacus. Integer congue nunc massa, quis molestie felis pellentesque vestibulum. Nulla odio tortor, aliquam nec quam in, ornare aliquet sapien.
                    </p>
          
                </body>
          
            </html>
          • 請注意,<h1>、<h2> 和<h3> 表示不同級別的標題。
          • 我們還可以在 HTML 中創(chuàng)建列表:
             <!DOCTYPE html>
          
            <!-- Demonstrates (ordered) lists -->
          
            <html lang="en">
                <head>
                    <title>list</title>
                </head>
                <body>
                    <ol>
                        <li>foo</li>
                        <li>bar</li>
                        <li>baz</li>
                    </ol>
                </body>
            </html>
          • 請注意,<ol>標記會創(chuàng)建一個包含三個項目的有序列表。
          • 我們還可以在 HTML 中創(chuàng)建一個表:
            <!DOCTYPE html>
          
            <!-- Demonstrates table -->
          
            <html lang="en">
                <head>
                    <title>table</title>
                </head>
                <body>
                    <table>
                        <tr>
                            <td>1</td>
                            <td>2</td>
                            <td>3</td>
                        </tr>
                        <tr>
                            <td>4</td>
                            <td>5</td>
                            <td>6</td>
                        </tr>
                        <tr>
                            <td>7</td>
                            <td>8</td>
                            <td>9</td>
                        </tr>
                        <tr>
                            <td>*</td>
                            <td>0</td>
                            <td>#</td>
                        </tr>
                    </table>
                </body>
            </html>
          • 表還具有用于打開和關閉其中每個元素的標記。
          • 圖像也可以在HTML中使用:
            <!DOCTYPE html>
          
            <!-- Demonstrates image -->
          
            <html lang="en">
                <head>
                    <title>image</title>
                </head>
                <body>
                    <!-- https://www.harvard.edu/ -->
                    <img alt="Harvard University" src="harvard.jpg">
                </body>
            </html>
          • 請注意,src="harvard.jpg"指示圖像文件所在的路徑。
          • 視頻也可以包含在HTML中:
            <!DOCTYPE html>
          
            <!-- Demonstrates video -->
          
            <html lang="en">
                <head>
                    <title>video</title>
                </head>
                <body>
                    <!-- https://www.harvard.edu/ -->
                    <video autoplay loop muted playsinline width="1280">
                        <source src="halloween.mp4" type="video/mp4">
                    </video>
                </body>
            </html>
          • 請注意,width 屬性定義視頻的寬度。
          • 你還可以在各種網(wǎng)頁之間鏈接:
            <!DOCTYPE html>
          
            <!-- Demonstrates link -->
          
            <html lang="en">
                <head>
                    <title>link</title>
                </head>
                <body>
                   Visit <a href="image.html">Harvard</a>.
                </body>
            </html>
          • 請注意,<a>或 標記用于使Harvard稱為可鏈接的文本。
          • 元標記用于保存有關 HTML 文件中數(shù)據(jù)的信息。請考慮以下事項:
            <!DOCTYPE html>
          
            <!-- Demonstrates responsive design -->
          
            <html lang="en">
                <head>
                    <meta name="viewport" content="initial-scale=1, width=device-width">
                    <title>meta</title>
                </head>
                <body>
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus convallis scelerisque quam, vel hendrerit lectus viverra eu. Praesent posuere eget lectus ut faucibus. Etiam eu velit laoreet, gravida lorem in, viverra est. Cras ut purus neque. In porttitor non lorem id lobortis. Mauris gravida metus libero, quis maximus dui porta at. Donec lacinia felis consectetur venenatis scelerisque. Nulla eu nisl sollicitudin, varius velit sit amet, vehicula erat. Curabitur sollicitudin felis sit amet orci mattis, a tempus nulla pulvinar. Aliquam erat volutpat.
                </body>
            </html>
          • 請注意,這組meta屬性使此頁面適合移動設備。
          • 你可以使用許多meta鍵值對:
            <!DOCTYPE html>
          
            <!-- Demonstrates Open Graph tags -->
          
            <html lang="en">
                <head>
                    <meta property="og:title" content="CS50">
                    <meta property="og:description" content="Introduction to the intellectual enterprises of computer science and the art of programming.">
                    <meta property="og:image" content="cat.jpg">
                    <title>meta</title>
                </head>
                <body>
                    ...
                </body>
            </html> 
          • 請注意,這些鍵值對與網(wǎng)頁的title 和description 相關。
          • 你還可以創(chuàng)建讓人聯(lián)想到 Google 搜索的表單:
            <!DOCTYPE html>
          
            <!-- Demonstrates form -->
          
            <html lang="en">
                <head>
                    <title>search</title>
                </head>
                <body>
                    <form action="https://www.google.com/search" method="get">
                        <input name="q" type="search">
                        <input type="submit" value="Google Search">
                    </form>
                </body>
            </html>
          • 請注意,form標記會打開并提供它將采用action的屬性。包含input字段,并將名稱q和類型作為search傳遞。
          • 我們可以使此搜索更好,如下所示:
             <!DOCTYPE html>
          
            <!-- Demonstrates additional form attributes -->
          
            <html lang="en">
                <head>
                    <title>search</title>
                </head>
                <body>
                    <form action="https://www.google.com/search" method="get">
                        <input autocomplete="off" autofocus name="q" placeholder="Query" type="search">
                        <button>Google Search</button>
                    </form>
                </body>
            </html>
          • 請注意,autocomplete已轉到off。 autofocus已啟用。
          • 我們只看到了你可以添加到站點的許多 HTML 元素中的一小部分。如果你有我們尚未看到的要添加到你的網(wǎng)站的想法(按鈕,音頻文件等),請嘗試在谷歌上搜索“HTML 中的X”以找到正確的語法!

          CSS


          • CSS,或 級聯(lián)樣式表,是一種標記語言,允許你微調 HTML 文件的美感。
          • 在終端中,鍵入code home.html并編寫代碼,如下所示:
             <!DOCTYPE html>
          
            <!-- Demonstrates inline CSS with P tags -->
          
            <html lang="en">
                <head>
                    <title>css</title>
                </head>
                <body>
                    <p style="font-size: large; text-align: center;">
                        John Harvard
                    </p>
                    <p style="font-size: medium; text-align: center;">
                        Welcome to my home page!
                    </p>
                    <p style="font-size: small; text-align: center;">
                        Copyright ? John Harvard
                    </p>
                </body>
            </html>
          • 請注意,為標記提供了一些style屬性<p>。font-size設置為large 、medium 或。small 。然后text-align設置為居中。
          • 雖然正確,但上述內容設計得并不好。我們可以通過修改代碼來消除冗余,如下所示:
             <!DOCTYPE html>
          
            <!-- Removes outer DIV -->
          
            <html lang="en">
                <head>
                    <title>css</title>
                </head>
                <body style="text-align: center">
                    <div style="font-size: large">
                        John Harvard
                    </div>
                    <div style="font-size: medium">
                        Welcome to my home page!
                    </div>
                    <div style="font-size: small">
                        Copyright ? John Harvard
                    </div>
                </body>
            </html>
          • 請注意,<div>標記用于將此 HTML 文件劃分為特定區(qū)域。 text-align: center在 HTML 文件的整個正文上調用。
          • 事實證明,HTML 中包含更新的語義文本。我們可以按如下方式修改我們的代碼:
            <!DOCTYPE html>
          
            <!-- Uses semantic tags instead of DIVs -->
          
            <html lang="en">
                <head>
                    <title>css</title>
                </head>
                <body style="text-align: center">
                    <header style="font-size: large">
                        John Harvard
                    </header>
                    <main style="font-size: medium">
                        Welcome to my home page!
                    </main>
                    <footer style="font-size: small">
                        Copyright ? John Harvard
                    </footer>
                </body>
            </html>
          • 請注意,header和footer分配了不同的樣式。
          • 這種將樣式和信息全部放在同一位置的做法不是好的做法。我們可以將樣式元素移動到文件的頂部,如下所示:
            <!-- Demonstrates class selectors -->
          
            <html lang="en">
                <head>
                    <style>
          
                        .centered
                        {
                            text-align: center;
                        }
          
                        .large
                        {
                            font-size: large;
                        }
          
                        .medium
                        {
                            font-size: medium;
                        }
          
                        .small
                        {
                            font-size: small;
                        }
          
                    </style>
                    <title>css</title>
                </head>
                <body class="centered">
                    <header class="large">
                        John Harvard
                    </header>
                    <main class="medium">
                        Welcome to my home page!
                    </main>
                    <footer class="small">
                        Copyright ? John Harvard
                    </footer>
                </body>
            </html>
          • 請注意,所有樣式標記都放置在style標記包裝器head中。另請注意,我們已經(jīng)為元素分配了類,稱為large、medium、small和centered,并且我們通過在名稱前放置一個點來選擇這些 ,如.centered。
          • 事實證明,我們可以將所有樣式代碼移動到稱為CSS文件的特殊文件中。我們可以創(chuàng)建一個名為style.css并將我們的類粘貼到其中的文件:
            .centered
            {
                text-align: center;
            }
          
            .large
            {
                font-size: large;
            }
          
            .medium
            {
                font-size: medium;
            }
          
            .small
            {
                font-size: small;
            }
          • 請注意,這是出現(xiàn)在我們的 HTML 文件中的逐字記錄。
          • 然后我們可以告訴瀏覽器在哪里可以找到這個 HTML 文件的 CSS:
            <!DOCTYPE html>
          
            <!-- Demonstrates external stylesheets -->
          
            <html lang="en">
                <head>
                    <link href="style.css" rel="stylesheet">
                    <title>css</title>
                </head>
                <body class="centered">
                    <header class="large">
                        John Harvard
                    </header>
                    <main class="medium">
                        Welcome to my home page!
                    </main>
                    <footer class="small">
                        Copyright ? John Harvard
                    </footer>
                </body>
            </html>
          • 請注意,style.css作為樣式表鏈接到此 HTML 文件,告訴瀏覽器在哪里可以找到我們創(chuàng)建的樣式。

          Frameworks


          • 與我們可以在 Python 中利用的第三方庫類似,有一些稱為框架的第三方庫,我們可以將其用于我們的 HTML 文件。
          • Bootstrap 是我們可以用來美化 HTML 和輕松完善設計元素的框架之一,從而使我們的頁面更具可讀性。
          • 可以通過在 html 文件head中添加link標簽來引導程序:
             <head>
                <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
                <title>favorites</title>
            </head>
          • 你可以在引導文檔中了解有關此內容的更多信息。

          JavaScript


          • JavaScript是另一種允許網(wǎng)頁內交互的編程語言。
          • JavaScript 支持條件:
             if (x < y)
            {
          
            }
            else
            {
          
            }
          • 還支持變量:
           let counter=0;
          • 你還可以遞增:
           counter++
          • 循環(huán)與你之前在 C 中看到的非常相似:
            for (let i=0; i < 3; i++)
            {
          
            }
          • JavaScript 允許你動態(tài)讀取和修改加載到內存中的 html 文檔,以便用戶無需重新加載即可看到更改。
          • 請考慮以下 HTML:
            <!DOCTYPE html>
          
            <!-- Demonstrates programmatic changes to style -->
          
            <html lang="en">
                <head>
                    <title>background</title>
                </head>
                <body>
                    <button id="red">R</button>
                    <button id="green">G</button>
                    <button id="blue">B</button>
                    <script>
          
                        let body=document.querySelector('body');
                        document.querySelector('#red').addEventListener('click', function() {
                            body.style.backgroundColor='red';
                        });
                        document.querySelector('#green').addEventListener('click', function() {
                            body.style.backgroundColor='green';
                        });
                        document.querySelector('#blue').addEventListener('click', function() {
                            body.style.backgroundColor='blue';
                        });
          
                    </script>
                </body>
            </html>
          • 請注意,JavaScript 偵聽單擊特定按鈕的時間。單擊此類后,頁面上的某些樣式屬性將更改。 body定義為頁面的正文。然后,事件偵聽器等待單擊其中一個按鈕。然后,body.style.backgroundColor更改了。
          • 同樣,請考慮以下事項:
            <!DOCTYPE html>
          
            <html lang="en">
                <head>
                    <script>
          
                        // Toggles visibility of greeting
                        function blink()
                        {
                            let body=document.querySelector('body');
                            if (body.style.visibility=='hidden')
                            {
                                body.style.visibility='visible';
                            }
                            else
                            {
                                body.style.visibility='hidden';
                            }
                        }
          
                        // Blink every 500ms
                        window.setInterval(blink, 500);
          
                    </script>
                    <title>blink</title>
                </head>
                <body>
                    hello, world
                </body>
            </html>
          • 本示例按設定的間隔閃爍文本。請注意,window.setInterval包含兩個參數(shù):1) 要調用的函數(shù)和 2) 函數(shù)調用之間的等待期(以毫秒為單位)。
          • 請考慮以下事項:
            <!DOCTYPE html>
          
            <html lang="en">
          
                <head>
                    <title>autocomplete</title>
                </head>
          
                <body>
          
                    <input autocomplete="off" autofocus placeholder="Query" type="text">
          
                    <ul></ul>
          
                    <script src="large.js"></script>
                    <script>
          
                        let input=document.querySelector('input');
                        input.addEventListener('keyup', function(event) {
                            let html='';
                            if (input.value) {
                                for (word of WORDS) {
                                    if (word.startsWith(input.value)) {
                                        html +=`<li>${word}</li>`;
                                    }
                                }
                            }
                            document.querySelector('ul').innerHTML=html;
                        });
          
                    </script>
          
                </body>
            </html>
          • 這是自動完成的 JavaScript 實現(xiàn)。
          • 有趣的是,我們還可以使用JavaScript進行地理定位:
             <!DOCTYPE html>
          
            <html lang="en">
                <head>
                    <title>geolocation</title>
                </head>
                <body>
                    <script>
          
                        navigator.geolocation.getCurrentPosition(function(position) {
                            document.write(position.coords.latitude + ", " + position.coords.longitude);
                        });
          
                    </script>
                </body>
            </html>
          • 請注意,navigator.geolocation用于getCurrentPosition。如果你的計算機或瀏覽器不允許位置跟蹤,這將不起作用。
          • JavaScript 的功能很多,可以在 JavaScript 文檔中找到。

          Summing Up


          在本課中,你學習了如何創(chuàng)建自己的 HTML 文件、設置它們的樣式、利用第三方框架以及使用 JavaScript。具體來說,我們討論了...

          • TCP/IP
          • 域名解析
          • .HTML
          • .CSS
          • 框架
          • JavaScript

          下次見!


          原文出處:https://cs50.harvard.edu/college/2022/fall/notes/8/

          否用CSS編寫一個模擬打字輸出“對”的過程?

          有同學留言,讓我用CSS實現(xiàn)這個效果。大家看看,是不是很有趣?七夕快到了,我想了想,寫了一個demo。首先看一下效果,屏幕上會出現(xiàn)打字的動畫,好像想了一下又刪掉了“我愛你”,只留下了“對不起”,有點內涵。再看一次,打字的動畫并不難。但如果只用CSS來實現(xiàn),就有一定難度了。我們只看一下只用CSS實現(xiàn)這個效果的代碼。這個效果除了打字,還需要文字的回刪和光標的閃爍。只用CSS來做其實是有點難度的,代碼不多,但需要扎實的基本功和思路。

          先看一下現(xiàn)在的布局,這幾個字出現(xiàn)了。這里用了一個叫做monospace的字體。

          為什么要用這個字體呢?因為這套字體是等寬字體,每個字母和數(shù)字的寬度相等。每個漢字的寬度是字母的兩倍。這樣計算會更方便。由于我將body轉換為彈性容器,所以r1的大小已經(jīng)接近于里面文字的大小了。我們可以看到,r1占滿了整個行,如果沒有轉換為彈性容器,它會占一行。

          我們需要將其位置設置為原來的位置。現(xiàn)在需要用到偽元素了。先設置一下偽元素的背景顏色。由于偽元素是絕對定位,四個方向的偏移量為0,所以應該會占滿整個h1。這樣就覆蓋住了所有的文字,然后做一個動畫,讓偽元素的左位移量值發(fā)生變化,這樣文字就一個一個出現(xiàn)了。

          我們來寫一個動畫。動畫很簡單,讓最終狀態(tài)的左位移量值為100%即可。動畫開始時,左位移量值是從0開始的,和這里的初始值一樣,因此可以省略from,直接寫to。動畫需要3秒鐘完成,文字就可以顯示出來了。現(xiàn)在的效果是很平滑的。我希望文字像打字一樣一個一個出現(xiàn),所以讓它按七個字符的步驟出現(xiàn),然后停在最后一個狀態(tài)。

          現(xiàn)在文字就這樣一個一個地跳出來了。

          ·我們把紅色的背景換成黑色,同時刪除了前面的黑色邊框。現(xiàn)在看起來有點像打字的效果,但正常打字還應該有光標。這里我們用after偽元素來實現(xiàn),寬度設為2個像素即可。背景顏色設為黑色,出現(xiàn)了黑色的光標,但它應該隨著文字移動。同樣地,將前面的動畫與之綁定。現(xiàn)在光標隨著文字出現(xiàn)了,但應該有閃爍的效果。因此,我們需要編寫一個動畫,使光標閃爍,并在開始和結束時保持透明,并在中間過渡到白色。將動畫的播放時間設置為500毫秒,并循環(huán)播放。現(xiàn)在,打字的效果就出來了。不過,先讓光標出現(xiàn),再讓文字出現(xiàn)可能更真實。因此,我們將前兩個動畫的播放時間延遲了500毫秒。

          好了!現(xiàn)在打字的效果基本完成了。但是,難點是如何在打完這句話后刪除“我愛你”這幾個字。

          這并不難,但需要一些技巧。我們需要編寫另一個動畫來控制這兩個偽元素的左移值,起始位置應為100%,即最右端。關鍵是to應該是多少,應該刪除到do號處,也就是后面這段文字全部刪除的位置,即對不起前面三個字的寬度。

          to的值應該是多少?我們介紹一個很少使用的單位ch,一個ch等于一個字母,在使用等寬字體的情況下,它等于一個字母的寬度。兩個ch正好等于一個漢字的寬度,也就是兩個ch。左移值剛才已經(jīng)分析過了,是對不起三個字的寬度,也就是6ch。將其綁定在偽元素上,讓它在兩秒鐘內完成,并發(fā)布執(zhí)行。

          總共要刪除四個字符,因此需要分四步執(zhí)行,并在前面的動畫完成后再執(zhí)行,因此需要將動畫的延遲時間設置為4.5秒,以保持動畫的最終狀態(tài)。兩個偽元素都需要綁定這個動畫,現(xiàn)在看一下最終的效果。沒問題,已經(jīng)刪除了。

          視頻就到這里,感謝觀看。

          次看電影, 看到屏幕上一個個的文字蹦出來, 感覺像是有人在打字一樣, 覺得挺有意思, 于是這里也用js實現(xiàn)了一個。


          效果預覽


          最簡單的打字效果

          只要五行代碼, 這里直接貼出來:

          const dom=document.querySelector('.content')
          const data='最簡單的打字效果代碼'.split('')
           let index=0
           function writing(index) {
           if (index < data.length) {
           dom.innerHTML +=data[index]
           setTimeout(writing.bind(this), 200, ++index)
           }
           }


          是不是超級簡單, 現(xiàn)在只要執(zhí)行這個函數(shù), 你就能看到這樣的效果了:

          實現(xiàn)原理:

          通過setTimeout設置一個時間的間隔, 每隔一定時間向dom中插入對應的數(shù)據(jù), 并將index加1, 然后重新調用這個寫函數(shù)。

          我自己是一名從事了多年開發(fā)的web前端老程序員,目前辭職在做自己的web前端私人定制課程,今年年初我花了一個月整理了一份最適合2019年學習的web前端學習干貨,各種框架都有整理,送給每一位前端小伙伴,想要獲取的可以關注我的頭條號并在后臺私信我:前端,即可免費獲取。

          在字的后面加上模擬的閃爍光標

          思路:

          通過一個偽類after將光標定在dom的最后面, 并給一個顯示隱藏的循環(huán)動畫模擬光標的閃爍

          通過css3的animation我們就實現(xiàn)了一個閃爍的光標效果。

          實現(xiàn):

          我們可以把上面的代碼放在一個class中, 然后我們執(zhí)行writing時將這個class加到對應的dom中即可。

          實現(xiàn)輸入漢字加拼音

          這里依賴一個插件pinyin, 大家可以通過npm安裝

          npm install pinyin

          使用也很簡單,我們只要把文本傳入這個插件的方法中, 返回的就是每個漢字的拼音的數(shù)組。

          import Pinyin from 'pinyin'
          let data='漢字'
          let pinyinData=Pinyin(data) //['han', 'zi']

          然后我們通過模板字符串注入到對應的文字后面即可:


          this.content.innerHTML +=`${arr[index]}<sup>(${pinyinData[index]})</sup>`

          這樣就實現(xiàn)了加拼音的簡單效果了。

          加動畫

          加動畫的代碼也很簡單, 關鍵是思路。

          我開始的想法是將每個文字用span標簽包裹起來, 給每個span加動畫即可。后來發(fā)現(xiàn)這樣行不通, 因為每次dom中的innerHTML其實是重新渲染的, 那樣的話, 之前的span也會一直有動畫, 這不是我們想要的效果。

          解決方案:

          給每個span加個class實現(xiàn)動畫, 但在下個span渲染時清除之前span的class, 這樣就實現(xiàn)了只有當前的span有動畫了.

          我這里直接選擇了正則匹配粗暴的將class去掉。大家也可以尋找一種更好的方式解決。

          代碼如下:

          this.content.innerHTML=this.content.innerHTML.replace(/span-animation/g, '') + `<span class="span-animation">${arr[index]}</span>`
          

          實現(xiàn)效果:


          源自:https://juejin.im/post/5ddf55835188257313541581


          主站蜘蛛池模板: 国产一区玩具在线观看| 国产萌白酱在线一区二区| 国产精品一区电影| 国产av成人一区二区三区| 在线成人一区二区| 午夜天堂一区人妻| 手机看片一区二区| 麻豆视传媒一区二区三区| 亚洲国产欧美一区二区三区| 亚洲国产精品一区第二页 | 亚洲一区免费在线观看| 精品亚洲一区二区三区在线观看| 男人的天堂av亚洲一区2区| 亚洲AV成人一区二区三区在线看| 无码人妻久久一区二区三区免费| 综合久久久久久中文字幕亚洲国产国产综合一区首| 精品乱子伦一区二区三区| 97精品一区二区视频在线观看| 无码精品视频一区二区三区| 狠狠色成人一区二区三区| 中文字幕精品一区| 波多野结衣一区二区三区aV高清| 免费人人潮人人爽一区二区| 女人和拘做受全程看视频日本综合a一区二区视频 | 无码人妻精品一区二区| 一区二区精品久久| 国产aⅴ精品一区二区三区久久| 国产成人欧美一区二区三区| 成人中文字幕一区二区三区| 亚洲va乱码一区二区三区| 麻豆国产一区二区在线观看| 国产短视频精品一区二区三区| 高清一区二区三区免费视频| 亚洲一区二区三区首页| 91video国产一区| 亚洲精品精华液一区二区| 韩国资源视频一区二区三区| 日本一区二区三区日本免费| 精品视频在线观看一区二区 | 国产成人无码一区二区在线播放| 无码AV中文一区二区三区|