成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何用CSS實(shí)現(xiàn)一個(gè)搜索引擎?

開發(fā) 前端
在搜索引擎中輸入關(guān)鍵詞,搜索引擎經(jīng)過檢索,返回關(guān)鍵詞對(duì)應(yīng)的數(shù)據(jù).既然道理都一樣,那能不能用純CSS實(shí)現(xiàn)一個(gè)搜索引擎呢?本文來聊聊他是如何實(shí)現(xiàn)的。

[[423373]]

大家好,我卡頌。

在CSS中,我們通過selector(選擇器)選擇樣式片段:

  1. .title { 
  2.   color: red; 

簡(jiǎn)而言之,選擇器title對(duì)應(yīng)樣式color: red;

換個(gè)角度,我們也可以說:關(guān)鍵詞.title對(duì)應(yīng)數(shù)據(jù)color: red;

在我們生活中,還有什么東西依賴這種對(duì)應(yīng)關(guān)系呢?

一個(gè)很顯然的例子:搜索引擎。

在搜索引擎中輸入關(guān)鍵詞,搜索引擎經(jīng)過檢索,返回關(guān)鍵詞對(duì)應(yīng)的數(shù)據(jù).

既然道理都一樣,那能不能用純CSS實(shí)現(xiàn)一個(gè)搜索引擎呢?

別說,機(jī)(無)智(聊)的人還是很多的,真的有人搞了CSS實(shí)現(xiàn)的搜索引擎[1]

在該搜索引擎中輸入員工姓名,會(huì)顯示員工信息。

本文來聊聊他是如何實(shí)現(xiàn)的。

核心原理最基本的,我們需要一個(gè)搜索框,和一個(gè)顯示搜索結(jié)果的容器。

  1. <input type="search" value="" 
  2.   oninput="this.setAttribute('value', this.value)" 
  3. /> 
  4. <div id="result"></div> 
  • 注意oninput使用了一行JS代碼,這也是引擎中唯一一行JS代碼

我們希望輸入Tim,#result容器內(nèi)顯示搜索結(jié)果Tim Carry。

可以通過屬性選擇器 + 偽元素實(shí)現(xiàn):

  1. input[value="tim" i] ~ #result:before { 
  2.  content: "Tim Carry"

其中屬性選擇器中的i代表忽略內(nèi)容大小寫。

這就是本搜索引擎的核心原理,理論上只要選擇器規(guī)則越多,搜索結(jié)果就越豐富。

多個(gè)搜索結(jié)果

讓我們繼續(xù)擴(kuò)展。假設(shè)有150個(gè)員工,為他們一一建立對(duì)應(yīng)關(guān)系:

每個(gè)員工一個(gè)div:

  1. <div id="results"
  2.   <div id="result0"></div> 
  3.   <div id="result1"></div> 
  4.   <div id="result2"></div> 
  5.   […] 
  6.   <div id="result148"></div> 
  7.   <div id="result149"></div> 
  8.   <div id="result150"></div> 
  9. </div> 

每個(gè)員工一條搜索結(jié)果:

  1. #result0:before { content: "Aurora Pleguezelo" } 
  2. // […] 
  3. #result15:before { content: "Alexandre Collin" } 
  4. #result16:before { content: "Alexandre Meunier" } 
  5. #result17:before { content: "Alexandre Stanislawski" } 
  6. // […] 
  7. #result150:before { content: "Zo Asmail" } 

接下來,設(shè)定搜索規(guī)則,首先隱藏所有搜索結(jié)果:

  1. #results div { display: none } 

然后,選擇一個(gè)粒度,建立搜索規(guī)則,比如我們選擇“姓”作為粒度:

  1. input[value="alexandre" i] ~ #results #result15, 
  2. input[value="alexandre" i] ~ #results #result16, 
  3. input[value="alexandre" i] ~ #results #result17 { 
  4.  display: block 

當(dāng)輸入alexandre這個(gè)姓時(shí),對(duì)應(yīng)的結(jié)果會(huì)display: block:

  1. #result15:before { content: "Alexandre Collin" } 
  2. #result16:before { content: "Alexandre Meunier" } 
  3. #result17:before { content: "Alexandre Stanislawski" } 

更近一步,姓名可以拆的更細(xì),所以搜索的粒度可以更細(xì):

可以分別以一個(gè)字母、兩個(gè)字母、三個(gè)字母...建立對(duì)應(yīng)關(guān)系。

搜索詞高亮

為了提升體驗(yàn),我們還希望「搜索詞高亮」。

比如,輸入cle后,搜索結(jié)果姓名中cle是加粗顯示的: 

[[423375]]

分為2步實(shí)現(xiàn):

自定義字體

在UTF-8的私有區(qū)域,為每個(gè)字母定義對(duì)應(yīng)的加粗字體,比如:m在該字體中對(duì)應(yīng)\e64d。

在搜索結(jié)果中用加粗字體替換常規(guī)字母

比如,輸入mar的搜索結(jié)果應(yīng)該為:Marion Aguirre。

將結(jié)果中的Mar替換為\e64d \e661 \e672,也就是自定義字體中對(duì)應(yīng)Mar的粗體字母。

總結(jié)

按照這個(gè)設(shè)定,制約本搜索引擎的,只有作者的想象力了。

比如使用flex布局的order屬性,競(jìng)價(jià)排名不是夢(mèng):

如果你思考一陣,略帶疑惑的問:那CSS文件會(huì)不會(huì)很大?

哎,只能說,小了,格局小了。

雖然收錄150個(gè)員工的CSS文件有8MB大,但是畢竟收獲了快樂......

參考資料

[1]CSS實(shí)現(xiàn)的搜索引擎:

https://community.algolia.com/algoliasearch-client-css/demo/

 

責(zé)任編輯:姜華 來源: 魔術(shù)師卡頌
相關(guān)推薦

2017-11-27 13:39:29

Python大數(shù)據(jù)搜索引擎

2020-10-28 11:40:08

MySQL索引數(shù)據(jù)庫(kù)

2024-02-27 07:33:32

搜索引擎Rust模型

2020-12-31 09:20:51

Redis搜索引擎

2011-06-20 18:23:06

SEO

2020-12-10 11:18:47

Redis搜索引擎Java

2023-02-08 10:45:23

2009-07-30 10:40:56

搜索引擎優(yōu)化網(wǎng)站

2017-03-15 08:43:29

JavaScript模板引擎

2017-03-20 17:59:19

JavaScript模板引擎

2017-08-07 08:15:31

搜索引擎倒排

2015-08-31 10:41:58

搜索引擎Google云應(yīng)用

2020-03-20 10:14:49

搜索引擎倒排索引

2022-03-31 20:15:21

圖像搜索引擎

2022-10-08 09:13:18

搜索引擎?站

2012-09-07 13:22:21

搜索搜狗

2009-02-19 09:41:36

搜索引擎搜狐百度

2010-04-20 11:43:46

2009-09-22 16:23:52

搜索引擎

2024-11-05 16:40:24

JavaScript搜索引擎
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲福利 | 亚洲午夜精品一区二区三区他趣 | 女人毛片a毛片久久人人 | 激情婷婷| 91久久| 久久99精品久久久久久国产越南 | 中文字幕国产 | 99国产精品视频免费观看一公开 | 野狼在线社区2017入口 | 国产精品亚洲一区二区三区在线观看 | 国产欧美精品一区二区 | 成人亚洲精品 | 日韩成人在线免费观看 | 国产一区二区三区视频 | 亚洲免费一区二区 | 理伦毛片 | 一区二区三区国产视频 | 亚洲国产二区 | 精品久久av | 日韩av在线中文字幕 | 亚洲天堂免费在线 | 欧美日韩视频在线播放 | 美女视频一区 | 在线视频中文字幕 | 国产一区二区在线视频 | 欧美精品在线一区 | 欧美日韩国产一区二区三区 | 久久国产精品视频免费看 | 美美女高清毛片视频免费观看 | 国产精品激情 | 激情av在线 | 久久不射电影网 | 在线91| 毛片毛片毛片毛片毛片 | 日本久久视频 | 日韩伦理一区二区 | 日韩av在线一区 | 亚洲国产精品成人综合久久久 | 91国内精精品久久久久久婷婷 | 综合网伊人 | 亚洲欧美日韩国产综合 |