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
HTML是用來開發(fā)網頁的,它是開發(fā)網頁的語言
全稱HyperText Mark-up Language,超文本標記語言
標記就是標簽
<標簽名稱></標簽名稱> 比如 <html></html> <h1></h1>等,標簽大多數都是成對出現(xiàn)的。
超文本 兩層含義:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>網頁標題</title>
</head>
<body>
網頁顯示內容
</body>
</html>
第一行<!DOCTYPE html>是文檔聲明
用來指定頁面所使用的html的版本, 這里聲明的是一個html5的文檔
<html>...</html>標簽是開發(fā)人員在告訴瀏覽器
整個網頁是從<html>這里開始的,到</html>結束
也就是html文檔的開始和結束標簽
<head>...</head>標簽用于定義文檔的頭部
是負責對網頁進行設置標題、編碼格式以及引入css和js文件的
<body>...</body>標簽是編寫網頁上顯示的內容
網頁文件的后綴是.html, 一個html文件就是一個網頁,html文件用編輯器打開顯示的是文本,可以用文本的方式編輯它,如果用瀏覽器打開,瀏覽器會按照標簽描述內容將文件渲染成網頁
VS Code全拼是 Visual Studio Code 是由微軟研發(fā)的一款免費、開源的跨平臺代碼編輯器
目前是前端(網頁)開發(fā)使用最多的一款軟件開發(fā)工具
下載網址: https://code.visualstudio.com/Download
選擇對應的安裝包進行下載:
安裝一切默認
1 標簽不區(qū)分大小寫,但是推薦使用小寫
2 根據標簽的書寫形式,標簽分為雙標簽(閉合標簽)和單標簽(空標簽) 2.1 雙標簽是指由開始標簽和結束標簽組成的一對標簽,這種標簽允許嵌套和承載內容,比如: div標簽 2.2 單標簽是一個標簽組成,沒有標簽內容, 比如: img標簽
標簽的使用形式
列表標簽
網頁效果
表格標簽
<table>標簽:表示一個表格
<tr>標簽:表示表格中的一行
<td>標簽:表示表格中的列
<th>標簽:表示表格中的表頭
屬性設置
border: 1px solid black:設置邊框和顏色
border-collapse: collapse:設置邊框合并
網頁效果
表單標簽
表單用于搜集不同類型的用戶輸入的數據,然后可以把用戶數據提交到web服務器
<form>標簽 表示表單標簽,定義整體的表單區(qū)域
一個表單中有很多信息組成,比如 姓名,愛好,地址等,這些內容有很多其他標簽來承載
這些標簽稱為表單元素標簽
網頁效果
表單用于搜集不同類型的用戶輸入的數據,然后可以把用戶數據提交到web服務器
兩種方式的區(qū)別:
表單元素屬性設置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<!--
姓名 type="text" 定義單行文本輸入框
密碼 type="password" 定義密碼輸入框
性別 type="radio" 定義單選框
愛好 type="checkbox" 定義復選框
照片 type="file" 定義上傳文件
個人描述 <textarea></textarea> 定義多行文本輸入框
地址 <select></select> 定義下拉列表
提交 type="submit" 定義提交按鈕
重置 type="reset" 定義重置按鈕
按鈕 type="button" 定義一個普通按鈕
-->
<form action="http://192.168.1.106:8080" method="POST">
<label>姓名:</label>
<input type="text" name="username" >
<br>
<label>密碼:</label>
<input type="password" name="password">
<br>
<label>性別:</label>
<input type="radio" name="sex" value="1">男
<input type="radio" name="sex" value="0">女
<br>
<label>愛好:</label>
<input type="checkbox" name="like" value="睡覺">睡覺
<input type="checkbox" name="like" value="吃飯">吃飯
<input type="checkbox" name="like" value="打豆豆">打豆豆
<br>
<label>照片:</label>
<input type="file" name="pic">
<br>
<label>個人描述:</label>
<textarea name="desc"></textarea>
<br>
<label>地址:</label>
<select name="addr">
<option value="1">北京</option>
<option value="2">上海</option>
<option value="3">廣州</option>
<option value="4">深圳</option>
</select>
<br>
<input type="submit" value="提交">
<input type="reset" value="重置">
<input type="button" value="按鈕">
</form>
</body>
</html>
點擊提交:
可以看到服務器收到了請求報文。
源:https://www.sitepoint.com/
現(xiàn)代應用相比普通的網頁有不同的要求。但是瀏覽器是一個有著一套(大部分)固定可用的技術的平臺,JavaScript依然是web應用的核心語言;任何需要在瀏覽器上跑的應用都需要使用這種語言。
我們都知道Javascript并不是最好的語言,特別是在復雜的應用中,它可能不太能勝任。為了避免這種情況,一些新的語言或現(xiàn)有語言的編譯器被創(chuàng)造出來,你不用寫一行Javascript或者考慮這種語言的局限,就能生產在瀏覽器能運行的代碼。
這篇文章包括了十種有趣的語言能夠編譯為Javascript,在瀏覽器或者Node.js中被執(zhí)行。
--ADVERTISEMENT--
Dart
Dart是一個典型的面向對象的語言,任何東西都是一個對象并且任何對象都是一個類的實例(對象也可以表現(xiàn)為函數)。它的特殊性用于打造面向瀏覽器,服務器和移動設備的應用。它由谷歌來維護,是用于驅動下一代的AdWords UI。AdWords UI是谷歌盈利的重要產品,這也證明了它在體量上的強大。
這種語言可以編譯為JavaScript用于瀏覽器,或者直接通過Dart VM解釋,這樣也可以允許你構建服務端應用。移動應用可以通過Flutter SDK創(chuàng)建。
復雜的應用還需要一系列特別為任務所設計的成熟的庫和語言特性,Dart這些都有。舉例來說一個流行的庫是AngularDart,一個Dart版本的Angular。
它允許你寫非侵入式的類型安全的代碼,但是這不是必須的,因為他們可以自動檢測類型。它可以允許你快速構建原型而不用過于思考細節(jié),一旦你需要的時候,你可以加入類型讓它更健壯。
至于在VM中的并發(fā)編程,相比與共享內存線程(Dart是單線程的),Dart使用所謂的_Isolates_,有它自己的堆內存,而交流是通過傳遞信息。在瀏覽器上,情況就有點不一樣了:相比與創(chuàng)建一個新的_isolates_,你創(chuàng)建一個新的_Workers_。
// Example extracted from dartlang.org
import 'dart:async';
import 'dart:math' show Random;
main() async {
print('Compute π using the Monte Carlo method.');
await for (var estimate in computePi()) {
print('π ? $estimate');
}
}
/// Generates a stream of increasingly accurate estimates of π.
Stream<double> computePi({int batch: 1000000}) async* {
var total = 0;
var count = 0;
while (true) {
var points = generateRandom().take(batch);
var inside = points.where((p) => p.isInsideUnitCircle);
total += batch;
count += inside.length;
var ratio = count / total;
// Area of a circle is A = π?r2, therefore π = A/r2.
// So, when given random points with x ∈ <0,1>,
// y ∈ <0,1>, the ratio of those inside a unit circle
// should approach π / 4\. Therefore, the value of π
// should be:
yield ratio * 4;
}
}
Iterable<Point> generateRandom([int seed]) sync* {
final random = new Random(seed);
while (true) {
yield new Point(random.nextDouble(), random.nextDouble());
}
}
class Point {
final double x, y;
const Point(this.x, this.y);
bool get isInsideUnitCircle => x * x + y * y <= 1;
}
Get started with Dart https://www.dartlang.org/guides/get-started
TypeScript
TypeScript 是Javascript的超集;一個有效的Javascript項目也是一個有效的TypeScript項目只是添加了靜態(tài)類型。編譯器也可以作為ES2015+到當前實現(xiàn)的轉譯器,這樣你總是能得到最新的特性。
不同于其他語言,TypeScript保持了Javascript完整的精神,只是此外添加了增加代碼可靠性的功能。這些功能就是類型注釋和其他類型相關的功能,得益于專業(yè)工具像是靜態(tài)分析器和其他工具在重構過程的加入,這些功能使寫Javascript更加有趣。并且,類型的加入改善了你的應用不同組件之間的接口。
類型診斷是支持性的,你不必從一開始就寫所有的類型。你可以先快速的寫代碼,然后再加入類型來讓代碼更穩(wěn)定。
TypeScript同樣也支持高級類型,像是交叉類型,聯(lián)合類型,類型別名,可辨識聯(lián)合和類型保護。你可以在TypeScript Documentation網站的Advanced Types頁面查看。
如果你使用React的話,通過添加React類型,JSX也是支持的。
class Person {
private name: string;
private age: number;
private salary: number;
constructor(name: string, age: number, salary: number) {
this.name = name;
this.age = age;
this.salary = salary;
}
toString(): string {
return `${this.name} (${this.age}) (${this.salary})`;
}
}
——
Elm
Elm是一個可以編譯成JS,HTML和JS的純函數式編程語言。你可以只通過Elm創(chuàng)建一個完整的網站,這使得它是一個對像React這樣的Javascript框架的一個很好的代替。通過它創(chuàng)建的應用自動使用了虛擬DOM庫,使得它很快。一個大的加分項是內建的結構讓你忘記數據流而是關注于數據聲明和邏輯。
在Elm中,所有函數都是純粹的,這意味著他們總是對一個給予的輸入返回一個相同的輸出。T他們不能做其他任何事情,除非你指定。舉例來說,獲取一個遠程的API你會創(chuàng)建一個_command_函數來通訊外部世界,和一個 subscriptions 函數監(jiān)聽回復。另一個純粹的點是,值是不可變的,當你需要什么的時候,你創(chuàng)建一個新值而不是改變它。
ELm的接受可以是平緩的;可以使用_ports_來和Javascript或其他庫溝通。雖然Elm還沒有到達版本1,它已經用于復雜大型的應用了,這使得它對復雜應用是一個可行的解決方案。
ELm其中一個吸引人的功能是初學者友好的編譯器,它生成幫助你修復你的代碼的信息,而不是產生難以閱讀的信息。如果你正在學習這門語言,編譯器本身就是一個大的幫助。
module Main exposing (..) import Html exposing (..) -- MAIN main : Program Never Model Msg main = Html.program { init = init , update = update , view = view , subscriptions = subscriptions } -- INIT type alias Model = String init : ( Model, Cmd Msg ) init = ( "Hello World!", Cmd.none ) -- UPDATE type Msg = DoNothing update : Msg -> Model -> ( Model, Cmd Msg ) update msg model = case msg of DoNothing -> ( model, Cmd.none ) -- VIEW view : Model -> Html Msg view model = div [] [text model] -- SUBSCRIPTIONS subscriptions : Model -> Sub Msg subscriptions model = Sub.none
Get Started with Elm:https://www.sitepoint.com/functional-reactive-programming-elm-introduction/
PureScript
PureScript 是一個純函數強類型的編程語言,由Phil Freeman創(chuàng)造。它旨在與現(xiàn)有的JavaScript庫進行很好的兼容,與Haskell精神上類似,但是核心保留了Javascript。
PureScript一個重要的點是它的極簡主義。它沒有包含任何在其他語言認為很重要的功能庫。比如,相比于在編譯器中包含generators和promises,你可以自己使用指定的庫來完成這個任務。你可以選擇你想要的功能的實現(xiàn),當使用PureScript的時候需要高效和個性化的經驗,能使生成的代碼盡可能的小。
這個編譯器另一個重要的功能是構建出清晰可讀的代碼,能夠兼容Javascript包括庫和工具。
和其他語言一樣,PureScript有它自己的構建工具稱為Pulp,可以和Gulp做對比,只是用這個語言寫的。
至于類型系統(tǒng),不同于另一個ML類的語言Elm,PureScript支持更先進的類型特性比如高級類類型和類型類,這些是從Haskell來的特性,允許創(chuàng)建復雜的抽象。
module Main where import Prelude import Data.Foldable (fold) import TryPureScript main = render $ fold [ h1 (text "Try PureScript!") , p (text "Try out the examples below, or create your own!") , h2 (text "Examples") , list (map fromExample examples) ] where fromExample { title, gist } = link ("?gist=" <> gist) (text title) examples = [ { title: "Algebraic Data Types" , gist: "37c3c97f47a43f20c548" } , { title: "Loops" , gist: "cfdabdcd085d4ac3dc46" } , { title: "Operators" , gist: "3044550f29a7c5d3d0d0" } ]
Get Started with PureScripthttps://github.com/purescript/documentation/blob/master/guides/Getting-Started.md
CoffeeScript
CoffeeScript是一個旨在暴露JavaScript的精華并提供一個干凈的語法并在合適地方保留語義的語言。雖然近年來這個語言的熱度在下降,它正在改變方向并且現(xiàn)在有一個新的大版本支持ES2015+特性。
你用CoffeeScript寫的代碼直接轉化為可讀的Javascript代碼并且兼容現(xiàn)有的庫。從2版本開始,編譯器會產生兼容最新版本的ECMAScript的代碼,比如,每次你使用class,你就在Javascript中得到class。并且,如果你使用React,好消息是,JSX兼容CoffeeScript。
這個編譯器有一個十分有特色的功能是有能力處理用literate style寫的代碼。literate style相比于強調代碼而把注釋作為添加這種方式,而是你需要在一開始就寫注釋,代碼只是偶爾出現(xiàn)。這種寫代碼的方式由Donald Knuth推薦,使得一個代碼文件非常像一個技術文檔。
相比于其他語言,CoffeeScript代碼可以在瀏覽器中用一個庫直接執(zhí)行。所以如果你想要寫一個快速測試,你可以寫你的代碼在一個text/coffeescriptscript標簽中,并且引入編譯器,這樣就可以把你的代碼輕易的轉化為JavaScript了。
# Assignment: number = 42 opposite = true # Conditions: number = -42 if opposite # Functions: square = (x) -> x * x # Arrays: list = [1, 2, 3, 4, 5] # Objects: math = root: Math.sqrt square: square cube: (x) -> x * square x # Splats: race = (winner, runners...) -> print winner, runners # Existence: alert "I knew it!" if elvis? # Array comprehensions: cubes = (math.cube num for num in list)
Get Started with CoffeeScript http://coffeescript.org/v2/#coffeescript-2
ClojureScript
ClojureScript是一個轉化Clojure編程語言為JavaScript的編譯器。Clojure是一個多用途的函數式原因伴隨著動態(tài)類型和不可變數據結構的支持。
這是這個列表中唯一一個屬于Lisp家族的語言,自然有著它們共同的特性。舉例來說,代碼可以作為數據,支持宏系統(tǒng),使得元編程成為可能。Unlike other Lisps, Clojure has support for immutable data structures, making the management of side-effects easier.不同于其他類Lisp,Clojure支持不可變數據結構,使得函數副作用的管理更容易。
這個語法對初學者看起嚇人,因為圓括號的使用。但這樣使用是經過深思熟慮的,并且在長遠看來你一定會感謝這種語法的。語法的極簡和抽象能力使得Lisp成為一個解決高抽象問題的強力工具。
雖然Clojure主要是一個函數式語言,但是不像PureScript或者Elm那樣純粹。函數副作用還是會發(fā)生,但是其他函數式特性也會存在。
ClojureScript使用Google Closure做代碼優(yōu)化并且也兼容現(xiàn)有的JavaScript庫。
; Extracted from https://github.com/clojure/clojurescript/blob/master/samples/dom/src/dom/test.cljs (ns dom.test (:require [clojure.browser.event :as event] [clojure.browser.dom :as dom])) (defn log [& args] (.log js/console (apply pr-str args))) (defn log-obj [obj] (.log js/console obj)) (defn log-listener-count [] (log "listener count: " (event/total-listener-count))) (def source (dom/get-element "source")) (def destination (dom/get-element "destination")) (dom/append source (dom/element "Testing me ") (dom/element "out!")) (def success-count (atom 0)) (log-listener-count) (event/listen source :click (fn [e] (let [i (swap! success-count inc) e (dom/element :li {:id "testing" :class "test me out please"} "It worked!")] (log-obj e) (log i) (dom/append destination e)))) (log-obj (dom/element "Text node")) (log-obj (dom/element :li)) (log-obj (dom/element :li {:class "foo"})) (log-obj (dom/element :li {:class "bar"} "text node")) (log-obj (dom/element [:ul [:li :li :li]])) (log-obj (dom/element :ul [:li :li :li])) (log-obj (dom/element :li {} [:ul {} [:li :li :li]])) (log-obj (dom/element [:li {:class "baz"} [:li {:class "quux"}]])) (log-obj source) (log-listener-count)
Get Started with ClojureScript https://clojurescript.org/guides/quick-start
Scala.js
Scala.js是一個將Scala編程語言轉化為JavaScript的編譯器。Scala是一個旨在融合面向對象和函數式編程兩種思想到一種語言,為了打造容易接受的強力的工具
作為一個強類型語言,你會從它部分類型推斷這種靈活的類型系統(tǒng)中受益。大部分的值會被推斷,但函數參數仍然需要明確的類型注釋。
雖然許多通常的面向對象模式都支持(比如任何值都是一個對象并且操作是一個方法調用),但你也有函數式特性比如一等函數和不可變數據結構。
Scala.js其中一個特殊的優(yōu)勢是,你可以毫不費力的從你熟悉的面向對象開始向更函數式的轉移,以你自己的需要和步調。同樣的,現(xiàn)存的JavaScript代碼和庫和你的Scala代碼兼容。
Scala的初學者會發(fā)現(xiàn)這個語言和JavaScript并沒有多大不同,對比下面兩個意思一樣的代碼:
// JavaScript
var xhr = new XMLHttpRequest();
xhr.open("GET",
"https://api.twitter.com/1.1/search/" +
"tweets.json?q=%23scalajs"
);
xhr.onload = (e) => {
if (xhr.status === 200) {
var r = JSON.parse(xhr.responseText);
$("#tweets").html(parseTweets(r));
}
};
xhr.send();
// Scala.js
val xhr = new XMLHttpRequest()
xhr.open("GET",
"https://api.twitter.com/1.1/search/" +
"tweets.json?q=%23scalajs"
)
xhr.onload = { (e: Event) =>
if (xhr.status == 200) {
val r = JSON.parse(xhr.responseText)
$("#tweets").html(parseTweets(r))
}
}
xhr.send()
Get Started with Scala.jshttps://www.scala-js.org/tutorial/basic/
Reason
Reason是一個由Facebook創(chuàng)造和維護的語言,它為OCaml編譯器提供了新的語法,并且代碼可以轉換成JavaScript和原生代碼。
作為ML家族的一部分并且自己本身是函數式語言,它天生提供了強大但是靈活的伴隨類型推斷的類型系統(tǒng),代數數據類型和模式匹配。它也支持不可變數據類型和參數多態(tài)(也被其他語言稱為泛型),但是在OCaml中,也是支持面向對象編程的。
通過 bucklescript綁定就可以使用現(xiàn)存的JavaScript庫。你也可以在你的Reason代碼旁邊混入你的JavaScript。插入的JavaScript代碼不會嚴格的檢查,但作為快速修復和原因也是不錯的。
如果你是一個React開發(fā)者,綁定是可能的,并且這個語言也支持JSX。
/* A type variant being pattern matched */ let possiblyNullValue1 = None; let possiblyNullValue2 = Some "Hello@"; switch possiblyNullValue2 { | None => print_endline "Nothing to see here." | Some message => print_endline message }; /* Parametrized types */ type universityStudent = {gpa: float}; type response 'studentType = {status: int, student: 'studentType}; let result: response universityStudent = fetchDataFromServer (); /* A simple typed object */ type payload = Js.t {. name: string, age: int }; let obj1: payload = {"name": "John", "age": 30};
Get Started with Reason https://reasonml.github.io/guide/javascript/quickstart
Haxe
Haxe是一個多范式編程語言,并且它的編譯器可以產生二進制或者其他語言的源代碼。
雖然Haxe提供了嚴格的類型系統(tǒng)并帶有類型推斷,它也可以作為動態(tài)語言只要目標語言支持。同樣的,它也支持多種的編程風格比如面向對象,泛型,函數式。
當你寫Haxe代碼的時候,你可以為編譯指定多個平臺或語言,但不需要對代碼做什么大的改變。指定目標的代碼塊也支持。
你可以用Haxe同時寫前端和后端用同樣的代碼,并且通過Haxe Remoting進行溝通,既可以同步連接也可以異步連接。
不出所料,Haxe代碼可以兼容現(xiàn)有的庫但也提供了成熟的標準庫。
// Example extracted from http://code.haxe.org
extern class Database {
function new();
function getProperty<T>(property:Property<T>):T;
function setProperty<T>(property:Property<T>, value:T):Void;
}
abstract Property<T>(String) {
public inline function new(name) {
this = name;
}
}
class Main {
static inline var PLAYER_NAME = new Property<String>("playerName");
static inline var PLAYER_LEVEL = new Property<Int>("playerLevel");
static function main() {
var db = new Database();
var playerName = db.getProperty(PLAYER_NAME);
trace(playerName.toUpperCase());
db.setProperty(PLAYER_LEVEL, 1);
}
}
Get Started with Reasonhttps://haxe.org/documentation/introduction/language-introduction.html
Nim
Nim是一個靜態(tài)類型,多范式編程語言,有著極簡風格與空格敏感的語法,編譯為C,C++和JavaScript。
這個語言本身很小,但它的元編程能力會吸引你自己去實現(xiàn)一些在別的語言內置的功能。這些構建模塊有宏,模板和泛型,通過它們你可以實現(xiàn)不論是簡單的功能還是不同的泛型。這使得Nim成為一個非常通用的語言可以適應你的需求,有著Lisp的精髓。
Nim的語法抽象功能允許你去讓語言去適應你的功能,讓真正的[DSLs][20]成為可能。如果你有著專門的任務需要處理,你可以獲得更高級的表達性。
# Reverse a string proc reverse(s: string): string = result = "" for i in countdown(high(s), 0): result.add s[i] var str1 = "Reverse This!" echo "Reversed: ", reverse(str1) # Using templates template genType(name, fieldname: expr, fieldtype: typedesc) = type name = object fieldname: fieldtype genType(Test, foo, int) var x = Test(foo: 4566) echo(x.foo) # 4566
Get Started with Nimhttps://nim-lang.org/documentation.html
結尾
如果JavaScript不是你最喜歡的語言,你依然可以創(chuàng)建web應用而不用忍受這個技術的缺點。可供選擇的范圍很廣,從純粹的函數式語言,比如PureScript,到面向對象語言,比如Dart。并且如果你想要不只是語言的轉化,你也可以選擇比如Elm,Elm提供像是虛擬DOM和內置的架構這樣的工具。
你是否有嘗試了這篇文章的任何一種語言,又或者你有自己的推薦?請在評論中讓我知道!
今天我們一起來了解下HTML,
首先HTmL包含三層結構,分別是結構層,表現(xiàn)層,行為層。
結構層:html => 網頁上有什么,比如說文字啊、按鈕啊、圖片啊等等。
表現(xiàn)層:css => 顯示成什么樣子,比如說文字的大小啊,位置啊,顏色啊等等。
行為層:JavaScript => 具體怎么操作,比如說點擊按鈕讓圖片放大縮小等等。
===============================
在了解了html的三層結構之后,我們來學習如何寫html。html不是編程語言,它是一套標簽。最簡單的html文本是下圖1這個樣子。我們可以在電腦桌面上新建一個記事本文件,然后把后綴名改一下(.txt=>.html),把這段標簽代碼粘貼到html文件里,這樣一個空白的網頁就做成了。如果需要在網頁上添加內容,我們只需要在第10行的位置添加各種各樣的標簽即可。比如我在圖二添加了一個按鈕標簽和一段文字標簽,雙擊html文件,頁面上就從左到右,從上到下顯示對應的內容。是不是很簡單。我們日常瀏覽的網頁都是這樣一個標簽一個標簽畫上去的。
我給大家總結了一張圖,基本上覆蓋了工作中常用的知識點。同時分享幾個小技巧。
1.最簡單的網頁寫成什么樣子,也就是html模板不需要記憶,下圖也說了,去百度下載一個VSCode軟件(類似于記事本,是現(xiàn)在主流的前端代碼編輯器),用它打開我們的html文件,輸入英文嘆號回車就自動生成了,學編程不要死記硬背。
2.控件的標簽不需要記憶,直接百度html XXX標簽,例如:百度搜“html按鈕標簽”,他就會告訴我們是<button>,用的時間長了自然就記住了。是不是省力。
3.標簽的屬性很重要,可以不去記他的寫法,因為寫可以百度,重要的是你需要記住標簽有什么屬性,下圖的屬性記住足矣。為什么要記呢,因為工作中,有的時候會遇到這樣一種情況,明明設置一個屬性可以完成的功能,我們不知道,花費了大力氣用css和js去實現(xiàn),結果還存在著特定場合的bug,讓人很無奈。
4.對于html還有兩個標簽<canvas>和<svg>,他們是用來繪圖的,做特殊效果的。我們可以先跳過,等框架啥的都學完了,有興趣,學習一下。
5.給大家推薦一個小白學習html的網站,w3cschool,圖里不明白的可以去上邊學學練練。
6.如果覺得一個人學習前端有難度,我建了一個小白前端學習交流群,可以私聊我,大家在群里多多交流,我會經常給大家答疑,組織大家練習,一起做小項目。有方向,少走彎路。
*請認真填寫需求信息,我們會在24小時內與您取得聯(lián)系。