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

目錄
為什么我們建造Goofonts
Goofonts在行動中
我們?nèi)绾螛?gòu)建它:WordPress部分
我們?nèi)绾螛?gòu)建它:前端部分(使用nuxtjs)
最后的想法
首頁 web前端 css教程 我們?nèi)绾螛擞汫oogle字體并創(chuàng)建Goofonts.com

我們?nèi)绾螛擞汫oogle字體并創(chuàng)建Goofonts.com

Apr 12, 2025 pm 12:02 PM

我們?nèi)绾螛擞汫oogle字體并創(chuàng)建Goofonts.com

Goofontsis是由開發(fā)人員和設(shè)計師丈夫簽署的附帶項目,它們都是版式的忠實擁護者。我們一直在標記Google Fontsand構(gòu)建了一個網(wǎng)站,該網(wǎng)站使搜索并更容易找到正確的字體。

goofontsuses wordpress在后端和前端的后端和nuxtjs(Avue.js框架)中。我很想告訴您Goofonts.com背后的故事,并分享有關(guān)我們選擇的技術(shù)以及我們?nèi)绾芜m應(yīng)和將其用于該項目的一些技術(shù)細節(jié)。

為什么我們建造Goofonts

在撰寫本文時,Google字體提供了977個字體。您可以隨時使用TheGoogle字體開發(fā)人員API檢查確切的編號。您可以檢索所有字體的動態(tài)列表,包括每個家庭的可用樣式和腳本列表。

Google字體網(wǎng)站提供了一個漂亮的界面,您可以在其中預(yù)覽所有字體,通過趨勢,受歡迎程度,日期或名稱對其進行排序。

但是搜索功能呢?

您可以按五個類別包括和排除字體:襯線,sans-serif,顯示,手寫和單音范圍。

您可以在腳本中搜索(Likelatin擴展,西里爾或Devanagari(它們在Google字體中稱為子集)。但是您無法一次在多個子集中搜索。

您可以通過四個屬性進行搜索:厚度,傾斜,寬度和“數(shù)字樣式”。一種名為“變體樣式,既指風(fēng)格(斜體常規(guī))和權(quán)重(100,200,最多900)。通常,身體字體需要三個變體:常規(guī),大膽斜體。 “數(shù)字樣式”屬性與許多變體分類字體,但它不允許在“常規(guī),大膽,斜體”組合中選擇字體。

還有一個自定義搜索字段,您可以在其中輸入查詢。不幸的是,搜索是專門針對字體的名稱執(zhí)行的。因此,結(jié)果通常包括字體家庭來自Google字體以外的其他服務(wù)。

讓我們以“卡通”查詢?yōu)槔K鼜耐獠縁oundry Linotype導(dǎo)致“ Cartoonscript”。

我記得在一個項目上工作,該項目要求兩個高度風(fēng)格化的字體 - 一個喚起舊的野外西部,另一個模仿了劇本。那是我決定標記Google字體的時刻。:)

Goofonts在行動中

讓我向您展示Goofonts的工作原理。右側(cè)的黑暗側(cè)邊欄是您的“搜索”區(qū)域。您可以在搜索字段中鍵入關(guān)鍵字,這將執(zhí)行“和”搜索。例如,您可以查找同時是卡通平板的字體。

我們親自挑選了一堆關(guān)鍵字 - 關(guān)注其中的任何一個!如果您的項目需要一些特定的子集,請在子集部分中檢查它們。您還可以檢查字體所需的所有變體。

如果您喜歡字體,請單擊其心臟圖標,并將其存儲在您瀏覽器的LocalStorage中。您可以在thegoofonts.com/bookmarkspage.together上找到書簽字體,并使用代碼,您可能需要嵌入它們。

我們?nèi)绾螛?gòu)建它:WordPress部分

首先,我們需要一個以某種方式來預(yù)覽和標記每種字體。我們還需要一個數(shù)據(jù)庫來存儲thosetags。

我在WordPress方面有一些經(jīng)驗。此外,WordPress帶有其REST API,這為處理前端的數(shù)據(jù)打開了多種可能性。茅草很快就開始了。

我去了最直接的初始設(shè)置。每種字體都是帖子,我們將帖子標簽用于關(guān)鍵字。 Acustom Post類型也可以使用,但是由于我們僅將WordPress用于數(shù)據(jù),因此默認內(nèi)容類型非常有效。

顯然,我們需要以編程方式添加所有字體。我們還需要能夠編程更新字體,包括添加新字體或添加新的可用變體和子集。

下面描述的方法與通過外部API可用的任何其他數(shù)據(jù)都很有用。在自定義的WordPress插件中,我們注冊一個菜單頁面,可以從中檢查API的更新。為簡單起見,該頁面將顯示一個標題,一個按鈕激活更新的按鈕,以及一個視覺反饋的進度條。

 /**
 *注冊自定義菜單頁。 
 */
函數(shù)register_custom_menu_page(){
  add_menu_page( 
    “ Google字體到WordPress”, 
    “ WP Goofonts”, 
    “ manage_options', 
    'WP-GOOFONTS-MENU', 
  function(){?>        
    <h1> Google字體API </h1>
    <button type="“" button>運行</button>
    <p> </p>        
    <progress max="“" value="“"> </progress>
  <p><br>讓我們從編寫JavaScriptPart開始。雖然大多數(shù)與WordPress一起使用Ajax實現(xiàn)了JQuery和thejquery.ajaxmethod的示例,但可以在沒有jQuery的情況下獲得相同的示例,而是使用haxios和axoxiosand andaxiosand a helperqs.jss.jsfor數(shù)據(jù)序列化。</p><p>我們希望在加載后Quave toload我們的自定義腳本<em>。</em></p><pre rel="PHP" data-line=""> add_action('admin_enqueue_scripts'function(){
  wp__script('axios','https://unpkg.com/axios/dist/axios.min.js');
  wp_enqueue_script('qs','https://unpkg.com/qs/dist/qs.js');
  wp_enqueue_script('wp-goofonts-admin-script',plugin_dir_url(__file__)。'js/wp-goofonts.js',array('axios'qs','qs'),'1.0.0',true);
});

讓我們看看Javascript的外觀:

 const button = document.getElementById('wp-goofonts button')
const info = document.getElementById('info')
const progress = document.getElementById('progress')
const updater = {
  總計:0,
  總體檢查:0,
  更新:[],
  init:async函數(shù)(){
    嘗試 {
      const allfonts =等待axios.get('https://www.googleapis.com/webfonts/v1/webfonts?key = api_keykey&sort = date')
      this.totalCount = allfonts.data.items.length
      info.textContent =`獲取$ {this.totalCount} fonts。
      this.updatepost(allfonts.data.items,0)
    }捕獲(e){
      控制臺(E)
    }
  },,
  update post:async函數(shù)(els,index){
    if(index === this.totalCount){
      返回
    }                
    const data = {
      動作:'goofonts_update_post',
      字體:els [index],
    }
    嘗試 {
       const apirequest =等待axios.post(ajaxurl,qs.stringify(data))
       此  
       progress.setAttribute('value',math.Round(100*this.totalchecked/this.totalCount))
       this.updatepost(Els,索引1)
    }捕獲(e){
       控制臺(E)
      }
   }
}

button.addeventlistener('click',()=> {
  updater.init()
}))

Initmethod向TheGoogleFonts API提出了請求。一旦獲得API的數(shù)據(jù),我們將調(diào)用遞歸遞歸asynchronousupdatepostmethod,該數(shù)據(jù)將郵政請求中的sanividual字體發(fā)送到WordPress服務(wù)器。

現(xiàn)在,重要的是要記住,WordPress以其特定的方式實現(xiàn)了Ajax。首先,必須向每個請求發(fā)送towp-admin/admin-ajax.php 。該URL可以在管理區(qū)域作為全球JavascriptVariableajaxurl提供。

其次,所有WordPress AJAX請求必須在數(shù)據(jù)中包括AnactionArgument。操作的值確定將在服務(wù)器端上使用哪個掛鉤標簽。

在我們的情況下,動作值isgoofonts_update_post。這意味著服務(wù)器端上發(fā)生的事情由thewp_ajax_goofonts_update_posthook確定。

 add_action('wp_ajax_goofonts_update_post',function(){
  if(isset($ _post ['font'])){
    / *帖子瓷磚是字體的名稱 */
    $ title = wp_strip_all_tags($ _post ['font'] ['family']);
    $ variants = $ _post ['font'] ['variants'];
    $ subsets = $ _post ['font'] ['subsets'];
    $ category = $ _post ['font'] ['category'];
    / *檢查帖子是否已經(jīng)存在 */
    $ object = get_page_by_title($ title,'object','post');
    如果(null === $ object){
      / *創(chuàng)建一個新帖子和集類別,變體和子集作為標簽 */
      goofonts_new_post($ title,$類別,$ variants,$ subset);
    } 別的 {
      / *檢查$ variants或$子集更改 */
      goofonts_update_post($ object,$ variants,$ subset);
    }
  }
});

函數(shù)goofonts_new_post($ title,$類別,$ variants,$ subset){
  $ post_id = wp_insert_post(array(array)(
    'post_author'=> 1,
    'post_name'=> sanitize_title($ title),
    'post_title'=> $ title,
    'post_type'=>'post',
    'post_status'=>'草稿',
    )
  );
  如果($ post_id> 0){
    / *標記的簡單部分;)附加字體類別,變體和子集(這三個來自Google字體API)作為標簽 */
    wp_set_object_terms($ post_id,$ category,'post_tag',true);
    wp_set_object_terms($ post_id,$ variants,'post_tag',true);
    wp_set_object_terms($ post_id,$ subset,'post_tag',true);
  }
}

這樣,在不到一分鐘的時間內(nèi),我們最終在儀表板上得到了近一千個郵政草稿,其中所有標簽已經(jīng)到位。我們需要啟動為每種字體一個一個字體添加標簽。
在這種情況下,默認的WordPress編輯器沒有多大意義。我們需要的是該字體的預(yù)覽。 fonts.google.com上指向字體頁面的鏈接也派上用場。

Acustom Metaboxdo很好。在大多數(shù)情況下,您將使用元框來定制表單元素來保存與帖子相關(guān)的一些自定義數(shù)據(jù)。實際上,Metabox的內(nèi)容實際上可以是任何HTML。

函數(shù)display_font_preview($ post){
  / *字體名稱,例如Abril Fatface */
  $ font = $ post-> post_title;
  / *字體如URL,例如Abril Fatface */
  $ font_url_part = umpode('',Explode('',$ font));
  ?>
  <div> 
    <link href="%E2%80%9C" echo font_url_part swap>
      <h2>  </h2>
      <a href="%E2%80%9C" echo font_url_part>“ target =” target =“ _ black” rel =“ noopener”>在Google Fonts上的標本</a>
    
    <div contentedialtial="“" true style="“" font-family echo font>”>
      <p>快速的棕色狐貍跳過一只懶狗。</p>
      <p style="“" text-transform>快速的棕色狐貍跳過懶狗。</p>
      <p> 1 2 3 4 5 6 7 8 9 0 </p>
      <p>&! ; ? {} [] </p>
    </div>
  </div>
<p>標記字體是一項長期的任務(wù),重復(fù)了很多。它還需要大量的一致性。這就是為什么我們開始定義一組標簽“預(yù)設(shè)”的原因。</p><pre rel="JavaScript" data-line=""> {
  / * ... */
  漫畫:{
    標簽:“漫畫,休閑,非正式,卡通”
  },,
  草書:{
    標簽:“草書,書法,腳本,手稿,簽名”
  },,
  / * ... */
}

接下來,使用一些自定義CSS和JavaScript,我們通過使用一組預(yù)設(shè)按鈕來“砍” WordPress編輯器和標簽形成。

我們?nèi)绾螛?gòu)建它:前端部分(使用nuxtjs)

thegoofonts.cominterface是由法國Graphicandweb設(shè)計師BySylvain Guizard設(shè)計的(WhoalSo恰好是我的丈夫)。我們想要一些簡單的東西區(qū)分“搜索”區(qū)域。 Sylvain故意購買了離Google字體身份不遠的顏色。我們正在尋找建立獨特的和原始的用戶混亂之間的平衡。

雖然IDID毫不猶豫地將WordPress用于The Back-End,但IDID不想在前端使用它。我們的目標是一種類似應(yīng)用程序的體驗,我個人想在JavaScript中進行編碼,尤其是使用vue.js。

我遇到了使用nuxtjswith wordpress的網(wǎng)站的示例,并決定嘗試一下。選擇立即做出。 NUXTJS是一個非常流行的vue.js框架,我真的很喜歡它的簡單性和靈活性。
我一直在使用不同的NUXTJS設(shè)置來使用100%的靜態(tài)網(wǎng)站。完全靜態(tài)的解決方案感覺到性能最高;整體體驗似乎是最流暢的。這也意味著我的WordPress站點僅在構(gòu)建過程中使用。因此,它可以在我的本地主機上運行。這不是可以忽略的,因為它消除了托管成本,最重要的是,我可以跳過與安全性相關(guān)的安全性壓力的安全性和安全性。)

如果您熟悉NUXTJ,您可能會知道,全部靜態(tài)一代尚未(尚未)NUXTJ的一部分。預(yù)訂頁面試圖在導(dǎo)航時嘗試再次獲取數(shù)據(jù)。

這就是為什么我們必須以某種方式將100%的靜態(tài)生成“入侵”。在這種情況下,我們將獲取的數(shù)據(jù)的有用部分保存到每個構(gòu)建過程之前。這是可能的,尤其是Tonuxt鉤子,特別是它的構(gòu)建器掛鉤。

鉤子通常在NUXT模塊中使用:

 / *模塊/fore build.js */

const fs = require('fs')
const axios = require('axios')

const sourcePath ='http://wpgoofonts.local/wp-json/wp/v2/'
const路徑='static/allfonts.json'

Module.exports =()=> {
  / *將數(shù)據(jù)寫入文件,如果文件已經(jīng)存在 */替換文件 */
  const stordata =(data,path)=> {
    嘗試 {
      fs.writeFilesync(路徑,json.stringify(data))
    } catch(err){
      console.Error(err)
    }
  }
  異步函數(shù)getData(){    
    const fetchedTags =等待axios.get(`$ {sourcepath} tags?per_page = 500`)
      .catch(e => {console.log(e); return false})
    
  / *構(gòu)建tag_id的對象:tag_slug */
    const tags = fetchedTags.data.data.data((ACC,CUR)=> {
      acc [cur.id] = cur.slug
      返回ACC
    },{})
    
  / *我們想知道總數(shù)或頁面 */
    const mhead =等待axios.head(`$ {sourcepath} posts?per_page = 100`)
      .catch(e => {console.log(e); return false})
    const totalpages = mhead.headers ['x-wp-totalpages']

  / *讓我們獲取所有字體 */
    令字體= []
    讓i = 0
    而(i <totalpages const ports fonts.push.apply clean carter enterporary fonts="(fonts).Reduce((ACC,EL)="> {
      acc [el.slug] = {
        姓名:el.title.rendered,
        標簽:el.tags.map(i => tags [i]),
      }
      返回ACC
    },{})

  / *將字體對象保存到.json文件 */
    Stordata(字體,路徑)
  }

  / *確保在每個構(gòu)建之前都會發(fā)生這種情況 */
  this.nuxt.hook('構(gòu)建:之前',getData)
}</totalpages>
 / * nuxt.config.js */
Module.exports = {
  // ...
  buildModules:[
    ['?模塊/之前的建筑']
  ],,
// ...
}

如您所見,我們僅請求標簽列表和列表帖子。

最后的想法

在Goofonts上工作是一項長期冒險。也需要積極維護這種項目。我們定期繼續(xù)檢查Google字體中的新字體,子集或變體。我們標記新項目并更新我們的數(shù)據(jù)庫。最近,我真的很興奮地發(fā)現(xiàn)了家族的野牛Neuehas聯(lián)合。我們在鮮為人知的標本中也擁有個人最愛。

作為一個定期研討會的培訓(xùn)師,我可以觀察到真正的用戶使用Goofonts。在項目的這個階段,我們希望獲得盡可能多的反饋。我們希望Goofonts成為Web Designers的有用,方便和直觀的工具。待辦事項功能之一是以其名稱搜索字體。我們還希望增加分享書簽集并創(chuàng)建多個字體“集合”的可能性。

作為開發(fā)人員,我真的很喜歡這個項目的多學(xué)科方面。這是我第一次與WordPress Rest API合作,這是我在Vue.js中的第一個大項目,我對排版學(xué)到了很多東西。

如果可以的話,我們會做不同的事情嗎?絕對地。這是一個學(xué)習(xí)過程。另一方面,我認為我們不會更改主要工具。 WordPress和Nuxt.js的靈活性被證明是正確的選擇。從今天開始,我肯定會花一些時間來探索GraphQL,將來我可能會實施它。

我希望您發(fā)現(xiàn)一些討論的方法有用。正如我之前所說,您的反饋非常寶貴。如果您有任何疑問或言論,請在評論中告訴我!

以上是我們?nèi)绾螛擞汫oogle字體并創(chuàng)建Goofonts.com的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(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)

CSS教程,用于創(chuàng)建加載旋轉(zhuǎn)器和動畫 CSS教程,用于創(chuàng)建加載旋轉(zhuǎn)器和動畫 Jul 07, 2025 am 12:07 AM

創(chuàng)建CSS加載旋轉(zhuǎn)器的方法有三種:1.使用邊框的基本旋轉(zhuǎn)器,通過HTML和CSS實現(xiàn)簡單動畫;2.使用多個點的自定義旋轉(zhuǎn)器,通過不同延遲時間實現(xiàn)跳動效果;3.在按鈕中添加旋轉(zhuǎn)器,通過JavaScript切換類來顯示加載狀態(tài)。每種方法都強調(diào)了設(shè)計細節(jié)如顏色、大小、可訪問性和性能優(yōu)化的重要性,以提升用戶體驗。

解決CSS瀏覽器兼容性問題和前綴 解決CSS瀏覽器兼容性問題和前綴 Jul 07, 2025 am 01:44 AM

處理CSS瀏覽器兼容性和前綴問題需理解瀏覽器支持差異并合理使用廠商前綴。1.了解常見問題如Flexbox、Grid支持不一,position:sticky失效,動畫表現(xiàn)不同;2.查閱CanIuse確認特性支持情況;3.正確使用-webkit-、-moz-、-ms-、-o-等廠商前綴;4.推薦使用Autoprefixer自動添加前綴;5.安裝PostCSS并配置browserslist指定目標瀏覽器;6.構(gòu)建時自動處理兼容性;7.老項目可用Modernizr檢測特性;8.不必追求所有瀏覽器一致,確

造型與CSS不同訪問的鏈接 造型與CSS不同訪問的鏈接 Jul 11, 2025 am 03:26 AM

設(shè)置訪問過鏈接的樣式能提升用戶體驗,尤其在內(nèi)容密集型網(wǎng)站中幫助用戶更好導(dǎo)航。1.使用CSS的:visited偽類可定義已訪問鏈接樣式,如顏色變化;2.注意瀏覽器出于隱私限制僅允許修改部分屬性;3.顏色選擇應(yīng)與整體風(fēng)格協(xié)調(diào),避免突兀;4.移動端可能不顯示該效果,建議結(jié)合其他視覺提示如icon輔助標識。

使用CSS剪輯路徑創(chuàng)建自定義形狀 使用CSS剪輯路徑創(chuàng)建自定義形狀 Jul 09, 2025 am 01:29 AM

使用CSS的clip-path屬性可以裁剪元素為自定義形狀,如三角形、圓形缺口、多邊形等,無需依賴圖片或SVG。其優(yōu)勢包括:1.支持circle、ellipse、polygon等多種基本形狀;2.可響應(yīng)式調(diào)整,適配移動端;3.易于動畫化,可結(jié)合hover或JavaScript實現(xiàn)動態(tài)效果;4.不影響布局流,僅裁剪顯示區(qū)域。常見用法如圓形裁剪clip-path:circle(50pxatcenter)和三角形裁剪clip-path:polygon(50%0%,1000%,00%)。注意

顯示:內(nèi)聯(lián),顯示:塊和顯示:內(nèi)聯(lián)塊之間有什么區(qū)別? 顯示:內(nèi)聯(lián),顯示:塊和顯示:內(nèi)聯(lián)塊之間有什么區(qū)別? Jul 11, 2025 am 03:25 AM

Themaindifferencesbetweendisplay:inline,block,andinline-blockinHTML/CSSarelayoutbehavior,spaceusage,andstylingcontrol.1.Inlineelementsflowwithtext,don’tstartonnewlines,ignorewidth/height,andonlyapplyhorizo??ntalpadding/margins—idealforinlinetextstyling

CSS繪畫API是什么? CSS繪畫API是什么? Jul 04, 2025 am 02:16 AM

thecsspaintingapienablesdemimageGenerationinCsssingJavascript.1.developersCreateApaintWorkletClassWithaPaint()method.2.theyregisteritviaregisterpaint()。3.thecustompAntFunctionSthenusitySthenusedisthenusedisthenusedIncerspropertieslikeBacknockforg-image-image.thisallows.thisallowsforderforderynamecvis

如何使用CSS創(chuàng)建響應(yīng)式圖像? 如何使用CSS創(chuàng)建響應(yīng)式圖像? Jul 15, 2025 am 01:10 AM

要使用CSS創(chuàng)建響應(yīng)式圖片,主要可通過以下方法實現(xiàn):1.使用max-width:100%和height:auto讓圖片在保持比例的同時自適應(yīng)容器寬度;2.結(jié)合HTML的srcset和sizes屬性智能加載適配不同屏幕的圖片源;3.利用object-fit和object-position控制圖片裁剪與焦點展示。這些方法共同確保圖片在不同設(shè)備上清晰、美觀地呈現(xiàn)。

什么是CSS,它代表什么? 什么是CSS,它代表什么? Jul 03, 2025 am 01:48 AM

CSS,orcascadingstylesheets,isthepartofwevelvermentThatControlsawebpage’svisualAppearance,包括colors,fonts,fonts,spacing,and spacing and layout

See all articles