整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          快速掌握html 的關鍵字

          lt;em>:斜體

          <&nbsp;>空格

          <h1-h6>標題標簽

          <strong>粗體標簽

          <p>段落標簽;

          =================================

          <br/>換行標簽

          break:打破

          row:行:

          ------------------------------------

          <hr/>水平線標簽;

          harizonal:意思:水平的;

          -------------------------------------

          width: ]寬度

          height:高度

          href:超鏈接;

          target:目標,把。。。作為目標;

          type:類型

          action:表單提交地址(注冊賬號的提交地址}

          method:方法

          input:輸入;

          readonly:只讀;

          disable:限制使用;

          border:邊框;

          cellspacing:單月格間距

          cellpadding:單月格邊距;

          bgcolor:backgroungcolor:背景色

          align:排列,排成一行;

          valign:垂直對齊

          colspan:合并列;

          rowspan:合并行

          table:表格;

          caption:表格標題

          frameborder:是否要邊框(1要0不要)

          style:樣式

          font:字體;

          decoration:裝飾裝潢;

          line-height:設置文本行高

          text-align:設置文本對齊方式;

          text-decoration:文本裝飾:下劃線,==

          background-position:背景開始位置

          background-repeat

          :背景填充方式;比如豎向 橫向 無

          visited:訪問:

          hover:停留

          cursor:鼠標屬性;

          margin:外邊距

          padding:內邊距

          --------------------------------

          <ul>

          <li>沒有順序,沒個li占一行;

          <ol>

          <li> 有順序,可以改變type(比如a)

          ----------------------------------------

          <dl>

          <dt>咖啡</dt>

          <dd>黑色</dd>dd在dt下一行后面;

          例如:

          咖啡

          黑色

          ----------------------------------------

          <text> 文本框

          <radio>單選按鈕

          <checkbox>復選框

          <password>密碼

          <file>文件選擇框

          <select>下拉列表 和《option》一起用

          <submit>提交按鈕

          <reset>重置按鈕

          <textarea>文本域;

          -------------------------------

          <table>表格

          <thead>頁眉

          <tbody>表格主體

          <tfood>頁腳;

          <caption>表格標題

          <img>導入圖片

          天學會html+css,第六天橫向導航。

          今天的學習目標是這部分橫向導航菜單。

          ·找到中間盒子,在里面添加ul列表,結構跟昨天的縱向導航菜單一樣。文本內容快速添加,看下效果。

          ·然后從外到內依次寫css樣式,ul的高度跟上一層一樣,默認樣式黑點去掉,看下效果。

          ·給 li添加左浮動,讓它們從縱向排列變成橫向排列。在給a標簽寫css樣式之前,別忘了要添加這句代碼。

          ·接著去掉默認樣式下劃線,文字顏色用黑色,文字水平居中的方法,讓高度和行高一樣,看下效果。

          ·再給每個a標簽的右邊都加上一定的內邊距,讓它們變寬,看起來就分開了。

          ·最后還有一個文字變色的效果,給a標簽加上hove偽類,顏色設置為紅色,看下效果。

          到此,今天的學習完成。

          的需求需要在網頁上寫代碼。

          比如在線執行代碼的 playground:

          或者在線面試:

          如果讓你實現網頁版 TypeScript 編輯器,你會如何做呢?

          有的同學說,直接用微軟的 monaco editor 呀:

          確實,直接用它就可以,但是有挺多地方需要處理的。

          我們來試試看。

          npx create-vite
          

          創建個 vite + react 的項目。

          安裝依賴:

          npm install
          
          npm install @monaco-editor/react
          

          這里用 @monaco-editor/react 這個包,它把 monaco editor 封裝成了 react 組件。

          去掉 main.tsx 里的 index.css

          然后在 App.tsx 用一下:

          import MonacoEditor from '@monaco-editor/react'
          
          export default function App() {
          
            const code = `import lodash from 'lodash';
          function App() {
            return <div>guang</div>  
          }  
            `;
          
            return <MonacoEditor
                height={'100vh'}
                path={"guang.tsx"}
                language={"typescript"}
                value={code}
            />
          }
          

          跑下開發服務:

          npm run dev
          

          試下看:

          現在就可以在網頁寫 ts 代碼了。

          但是有報錯:

          jsx 語法不知道怎么處理。

          這里明顯要改 typescript 的 tsconfig.json。

          怎么改呢?

          這樣:

          import MonacoEditor, { OnMount } from '@monaco-editor/react'
          
          export default function App() {
          
            const code = `import lodash from 'lodash';
          function App() {
            return <div>guang</div>  
          }  
            `;
          
            const handleEditorMount: OnMount = (editor, monaco) => {
              monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
                  jsx: monaco.languages.typescript.JsxEmit.Preserve,
                  esModuleInterop: true,
              })
          
          }
          
            return <MonacoEditor
                height={'100vh'}
                path={"guang.tsx"}
                language={"typescript"}
                onMount={handleEditorMount}
                value={code}
            />
          }
          

          onMount 的時候,設置 ts 的 compilerOptions。

          這里設置 jsx 為 preserve,也就是輸入 <div> 輸出 <div>,保留原樣。

          如果設置為 react 會輸出 React.createElement("div")。

          再就是 esModuleInterop,這個也是 ts 常用配置。

          默認 fs 要這么引入,因為它是 commonjs 的包,沒有 default 屬性:

          import * as fs from 'fs';
          

          設置 esModuleInterop 會在編譯的時候自動加上 default 屬性。

          就可以這樣引入了:

          import fs from 'fs';
          

          可以看到,現在 jsx 就不報錯了:

          還有一個錯誤:

          沒有 lodash 的類型定義。

          寫 ts 代碼沒提示怎么行呢?

          我們也要支持下。

          這里用到 @typescript/ata 這個包:

          ata 是 automatic type acquisition 自動類型獲取。

          它可以傳入源碼,自動分析出需要的 ts 類型包,然后自動下載。

          我們新建個 ./ata.ts,復制文檔里的示例代碼:

          import { setupTypeAcquisition } from '@typescript/ata'
          import typescriprt from 'typescript';
          
          export function createATA(onDownloadFile: (code: string, path: string) => void) {
            const ata = setupTypeAcquisition({
              projectName: 'my-ata',
              typescript: typescriprt,
              logger: console,
              delegate: {
                receivedFile: (code, path) => {
                  console.log('自動下載的包', path);
                  onDownloadFile(code, path);
                }
              },
            })
          
            return ata;
          }
          

          安裝用到的包:

          npm install --save @typescript/ata -f 
          

          這里就是用 ts 包去分析代碼,然后自動下載用到的類型包,有個 receivedFile 的回調函數里可以拿到下載的代碼和路徑。

          然后在 mount 的時候調用下:

          const ata = createATA((code, path) => {
              monaco.languages.typescript.typescriptDefaults.addExtraLib(code, `file://${path}`)
          })
          
          editor.onDidChangeModelContent(() => {
              ata(editor.getValue());
          });
          
          ata(editor.getValue());
          

          就是最開始獲取一次類型,然后內容改變之后獲取一次類型,獲取類型之后用 addExtraLib 添加到 ts 里。

          看下效果:

          有類型了!

          寫代碼的時候用到的包也會動態去下載它的類型:

          比如我們用到了 ahooks,就會實時下載它的類型包然后應用。

          這樣,ts 的開發體驗就有了。

          再就是現在字體有點小,明明內容不多右邊卻有一個滾動條:

          這些改下 options 的配置就好了:

          scrollBeyondLastLine 是到了最后一行之后依然可以滾動一屏,關閉后就不會了。

          minimap 就是縮略圖,關掉就沒了。

          scrollbar 是設置橫向縱向滾動條寬度的。

          theme 是修改主題。

          return <MonacoEditor
                height={'100vh'}
                path={"guang.tsx"}
                language={"typescript"}
                onMount={handleEditorMount}
                theme: "vs-dark",
                value={code}
                options={
                  {
                    fontSize: 16,
                    scrollBeyondLastLine: false,
                    minimap: {
                      enabled: false,
                    },
                    scrollbar: {
                      verticalScrollbarSize: 6,
                      horizontalScrollbarSize: 6,
                    }
                  }
              }
            />
          

          好多了。

          我們還可以添加快捷鍵的交互:

          默認 cmd(windows 下是 ctrl) + j 沒有處理。

          我們可以 cmd + j 的時候格式化代碼。

          editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyJ, () => {
              editor.getAction('editor.action.formatDocument')?.run()
          });
          

          試下效果:

          有同學可能問,monaco editor 還有哪些 action 呢?

          打印下就知道了:

          editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyJ, () => {
              // editor.getAction('editor.action.formatDocument')?.run()
              let actions = editor.getSupportedActions().map((a) => a.id);
              console.log(actions);
          });
          

          有 131 個:

          用到再搜就行。

          這樣,我們的網頁版 TypeScript 編輯器就完成了。

          總結

          有的需求需要實現網頁版編輯器,我們一般都用 monaco editor 來做。

          今天我們基于 @monaco-editor/react 實現了 TypeScript 編輯器。

          可以在 options 里配置滾動條、字體大小、主題等。

          然后 onMount 里可以設置 compilerOptions,用 addCommand 添加快捷鍵等。

          并且我們基于 @typescript/ata 實現了自動下載用到的 ts 類型的功能,它會掃描代碼里的 import,然后自動下載類型,之后 addExtraLib 添加到 ts 里。

          這樣在網頁里就有和 vscode 一樣的 ts 編寫體驗了。



          原文鏈接:https://juejin.cn/post/7361934843209777152


          主站蜘蛛池模板: 亚洲色精品三区二区一区| 精品一区二区三区电影| 日本亚洲国产一区二区三区| 精品无码国产一区二区三区麻豆| 美女AV一区二区三区| 亚洲一区中文字幕久久| 午夜性色一区二区三区不卡视频 | 99久久精品国产一区二区成人 | 久久久av波多野一区二区| 成人免费av一区二区三区| 波多野结衣一区二区三区高清av | 无码少妇一区二区| 97久久精品午夜一区二区| 日本一区二区三区精品视频| 国产韩国精品一区二区三区久久| 日本高清不卡一区| 久久99国产精一区二区三区| 果冻传媒一区二区天美传媒| 色一情一乱一伦一区二区三区日本 | 国精无码欧精品亚洲一区| 国产一区二区三区不卡在线看 | 丰满人妻一区二区三区免费视频| 日韩精品无码中文字幕一区二区| 真实国产乱子伦精品一区二区三区 | 99久久精品日本一区二区免费| 欧美一区内射最近更新| 精品少妇ay一区二区三区| 中文字幕精品一区影音先锋| 人妻无码一区二区三区免费| 久久久久人妻精品一区 | 精品亚洲一区二区三区在线观看 | 久久人做人爽一区二区三区| 乱精品一区字幕二区| 亚洲Av无码一区二区二三区| 97se色综合一区二区二区| 日韩最新视频一区二区三| 成人免费视频一区| 能在线观看的一区二区三区| 精品国产香蕉伊思人在线在线亚洲一区二区| 一本大道在线无码一区| 精品国产一区二区三区不卡 |