亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 web前端 js教程 使用 CSS 變數(shù)在 Puck 中建立動態(tài)主題

使用 CSS 變數(shù)在 Puck 中建立動態(tài)主題

Jan 08, 2025 pm 09:45 PM

Puck 是 React 的開源視覺化編輯器,為下一代頁面建立器和無程式碼產品提供支援。在 GitHub 上給我們一顆星! ??


將 Puck 整合到您的頁面建立產品中時,一個常見的需求是讓您的使用者能夠集中管理頁面主題,而無需對每個元件進行調整。

例如:使用者需要一種全域管理字體樣式的方法 - 即使對於已新增至頁面的元件也是如此。以下是實際效果:

Using CSS variables to create dynamic themes in Puck

由於 Puck 只是一個 React 元件,因此有很多方法可以解決這個問題(以及管理其他更複雜的狀態(tài))。在本文中,我將重點討論最簡單但最強大的方法之一—CSS 屬性。讓我們開始吧!

Using CSS variables to create dynamic themes in Puck

對於本教程,我假設您對 Puck 及其功能有基本的了解。如果您是 Puck 的新手,請不要擔心 — 我們仍然歡迎您繼續(xù)學習!不過,我建議您查看入門指南以熟悉基礎知識。

使用 Vite 設定項目

我將首先使用 Vite 的腳手架腳本建立一個專案。如果您已經有 Puck 的項目,歡迎您繼續(xù)閱讀或跳過本節(jié)。

如果您使用 Next.js 或 Remix,您也可以使用官方 Puck 配方之一來設定您的專案。

創(chuàng)建專案

首先,打開終端機並執(zhí)行以下命令來建立新的 Vite 專案:

npm create vite@latest puck-global-themes -- --template react
cd puck-global-themes
npm install

安裝冰球

接下來,安裝 Puck 軟體套件:

npm i @measured/puck --save

刪除衝突的樣式

當您使用 Vite 開始一個新專案時,它會附帶一些預設樣式,這些樣式會與 Puck 的衝突。若要解決此問題,請刪除 src/index.css 和 src/App.css,然後從 src/main.jsx 和 src/App.jsx 中刪除它們的匯入:

// main.jsx
import "./index.css"; // Remove this line
// App.jsx
import "./App.css"; // Remove this line

渲染 Puck 編輯器

準備好基本的專案結構後,請前往 src/App.jsx 檔案並將其內容替換為以下程式碼。這將為 Puck 設定一個用於拖放標題和段落組件的基本配置:

請注意,為了簡單起見,我在本例中使用內嵌樣式

// App.jsx
import { Puck } from "@measured/puck";
import "@measured/puck/puck.css";

// The configs for each of your draggable components
// Ideally you would pull each of these to their own files

const headingConfig = {
  defaultProps: {
    title: "Title",
  },
  fields: {
    title: {
      type: "text",
    },
  },
  render: ({ title }) => {
    return (
      <div>
        <h1>{title}</h1>
      </div>
    );
  },
};

const paragraphConfig = {
  defaultProps: {
    content: "This is a paragraph...",
  },
  fields: {
    content: {
      type: "textarea",
    },
  },
  render: ({ content }) => {
    return (
      <div>
        <p>{content}</p>
      </div>
    );
  },
};

// The Puck configuration object
const config = {
  components: {
    Heading: headingConfig,
    Paragraph: paragraphConfig,
  },
  root: {
    render: ({ children }) => {
      return (
        <main
         >



<p>Finally, run the application in development mode, navigate to http://localhost:5173, and check that everything is working as expected:<br>
</p>

<pre class="brush:php;toolbar:false">npm run dev

Using CSS variables to create dynamic themes in Puck

太棒了!現(xiàn)在您已經有了基礎,讓我們?yōu)槟挠脩籼砑又黝}。

新增主題

正如我之前提到的,CSS 自訂屬性是為編輯器添加互動式主題的絕佳選擇。為什麼這是一個很好的方法?因為它是輕量級的,不需要外部依賴項,並且(大部分)由瀏覽器本地處理。

設定

要使用 CSS 屬性新增動態(tài)主題,您需要將主題變數(shù)定義為需要它們的元件的某些父級的屬性。這可能是 Puck 的根元件或編輯器層次結構中的任何其他父元件,只要您定義它們,然後使用 var CSS 函數(shù)在需要的地方讀取它們,這並不重要。

在本教程中,我將重點使用 Puck 的根組件,以便用戶能夠在編輯器頂層的一個位置設置標題和段落的字體大小和顏色:

Using CSS variables to create dynamic themes in Puck

第 1 步:定義變數(shù)

先定義一個物件來集中所有 CSS 變數(shù)名稱。這將提高一致性,並使您免於因 CSS 中屬性名稱輸入錯誤而導致的偵錯問題。

專業(yè)提示:如果您使用 TypeScript,您可以使用枚舉而不是物件來獲得額外的類型安全性

npm create vite@latest puck-global-themes -- --template react
cd puck-global-themes
npm install

步驟 2:將變數(shù)新增至父元件

接下來,更新根配置以包含主題變數(shù)的道具和欄位。這將允許使用者直接從編輯器的根字段內更新自訂屬性。

為此,您需要定義新根 props 的欄位及其預設值:

npm i @measured/puck --save

之後,在根的渲染函數(shù)中,從 props 中讀取自訂屬性並將它們作為 CSS 變數(shù)傳遞給根元素。

// Puck 配置對象
常量配置= {
  成分: {
    //...現(xiàn)有元件
  },
  根: {
    //...根字段配置

    渲染:({children,fontColor,headingFontSize,paragraphFontSize})=> {
      返回 (
        



<p>如果您現(xiàn)在轉到編輯器,您應該會在根級別看到每個道具的新欄位。目前還沒有視覺回饋,但如果您檢查編輯器根目錄的樣式,您將看到對欄位所做的每次變更都設定了變數(shù)。 </p>

<p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173634396450671.jpg" class="lazy" alt="Using CSS variables to create dynamic themes in Puck"></p><h3>
  
  
  第三步:存取子元件中的共享變數(shù)
</h3>

<p>最後,透過在樣式中使用 var CSS 函數(shù)來存取所需元件中的主題變數(shù)。 </p>

<p>在我們的範例中,您將它們新增至 headerConfig 和 paragraphConfig 中:<br>
</p>

<pre class="brush:php;toolbar:false">const headerConfig = {
  //... 標題欄位配置

  渲染:({ 標題 }) => {
    返回 (
      <div>
        <h1>



</h1>
<p>如果您返回編輯器,拖放一些標題和段落,然後修改根級別的字段,您會注意到所有標題和段落都會更新以反映這些更改:</p>

<p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173634396650466.jpg" class="lazy" alt="Using CSS variables to create dynamic themes in Puck"></p>

<p>?就是這樣!您的用戶現(xiàn)在可以定義無縫應用於其頁面中不同組件的主題。 </p>

<h3>
  
  
  使用 CSS 屬性的優(yōu)點和缺點
</h3>

<p>? 優(yōu)點:</p>

<ul>
<li>簡單直覺的設定</li>
<li>頁面層次結構中的內建級聯(lián)和覆蓋功能,可以輕鬆管理共享樣式並能夠自訂各個元件</li>
<li>零外部依賴與輕量化-瀏覽器原生支援 CSS 自訂屬性</li>
<li>比其他選項更少的樣板和維護複雜性</li>
</ul>

<p>?缺點:</p>

<ul>
<li>僅適合簡單的樣式-無法處理複雜的資料或邏輯</li>
<li>當巢狀多層 CSS 屬性覆寫時,除錯可能會很困難</li>
</ul>

<h2>
  
  
  更進一步
</h2>

<p>根據(jù)您的特定用例,有很多方法可以進一步完善您的編輯器主題:</p>
<ul>
<li>
<strong>使用預定義主題</strong> - 在某些應用程式中,您可能需要提供預設主題選項,例如深色、淺色或最小主題。為此,您可以使用具有多個主題物件的選擇欄位。 
這些物件可以將所有 CSS 屬性分組為一個單元,讓使用者可以輕鬆地在頁面的不同主題之間切換,而無需填寫單一欄位。 </li>
<li>
<strong>整合式樣式庫</strong> – 對於較大的編輯器,最好使用樣式庫來利用預先建置的樣式、簡化定義並減少樣板檔案。 Tailwind 或 Emotion 等庫可以輕鬆與 Puck 集成,為您提供靈活性和效率,同時保持精美的外觀。事實上,Puck 甚至提供了一個 Emotion 插件,可以為您簡化整合過程! </li>
<li>
<strong>新增元件級主題覆蓋</strong> – 有時使用者可能需要自訂頁面中的各個元件,以便它們從主題的其餘部分中脫穎而出。由於我們使用的是 CSS 屬性,因此可以透過在元件層級覆寫父級主題變數(shù)來輕鬆實現(xiàn)這一點。例如,您可以在 Heading 元件中新增一個可選的字體顏色字段,如果提供的話,將專門為該 h1 元素重新定義 CSS 屬性。 </li>
</ul>

<h2>
  
  
  保持聯(lián)繫並繼續(xù)建設?
</h2>

<p>我希望本教學能幫助您在 Puck 支援的頁面建立器中利用 CSS 變數(shù)來實現(xiàn)動態(tài)主題。開源開發(fā)者社群是 Puck 發(fā)展的核心,我迫不及待地想看到您創(chuàng)建的創(chuàng)新應用程式! </p>

<p>我們致力於進一步推動 Puck 的功能,不斷推出新功能,包括即將推出的用於複雜網(wǎng)格和佈局的革命性拖放引擎,以及即將推出的一套新插件。 </p>

<p>所以,如果 Puck 給了您啟發(fā)或您想了解最新功能,您可以透過以下方式參與其中:</p>

<ul>
<li>
<strong>? 在 GitHub 上給我們加星標</strong> 以支持該項目並激勵其他人探索其潛力。 </li>
<li>
<strong>?加入我們的 Discord 社群</strong> 分享您的專案、提出問題並進行協(xié)作。 </li>
<li>
<strong>?在 X 和 Bluesky</strong> 上關注我們,以了解最新更新、先睹為快和功能公告。 </li>
<li>
<strong>?深入研究官方文件</strong>以獲得先進的技術和見解,可以將您的無程式碼工作流程提升到一個新的水平。 </li>
</ul>


          </div>

            
        

以上是使用 CSS 變數(shù)在 Puck 中建立動態(tài)主題的詳細內容。更多資訊請關注PHP中文網(wǎng)其他相關文章!

本網(wǎng)站聲明
本文內容由網(wǎng)友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
如何在node.js中提出HTTP請求? 如何在node.js中提出HTTP請求? Jul 13, 2025 am 02:18 AM

在Node.js中發(fā)起HTTP請求有三種常用方式:使用內置模塊、axios和node-fetch。 1.使用內置的http/https模塊無需依賴,適合基礎場景,但需手動處理數(shù)據(jù)拼接和錯誤監(jiān)聽,例如用https.get()獲取數(shù)據(jù)或通過.write()發(fā)送POST請求;2.axios是基於Promise的第三方庫,語法簡潔且功能強大,支持async/await、自動JSON轉換、攔截器等,推薦用於簡化異步請求操作;3.node-fetch提供類似瀏覽器fetch的風格,基於Promise且語法簡單

JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時復制副本,因此互不影響;引用類型如對象、數(shù)組和函數(shù)存儲的是內存地址,指向同一對象的變量會相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助於編寫更穩(wěn)定可靠的代碼。

JavaScript時間對象,某人構建了一個eactexe,在Google Chrome上更快的網(wǎng)站等等 JavaScript時間對象,某人構建了一個eactexe,在Google Chrome上更快的網(wǎng)站等等 Jul 08, 2025 pm 02:27 PM

JavaScript開發(fā)者們,大家好!歡迎閱讀本週的JavaScript新聞!本週我們將重點關注:Oracle與Deno的商標糾紛、新的JavaScript時間對象獲得瀏覽器支持、GoogleChrome的更新以及一些強大的開發(fā)者工具。讓我們開始吧! Oracle與Deno的商標之爭Oracle試圖註冊“JavaScript”商標的舉動引發(fā)爭議。 Node.js和Deno的創(chuàng)建者RyanDahl已提交請願書,要求取消該商標,他認為JavaScript是一個開放標準,不應由Oracle

什麼是緩存API?如何與服務人員使用? 什麼是緩存API?如何與服務人員使用? Jul 08, 2025 am 02:43 AM

CacheAPI是瀏覽器提供的一種緩存網(wǎng)絡請求的工具,常與ServiceWorker配合使用,以提升網(wǎng)站性能和離線體驗。 1.它允許開發(fā)者手動存儲如腳本、樣式表、圖片等資源;2.可根據(jù)請求匹配緩存響應;3.支持刪除特定緩存或清空整個緩存;4.通過ServiceWorker監(jiān)聽fetch事件實現(xiàn)緩存優(yōu)先或網(wǎng)絡優(yōu)先等策略;5.常用於離線支持、加快重複訪問速度、預加載關鍵資源及後臺更新內容;6.使用時需注意緩存版本控制、存儲限制及與HTTP緩存機制的區(qū)別。

處理諾言:鏈接,錯誤處理和承諾在JavaScript中 處理諾言:鏈接,錯誤處理和承諾在JavaScript中 Jul 08, 2025 am 02:40 AM

Promise是JavaScript中處理異步操作的核心機制,理解鍊式調用、錯誤處理和組合器是掌握其應用的關鍵。 1.鍊式調用通過.then()返回新Promise實現(xiàn)異步流程串聯(lián),每個.then()接收上一步結果並可返回值或Promise;2.錯誤處理應統(tǒng)一使用.catch()捕獲異常,避免靜默失敗,並可在catch中返回默認值繼續(xù)流程;3.組合器如Promise.all()(全成功才成功)、Promise.race()(首個完成即返回)和Promise.allSettled()(等待所有完成)

利用Array.Prototype方法用於JavaScript中的數(shù)據(jù)操作 利用Array.Prototype方法用於JavaScript中的數(shù)據(jù)操作 Jul 06, 2025 am 02:36 AM

JavaScript數(shù)組內置方法如.map()、.filter()和.reduce()可簡化數(shù)據(jù)處理;1).map()用於一對一轉換元素生成新數(shù)組;2).filter()按條件篩選元素;3).reduce()用於聚合數(shù)據(jù)為單一值;使用時應避免誤用導致副作用或性能問題。

JS綜述:深入研究JavaScript事件循環(huán) JS綜述:深入研究JavaScript事件循環(huán) Jul 08, 2025 am 02:24 AM

JavaScript的事件循環(huán)通過協(xié)調調用棧、WebAPI和任務隊列來管理異步操作。 1.調用棧執(zhí)行同步代碼,遇到異步任務時交由WebAPI處理;2.WebAPI在後臺完成任務後將回調放入相應的隊列(宏任務或微任務);3.事件循環(huán)檢查調用棧是否為空,若為空則從隊列中取出回調推入調用棧執(zhí)行;4.微任務(如Promise.then)優(yōu)先於宏任務(如setTimeout)執(zhí)行;5.理解事件循環(huán)有助於避免阻塞主線程並優(yōu)化代碼執(zhí)行順序。

了解事件在JavaScript DOM事件中冒泡和捕獲 了解事件在JavaScript DOM事件中冒泡和捕獲 Jul 08, 2025 am 02:36 AM

事件冒泡是從目標元素向外傳播到祖先節(jié)點,事件捕獲則是從外層向內傳播到目標元素。 1.事件冒泡:點擊子元素後,事件依次向上觸發(fā)父級元素的監(jiān)聽器,例如點擊按鈕後先輸出Childclicked,再輸出Parentclicked。 2.事件捕獲:設置第三個參數(shù)為true,使監(jiān)聽器在捕獲階段執(zhí)行,如點擊按鈕前先觸發(fā)父元素的捕獲監(jiān)聽器。 3.實際用途包括統(tǒng)一管理子元素事件、攔截預處理和性能優(yōu)化。 4.DOM事件流分為捕獲、目標和冒泡三個階段,默認監(jiān)聽器在冒泡階段執(zhí)行。

See all articles