搜尋
首頁後端開發php教程如何創建Laravel CSS-Minify命令

如何創建Laravel CSS-Minify命令

>在本文中,您將學習如何使用Laravel的Artisan命令行工具以及如何創建自定義命令。請注意,您需要熟悉Laravel框架才能充分利用本文。

>

鑰匙要點

  • 利用Laravel Artisan:利用Laravel的Artisan命令行工具為CSS Minification創建自定義命令,提高了Web開發項目的工作流效率。
  • >自定義命令創建:輕鬆地使用`php工匠命令:用命名,存儲和命名區的選項創建自定義命令,允許在Laravel應用程序中量身定制功能。
  • >
  • 縮小選項:在您的命令中實現選項來處理CSS文件串聯和評論保存,提供了基於不同開發需求的靈活性。
  • 命令註冊:確保在Laravel的Artisan系統中註冊您的新命令,以使其可執行,無論是通過'artisan.php`文件還是用於包裝開發的服務提供商。
  • >
  • 執行和輸出:使用命令來縮小CSS文件,並具有可選的串聯和註釋保存標誌,並在執行過程中提高命令反饋。
我們在建造什麼

在本教程中,我們將構建一個命令來縮小我們的CSS資產,將其使用:

<span>cssmin 'output_path' 'file1'...'fileN' --comments --concat</span>
output_path :(必需)保存縮小文件的路徑,(style.css-> style.min.css)。
  • file1 ... fileen :(必需)要縮小的文件列表。
  • >
  • - 註釋:(可選)添加此選項以保持註釋。
  • - concat :(可選)將縮小文件串成一個名為all.min.css的文件
  • 什麼是laravel命令
  • Artisan是Laravel的命令行實用程序的名稱。它帶有一組預定義命令,您可以使用PHP工匠列表列出。如果要顯示特定命令的幫助,則可以使用PHP Artisan幫助命令。 >
創建CSS minifier命令

要創建一個工匠命令,您可以使用命令:make命令。此命令接受一個參數:

>名稱:命令的類名稱。

和三個選項:
  • - 命令:應輸入運行命令的名稱。
>

- 路徑:默認情況下,命令存儲在應用程序/命令文件夾中,但是,您可以使用此選項更改該命令。

- 名稱空間:您可以使用此選項來命名您的一組命令,例如在命令命令中:make,make命令在命令名稱空間下。
    >
  • 現在,要創建我們的命令,我們將使用php工匠命令:make cssmincommand -command = cssmin,他們將在我們的app/commands目錄中創建一個cssmincommand.php文件。
  • >>>>>>>>>>
    <span>cssmin 'output_path' 'file1'...'fileN' --comments --concat</span>

    我們的cssmincommand類擴展了IlluminateConsolecommand並覆蓋兩種方法(getArguments,getOptions)。

    >
    • > getArguments:此功能返回應該傳遞給命令的一系列參數(例如:我們傳遞給CSSMIN命令的文件列表)。
    • > getOptions:返回您可能傳遞給命令的選項列表或開關。 (例如 - -Comments)。
    注意:選項可能具有或可能沒有值, - comments只是一個標誌,如果將其傳遞給命令,則返回true,而-ouptput ='public/public/Assets'將返回一個值。 >

    執行您的命令時,將調用火法,因此我們需要放置命令邏輯。

    註冊命令

    如果您嘗試運行我們的命令PHP Artisan cssmin'Args'您將獲得命令“ CSSMIN”。

    要註冊一個命令,您需要將其添加到artisan.php文件:>

    >如果您不想將命令放入artisan.php文件中,則可以創建一個單獨的文件並包含它,或者如果您創建一個軟件包,則可以在服務提供商中註冊。

    參數

    在我們的getArguments方法中,我們將定義輸出和文件。
    <span>use Illuminate<span>\Console\Command</span>;
    </span><span>use Symfony<span>\Component\Console\Input\InputOption</span>;
    </span><span>use Symfony<span>\Component\Console\Input\InputArgument</span>;
    </span>
    <span>class CssminCommand extends Command{
    </span>    <span>protected $name = 'cssmin';
    </span>    <span>protected $description = 'Command description.';
    </span>    
        <span>public function __construct(){
    </span>		<span><span>parent::</span>__construct();
    </span>	<span>}
    </span>    
        <span>public function fire(){
    </span>		<span>//
    </span>	<span>}
    </span>	
    	<span>protected function getArguments(){
    </span>		<span>return array(
    </span>			<span>array('example', InputArgument<span>::</span>REQUIRED, 'An example argument.'),
    </span>		<span>);
    </span>	<span>}
    </span>    
    	<span>protected function getOptions(){
    </span>		<span>return array(
    </span>			<span>array('example', null, InputOption<span>::</span>VALUE_OPTIONAL, 'An example option.', null),
    </span>		<span>);
    </span>	<span>}
    </span><span>}</span>
    要定義一個參數,我們需要傳遞一系列值:

    名稱:檢索參數時要使用的密鑰名稱。

    >


    模式:可以具有三個選項之一:

    >
    <span>Artisan<span>::</span>add( new CssMinCommand );
    </span>
    <span>//or through the container
    </span><span>Artisan<span>::</span>add( App<span>::</span>make("CssMinCommand") );</span>
      > inputargument :: Required:需要參數。
    • Inputargument ::可選:參數是可選的。
    • >
    • inputargument :: is_array:參數接受多個值(ex:file1 ... fileen)。

      但是,您可以將它們結合起來,例如Inputargument :: iS_array | InputArgument ::必需(必需參數,必須是一個數組)。
      • >
      • >描述:打印命令幫助時有用。
      • > defaultValue:如果未提供參數。
      • >
      ,所以我們的getArguments方法將是:

      >

    • 注意:使用IS_Array參數時,應該是返回的參數數組中的最後一個。 (顯然)。
    • >選項
    • 我們的CSSMIN命令只有兩個選項。為了定義一個選項,我們通過數組:

    <span>array( 'name', 'mode', 'description', 'defaultValue' )</span>
    >名稱:您選項的名稱(例如:註釋)。

    >

    快捷方式:您選項的較短版本(例如: - Verbose和-v)。

    >

    模式:可以是四個選項之一(inputoption :: value_is_array,inputoption :: value_optional,inputoption :: value_required,inputoption :: value_none),前三個值與參數相似。

    <span>protected function getArguments(){
    </span>        <span>return array(
    </span>            <span>array(
    </span>                <span>'output', 
    </span>                <span>InputArgument<span>::</span>REQUIRED,
    </span>                <span>'Path to output directory'
    </span>            <span>),
    </span>            <span>array(
    </span>                <span>'files', 
    </span>                <span>InputArgument<span>::</span>IS_ARRAY | InputArgument<span>::</span>OPTIONAL ,
    </span>                <span>"List of css files to minify"
    </span>            <span>),
    </span>        <span>);
    </span>    <span>}</span>
    value_none:指示該選項是布爾旗(ex: - verbose)。
    • 描述:在打印命令幫助時有用。
    • >
    • > defaultValue:如果未提供選項值。
    • >

      ,所以我們的getOptions方法將是:
        >
      <span>cssmin 'output_path' 'file1'...'fileN' --comments --concat</span>

      >運行命令

      當我們的火法被稱為時,我們需要收集我們的論點和選擇。我們可以單獨的功能為我們做到這一點:

      >
      <span>use Illuminate<span>\Console\Command</span>;
      </span><span>use Symfony<span>\Component\Console\Input\InputOption</span>;
      </span><span>use Symfony<span>\Component\Console\Input\InputArgument</span>;
      </span>
      <span>class CssminCommand extends Command{
      </span>    <span>protected $name = 'cssmin';
      </span>    <span>protected $description = 'Command description.';
      </span>    
          <span>public function __construct(){
      </span>		<span><span>parent::</span>__construct();
      </span>	<span>}
      </span>    
          <span>public function fire(){
      </span>		<span>//
      </span>	<span>}
      </span>	
      	<span>protected function getArguments(){
      </span>		<span>return array(
      </span>			<span>array('example', InputArgument<span>::</span>REQUIRED, 'An example argument.'),
      </span>		<span>);
      </span>	<span>}
      </span>    
      	<span>protected function getOptions(){
      </span>		<span>return array(
      </span>			<span>array('example', null, InputOption<span>::</span>VALUE_OPTIONAL, 'An example option.', null),
      </span>		<span>);
      </span>	<span>}
      </span><span>}</span>

      參數和選項方法以鍵作為參數並返回適當的值。 >

      為了保持我們的示例清潔和簡單,我們將使用此簡單功能和小的修改來進行縮小過程。

      <span>Artisan<span>::</span>add( new CssMinCommand );
      </span>
      <span>//or through the container
      </span><span>Artisan<span>::</span>add( App<span>::</span>make("CssMinCommand") );</span>
      現在要處理我們的參數(文件),我們將製作一個單獨的方法來完成這項工作。 >

      >最後,我們的火法只會調用這兩種方法:>
      <span>array( 'name', 'mode', 'description', 'defaultValue' )</span>

      提示:您也可以使用呼叫方法運行外部命令。 >

      <span>protected function getArguments(){
      </span>        <span>return array(
      </span>            <span>array(
      </span>                <span>'output', 
      </span>                <span>InputArgument<span>::</span>REQUIRED,
      </span>                <span>'Path to output directory'
      </span>            <span>),
      </span>            <span>array(
      </span>                <span>'files', 
      </span>                <span>InputArgument<span>::</span>IS_ARRAY | InputArgument<span>::</span>OPTIONAL ,
      </span>                <span>"List of css files to minify"
      </span>            <span>),
      </span>        <span>);
      </span>    <span>}</span>
      要測試我們的命令,我們將將一些CSS文件複製到我們的public/css目錄中,然後運行命令。

      第一個命令將在public/css目錄上創建兩個文件(style.min.css,willsive.min.css)。
      <span>array('name', 'shortcut', 'mode', 'description', 'defaultValue')</span>
      >

      因為我們使用了 - comments和 - concat標誌,所以我們將獲得一個名為all.min.css的文件,其中包含兩個文件,其中剩下的兩個文件。

      >
      <span>protected function getOptions(){
      </span>        <span>return array(
      </span>            <span>array('comments', 'c', InputOption<span>::</span>VALUE_NONE, 'Don\'t strip comments' , null),
      </span>            <span>array('concat', null, InputOption<span>::</span>VALUE_NONE, 'Concat the minified result to one file' , null),
      </span>        <span>);
      </span>    <span>}</span>
      我們的命令不是很描述性,也不提供任何消息或通知!

      >

      改進命令

      在我們繼續之前,在最終的github存儲庫之前,我將為我們的命令創建一個新標籤,以便您可以切換和測試每個標籤。

      使命令有點冗長,Laravel為我們提供了一些輸出功能:

      這將輸出:

      在僅顯示消息之外,您可以向用戶詢問信息,例如:>

      <span>private function init(){
      </span>    <span>// retrun an array
      </span>    <span>$this->files = $this->argument('files');
      </span>    <span>// return a string
      </span>    <span>$this->output_path = $this->argument('output');
      </span>    <span>// return true if passed, otherwise false
      </span>    <span>$this->comments = $this->option('comments');
      </span>    <span>// return true if passed, otherwise false
      </span>    <span>$this->concat = $this->option('concat');
      </span><span>}</span>
      如果用戶類型與y/n。

      >

      詢問方法將向用戶詢問輸入,而不僅僅是y/n,如果將其留為空,則返回默認值。

      >如何創建Laravel CSS-Minify命令選擇方法將為用戶提供一個編號列表以供您選擇,如果將其剩下,則返回默認值。

      >

      秘密方法將提示用戶提出問題並隱藏鍵入,但是將返回用戶輸入。

      <span>private function minify( $css, $comments ){
      </span>        <span>// Normalize whitespace
      </span>        <span>$css = preg_replace( '/\s+/', ' ', $css );
      </span>
              <span>// Remove comment blocks, everything between /* and */, unless preserved with /*! ... */
      </span>        <span>if( !$comments ){
      </span>            <span>$css = preg_replace( '/\/\*[^\!](.*?)\*\//', '', $css );
      </span>        <span>}//if
      </span>        
              <span>// Remove ; before }
      </span>        <span>$css = preg_replace( '/;(?=\s*})/', '', $css );
      </span>
              <span>// Remove space after , : ; { } */ >
      </span>        <span>$css = preg_replace( '/(,|:|;|\{|}|\*\/|>) /', '', $css );
      </span>
              <span>// Remove space before , ; { } ( ) >
      </span>        <span>$css = preg_replace( '/ (,|;|\{|}|\(|\)|>)/', '', $css );
      </span>
              <span>// Strips leading 0 on decimal values (converts 0.5px into .5px)
      </span>        <span>$css = preg_replace( '/(:| )0\.([0-9]+)(%|em|ex|px|in|cm|mm|pt|pc)/i', '.', $css );
      </span>
              <span>// Strips units if value is 0 (converts 0px to 0)
      </span>        <span>$css = preg_replace( '/(:| )(\.?)0(%|em|ex|px|in|cm|mm|pt|pc)/i', '0', $css );
      </span>
              <span>// Converts all zeros value into short-hand
      </span>        <span>$css = preg_replace( '/0 0 0 0/', '0', $css );
      </span>
              <span>// Shortern 6-character hex color codes to 3-character where possible
      </span>        <span>$css = preg_replace( '/#([a-f0-9])\1([a-f0-9])\2([a-f0-9])\3/i', '#', $css );
      </span>
              <span>return trim( $css );
      </span>    <span>}//minify</span>
      實際上,Laravel只是使Symfony的遊戲機API更簡單,更詳細,如果您想挖進去,還有更多。
        >
      • >讓我們的命令更加詳細,並使用戶對執行的任務進行更新。 >

        我們的功能現在打印一些有用的消息,以跟踪正在發生的事情。 >
      • 注意:這將在GitHub存儲庫上標記為我們命令的V2。
      • 創建應用程序時,我們被用來傾倒可用路由的列表(PHP Artisan路線)。
      • Symfony提供了一個函數,可讓您輕鬆打印這樣的桌子。檢查文檔中的示例。我們將看到接下來如何使用一些Symfony控制台助手。

        >

        使用Symfony Console Helper

        為了說明某些符號助手的使用,我們將使用進度助手來保持用戶有關工作進度的最新信息。

        在我們的初始方法結束時,我們將需要從助手那裡取得進度,然後開始我們的進度標準。

        啟動方法接受兩個參數,$ this->輸出是Symfony控制台中的consoleouput實例。第二個參數是最大步驟數。

        >
      <span>cssmin 'output_path' 'file1'...'fileN' --comments --concat</span>
      >每次我們在processFiles方法中處理文件時,我們都會將進度欄推進一步,當作業完成時,我們將結束進度欄並打印通知消息。

      >您可以嘗試使用多個文件的命令或刪除睡眠功能線以查看實時效果。

      <span>use Illuminate<span>\Console\Command</span>;
      </span><span>use Symfony<span>\Component\Console\Input\InputOption</span>;
      </span><span>use Symfony<span>\Component\Console\Input\InputArgument</span>;
      </span>
      <span>class CssminCommand extends Command{
      </span>    <span>protected $name = 'cssmin';
      </span>    <span>protected $description = 'Command description.';
      </span>    
          <span>public function __construct(){
      </span>		<span><span>parent::</span>__construct();
      </span>	<span>}
      </span>    
          <span>public function fire(){
      </span>		<span>//
      </span>	<span>}
      </span>	
      	<span>protected function getArguments(){
      </span>		<span>return array(
      </span>			<span>array('example', InputArgument<span>::</span>REQUIRED, 'An example argument.'),
      </span>		<span>);
      </span>	<span>}
      </span>    
      	<span>protected function getOptions(){
      </span>		<span>return array(
      </span>			<span>array('example', null, InputOption<span>::</span>VALUE_OPTIONAL, 'An example option.', null),
      </span>		<span>);
      </span>	<span>}
      </span><span>}</span>

      注意:此版本將在最終存儲庫上標記為V3。

      結論如何創建Laravel CSS-Minify命令 在本文中,我們了解瞭如何創建和擴展Laravel命令。 Laravel有很多可以探索的內置命令,您還可以檢查我們在Github上的最終存儲庫以測試最終結果。問題?評論?您想查看更多工匠司令部教程嗎?讓我們知道!

      Laravel CSS Minify Command

      上的常見問題(常見問題解答)

      在Laravel中縮小CSS的目的是什麼?它涉及刪除不必要的字符,例如從CSS文件中的空格,評論和線路中斷。此過程減少了CSS文件的大小,這又減少了需要傳輸給客戶端的數據量。這可以顯著改善您的網站或應用程序的負載時間,提供更好的用戶體驗。

      > Laravel Mix如何幫助CSS Minification?

      Laravel Mix是一種功能強大的工具,可提供流利的工具用於定義WebPack的API為您的Laravel應用程序構建步驟。它支持幾個常見的CSS和JavaScript前處理器,包括縮小。通過使用Laravel Mix,您可以輕鬆地使用單個命令來縮小CSS文件,而無需手動刪除不必要的字符。這不僅節省了時間,而且還可以確保您的CSS文件盡可能優化。

      我可以在不使用laravel mix的情況下縮小CSS文件嗎?

      是的,您可以在不使用laravel的情況下縮小CSS文件混合。有幾種在線工具和NPM軟件包可以幫助您縮小CSS文件。但是,建議使用Laravel Mix,因為它與Laravel無縫集成,並提供了一種簡單便捷的方法來管理和優化您的CSS文件。

      >

      >在Laravel中縮小CSS時可能會遇到的潛在問題?

      > >在Laravel中縮小CSS通常是一個簡單的過程,如果您的CSS文件包含語法錯誤,您可能會遇到問題。這些錯誤會導致縮小過程失敗,從而導致不優化的CSS文件。因此,重要的是要確保您的CSS文件在嘗試縮小它們之前是無錯誤的。

      如果在CSS Minification期間遇到問題,我如何在CSS Minification in Laravel中的CSS Minification中調試問題?在Laravel中,您可以使用Laravel Mix的源地圖功能進行調試。源地圖是將縮小的CSS文件映射回原始源文件的文件,使您可以輕鬆地跟踪和解決任何問題。

      我可以在Laravel中自動化CSS Minification的過程?是的,您可以使用Laravel Mix的版本控制功能來自動化Laravel中CSS縮小的過程。每當您運行生產構建命令時,此功能都會自動減小CSS文件。這樣可以確保您的CSS文件始終得到優化,而無需每次手動縮小它們。

      > CSS Minification如何影響我的Laravel應用程序的性能?

      css Minification可以顯著提高性能您的Laravel申請。通過減少CSS文件的大小,您可以減少需要傳輸到客戶端的數據量。這可能會導致加載時間更快,提供更好的用戶體驗。

      >我可以使用Laravel Mix縮小其他類型的文件嗎?

      是的,除了CSS文件,也可以使用Laravel Mix縮小JavaScript文件。這可以進一步優化您的Laravel應用程序,減少需要將需要傳輸到客戶端的數據量。

      >縮放和串聯CSS文件之間有什麼區別?不必要的字符降低大小,同時串聯CSS文件涉及將多個CSS文件組合到一個文件中。這兩個過程都可以幫助優化您的Laravel應用程序,但它們的目的不同。縮小縮小每個單獨的CSS文件的大小,同時通過將多個文件組合到一個。

      >我如何確保如何正確提供我的CSS文件?為了確保正確提供了縮小的CSS文件,您可以使用Laravel Mix的版本操作功能。此功能將唯一的哈希附加到您縮小的CSS文件的文件名上,以確保客戶端始終接收您的CSS文件的最新版本。

以上是如何創建Laravel CSS-Minify命令的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
在Laravel中使用Flash會話數據在Laravel中使用Flash會話數據Mar 12, 2025 pm 05:08 PM

Laravel使用其直觀的閃存方法簡化了處理臨時會話數據。這非常適合在您的應用程序中顯示簡短的消息,警報或通知。 默認情況下,數據僅針對後續請求: $請求 -

php中的捲曲:如何在REST API中使用PHP捲曲擴展php中的捲曲:如何在REST API中使用PHP捲曲擴展Mar 14, 2025 am 11:42 AM

PHP客戶端URL(curl)擴展是開發人員的強大工具,可以與遠程服務器和REST API無縫交互。通過利用Libcurl(備受尊敬的多協議文件傳輸庫),PHP curl促進了有效的執行

簡化的HTTP響應在Laravel測試中模擬了簡化的HTTP響應在Laravel測試中模擬了Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显著减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

在Codecanyon上的12個最佳PHP聊天腳本在Codecanyon上的12個最佳PHP聊天腳本Mar 13, 2025 pm 12:08 PM

您是否想為客戶最緊迫的問題提供實時的即時解決方案? 實時聊天使您可以與客戶進行實時對話,並立即解決他們的問題。它允許您為您的自定義提供更快的服務

PHP記錄:PHP日誌分析的最佳實踐PHP記錄:PHP日誌分析的最佳實踐Mar 10, 2025 pm 02:32 PM

PHP日誌記錄對於監視和調試Web應用程序以及捕獲關鍵事件,錯誤和運行時行為至關重要。它為系統性能提供了寶貴的見解,有助於識別問題並支持更快的故障排除

解釋PHP中晚期靜態結合的概念。解釋PHP中晚期靜態結合的概念。Mar 21, 2025 pm 01:33 PM

文章討論了PHP 5.3中介紹的PHP中的晚期靜態結合(LSB),允許靜態方法的運行時間分辨率調用以更靈活的繼承。 LSB的實用應用和潛在的觸摸

自定義/擴展框架:如何添加自定義功能。自定義/擴展框架:如何添加自定義功能。Mar 28, 2025 pm 05:12 PM

本文討論了將自定義功能添加到框架上,專注於理解體系結構,識別擴展點以及集成和調試的最佳實踐。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),