日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

前端不为人知的一面--前端冷知识集锦

發布時間:2025/3/20 HTML 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前端不为人知的一面--前端冷知识集锦 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://www.cnblogs.com/Wayou/p/things_you_dont_know_about_frontend.html

前端已經被玩兒壞了!像console.log()可以向控制臺輸出圖片等炫酷的玩意已經不是什么新聞了,像用||操作符給變量賦默認值也是人盡皆知的舊聞了,今天看到Quora上一個帖子,瞬間又GET了好多前端技能,一些屬于技巧,一些則是聞所未聞的冷知識,一時間還消化不過來。現分類整理出來分享給大家,也補充了一些平時的積累和擴展了一些內容。

HTML篇

瀏覽器地址欄運行JavaScript代碼

這個很多人應該還是知道的,在瀏覽器地址欄可以直接運行JavaScript代碼,做法是以javascript:開頭后跟要執行的語句。比如:

javascript:alert('hello from address bar :)');

將以上代碼貼到瀏覽器地址欄回車后alert正常執行,一個彈窗神現。

需要注意的是如果是通過copy paste代碼到瀏覽器地址欄的話,IE及Chrome會自動去掉代碼開頭的javascript:,所以需要手動添加起來才能正確執行,而Firefox中雖然不會自動去掉,但它根本就不支持在地址欄運行JS代碼,sigh~

這一技術在我的另一篇博文《讓Chrome 接管郵件連接,收發郵件更方便了》中有使用到,利用在瀏覽器地址欄中執行JavaScript代碼將Gmail設置為系統的郵件接管程序。

瀏覽器地址欄運行HTML代碼

如果說上面那條小秘密知道的人還算多的話,這條秘笈知道的人就要少一些了,在非IE內核的瀏覽器地址欄可以直接運行HTML代碼!

比如在地址欄輸入以下代碼然后回車運行,會出現指定的頁面內容。

data:text/html,<h1>Hello, world!</h1>

?

?

你造么,可以把瀏覽器當編輯器

還是瀏覽器地址欄上做文章,將以下代碼貼到地址欄運行后瀏覽器變成了一個原始而簡單的編輯器,與Windows自帶的notepad一樣,吼吼。

data:text/html, <html contenteditable>

?

?

歸根結底多虧了HTML5中新加的contenteditable屬性,當元素指定了該屬性后,元素的內容成為可編輯狀態。

推而廣之,將以下代碼放到console執行后,整個頁面將變得可編輯,隨意踐踏吧~

document.body.contentEditable='true';

?

?

利用a標簽自動解析URL

很多時候我們有從一個URL中提取域名,查詢關鍵字,變量參數值等的需要,而萬萬沒想到可以讓瀏覽器方便地幫我們完成這一任務而不用我們寫正則去抓取。方法就在JS代碼里先創建一個a標簽然后將需要解析的URL賦值給a的href屬性,然后就得到了一切我們想要的了。

var a = document.createElement('a');a.href = 'http://www.cnblogs.com/wayou/p/';console.log(a.host);

?

?

利用這一原理,稍微擴展一下,就得到了一個更加健壯的解析URL各部分的通用方法了。下面代碼來自James的博客。

function parseURL(url) {var a = document.createElement('a');a.href = url;return {source: url,protocol: a.protocol.replace(':',''),host: a.hostname,port: a.port,query: a.search,params: (function(){var ret = {},seg = a.search.replace(/^\?/,'').split('&'),len = seg.length, i = 0, s;for (;i<len;i++) {if (!seg[i]) { continue; }s = seg[i].split('=');ret[s[0]] = s[1];}return ret;})(),file: (a.pathname.match(/\/([^\/?#]+)$/i) || [,''])[1],hash: a.hash.replace('#',''),path: a.pathname.replace(/^([^\/])/,'/$1'),relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [,''])[1],segments: a.pathname.replace(/^\//,'').split('/')}; }

頁面擁有ID的元素會創建全局變量

在一張HTML頁面中,所有設置了ID屬性的元素會在JavaScript的執行環境中創建對應的全局變量,這意味著document.getElementByID像人的闌尾一樣顯得多余了。但實際項目中最好老老實實該怎么寫就怎么寫,畢竟常規代碼出亂子的機會要小得多。

<div id="sample"></div> <script type="text/javascript">console.log(sample); </script>

?

?

加載CDN文件時,可以省掉HTTP標識

現在很流行的CDN即從專門的服務器加載一些通用的JS和CSS文件,出于安全考慮有的CDN服務器使用HTTPS方式連接,而有的是傳統的HTTP,其實我們在使用時可以忽略掉這個,將它從URL中省去。

<script src="//domain.com/path/to/script.js"></script>

這一點在之前一篇譯文博客《jQuery編程最佳實踐》中也有提到。

利用script標簽保存任意信息

將script標簽設置為type='text'然后可以在里面保存任意信息,之后可以在JavaScript代碼中很方便地獲取。

<script type="text" id="template"><h1>This won't display</h1> </script> var text = document.getElementById('template').innerHTML

關于CSS的惡作劇

相信你看完以下代碼后能夠預料到會出現什么效果。

*{cursor: none!important; }

?

?

簡單的文字模糊效果

以下兩行簡單的CSS3代碼可達到將文字模糊化處理的目的,出來的效果有點像使用PS的濾鏡,so cool!

p {color: transparent;text-shadow: #111 0 0 5px; }

?

?

有好多次博主都有這樣的需求,垂直居中顯示某個DIV,我們知道CSS中天然有水平居中的樣式text-align:center。唯獨這個垂直居中無解。

當然你可以將容器設置為display:table,然后將子元素也就是要垂直居中顯示的元素設置為display:table-cell,然后加上vertical-align:middle來實現,但此種實現往往會因為display:table而破壞整體布局,那還不如直接用table標簽了呢。

下面這個樣式利用了translate來巧妙實現了垂直居中樣式,需IE9+。

.center-vertical {position: relative;top: 50%;transform: translateY(-50%); }

相比而言,水平居中要簡單得多,像上面提到的text-align:center,經常用到的技巧還有margin:0 auto。但對于margin大法也只在子元素寬度小于容器寬度時管用,當子元素寬度大于容器寬度時此法失效。

如法炮制,利用left和transform同樣可實現水平居中,不過意義不大,畢竟text-align和margin差不多滿足需求了。

.center-horizontal {position: relative;left: 50%;transform: translateX(-50%); }

利用重復指定box-shadow來達到多個邊框的效果

在線演示? ??

/*CSS Border with Box-Shadow Example*/ div {box-shadow: 0 0 0 6px rgba(0, 0, 0, 0.2), 0 0 0 12px rgba(0, 0, 0, 0.2), 0 0 0 18px rgba(0, 0, 0, 0.2), 0 0 0 24px rgba(0, 0, 0, 0.2);height: 200px;margin: 50px auto;width: 400px }

?

?

實時編輯CSS

通過設置style標簽的display:block樣式可以讓頁面的style標簽顯示出來,并且加上contentEditable屬性后可以讓樣式成為可編輯狀態,更改后的樣式效果也是實時更新呈現的。此技巧在IE下無效。擁有此技能者,逆天也!

<!DOCTYPE html> <html><body><style style="display:block" contentEditable>body { color: blue }</style></body> </html>

?

?

創建長寬比固定的元素

通過設置父級窗口的padding-bottom可以達到讓容器保持一定的長度比的目的,這在響應式頁面設計中比較有用,能夠保持元素不變形。

<div style="width: 100%; position: relative; padding-bottom: 20%;"><div style="position: absolute; left: 0; top: 0; right: 0; bottom: 0;background-color:yellow;">this content will have a constant aspect ratio that varies based on the width.</div> </div>

?

?

CSS中也可以做簡單運算

通過CSS中的calc方法可以進行一些簡單的運算,從而達到動態指定元素樣式的目的。

.container{background-position: calc(100% - 50px) calc(100% - 20px); }

JavaScript篇

生成隨機字符串

利用Math.random和toString生成隨機字符串,來自前一陣子看到的一篇博文。這里的技巧是利用了toString方法可以接收一個基數作為參數的原理,這個基數從2到36封頂。如果不指定,默認基數是10進制。略屌! ? ?

function generateRandomAlphaNum(len) {var rdmString = "";for (; rdmString.length < len; rdmString += Math.random().toString(36).substr(2));return rdmString.substr(0, len); }

?

?

整數的操作

JavaScript中是沒有整型概念的,但利用好位操作符可以輕松處理,同時獲得效率上的提升。

|0和~~是很好的一個例子,使用這兩者可以將浮點轉成整型且效率方面要比同類的parseInt,Math.round 要快。在處理像素及動畫位移等效果的時候會很有用。性能比較見此。

var foo = (12.4 / 4.13) | 0;//結果為3 var bar = ~~(12.4 / 4.13);//結果為3

?順便說句,!!將一個值方便快速轉化為布爾值 !!window===true 。

重寫原生瀏覽器方法以實現新功能

下載的代碼通過重寫瀏覽器的alert讓它可以記錄彈窗的次數。

(function() {var oldAlert = window.alert,count = 0;window.alert = function(a) {count++;oldAlert(a + "\n You've called alert " + count + " times now. Stop, it's evil!");}; })(); alert("Hello World");

關于console的惡作劇

關于重寫原生方法,這里有個惡作劇大家可以拿去尋開心。Chrome的console.log是支持對文字添加樣式的,甚至log圖片都可以。于是可以重寫掉默認的log方法,把將要log的文字應用到CSS的模糊效果,這樣當有人試圖調用console.log()的時候,出來的是模糊不清的文字。好冷,我表示沒有笑。

是從這篇G+帖子的評論里看到的。使用之后的效果是再次調用log會輸出字跡模糊不清的文字。

var _log = console.log; console.log = function() {_log.call(console, '%c' + [].slice.call(arguments).join(' '), 'color:transparent;text-shadow:0 0 2px rgba(0,0,0,.5);'); };

?

?

不聲明第三個變量的值交換

我們都知道交換兩個變量值的常規做法,那就是聲明一個中間變量來暫存。但鮮有人去挑戰不聲明中間變量的情況,下面的代碼給出了這種實現。蠻有創意 的。

var a=1,b=2;a=[b,b=a][0];

?

?

萬物皆對象

在JavaScript的世界,萬物皆對象。除了null和undefined,其他基本類型數字,字符串和布爾值都有對應有包裝對象。對象的一個特征是你可以在它身上直接調用方法。對于數字基本類型,當試圖在其身上調用toString方法會失敗,但用括號括起來后再調用就不會失敗了,內部實現是用相應的包裝對象將基本類型轉為對象。所以(1).toString()相當于new Number(1).toString()。因此,你的確可以把基本類型數字,字符串,布爾等當對象使用的,只是注意語法要得體。

同時我們注意到,JavaScript中數字是不分浮點和整形的,所有數字其實均是浮點類型,只是把小數點省略了而以,比如你看到的1可以寫成1.,這也就是為什么當你試圖1.toString()時會報錯,所以正確的寫法應該是這樣:1..toString(),或者如上面所述加上括號,這里括號的作用是糾正JS解析器,不要把1后面的點當成小數點。內部實現如上面所述,是將1.用包裝對象轉成對象再調用方法。

If語句的變形

當你需要寫一個if語句的時候,不妨嘗試另一種更簡便的方法,用JavaScript中的邏輯操作符來代替。

var day=(new Date).getDay()===0; //傳統if語句 if (day) {alert('Today is Sunday!'); }; //運用邏輯與代替if day&&alert('Today is Sunday!');

比如上面的代碼,首先得到今天的日期,如果是星期天,則彈窗,否則什么也不做。我們知道邏輯操作存在短路的情況,對于邏輯與表達式,只有兩者都真才結果才為真,如果前面的day變量被判斷為假了,那么對于整個與表達式來說結果就是假,所以就不會繼續去執行后面的alert了,如果前面day為真,則還要繼續執行后面的代碼來確定整個表達式的真假。利用這點達到了if的效果。

對于傳統的if語句,如果執行體代碼超過了1 條語句,則需要加花括號,而利用逗號表達式,可以執行任意條代碼而不用加花括號。

if(conditoin) alert(1),alert(2),console.log(3);

上面if語句中,如果條件成立則執行三個操作,但我們不需要用花括號將這三句代碼括起來。當然,這是不推薦的,這里是冷知識課堂:)

禁止別人以iframe加載你的頁面

下面的代碼已經不言自明了,沒什么好多說的。

if (window.location != window.parent.location) window.parent.location = window.location;

console.table

Chrome專屬,IE繞道的console方法。可以將JavaScript關聯數組以表格形式輸出到瀏覽器console,效果很驚贊,界面很美觀。

//采購情況 var teams_data = [{'品名': '杜雷斯', '數量': 4}, {'品名': '岡本', '數量': 3}]; console.table(teams_data);

?

?

REFERENCE

What are the most interesting HTML/JS/DOM/CSS hacks that most web developers don't know about?

45 Useful JavaScript Tips, Tricks and Best Practices

10 Small Things You May Not Know About Javascript

轉載于:https://www.cnblogs.com/wangwenfei/p/qianduan.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的前端不为人知的一面--前端冷知识集锦的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕欲求不满 | 欧美精选一区二区 | 亚洲欧美国产毛片在线 | 91丝袜在线观看 | 六月婷婷七月丁香 | 欧美性大战xxxxx久久久 | 欧美亚洲一区二区三区四区 | 这里有精品视频 | 免费福利av | 午夜黄色在线 | 麻豆免费观看视频 | 国产一二精品 | 91成人在线免费观看 | av网站入口 | 成人动漫亚洲 | xxxxxx日本| 中文在线字幕 | 精品视频一区二区在线观看 | 韩国中文字幕在线观看 | www.一起操 | 变态视屏| 美女又爽又黄免费 | 国产精品视频大全 | 亚洲精品无码久久 | 99精品免费观看 | 色资源在线| 亚洲av成人无码一区二区三区在线观看 | 四虎免费看黄 | 欧美成人午夜电影 | 亚洲av无码一区二区三区在线观看 | 欧美性猛交xxxx偷拍洗澡 | 99国产精品一区 | jizz在亚洲| 色吧五月天| 欧美精品在线免费 | 欧美专区在线播放 | 欧美专区在线播放 | 91亚洲国产成人精品一区二区三 | 天堂av网手机版 | 一区二区三区久久 | 在线看一区二区 | 玖草视频在线观看 | 亚洲第一偷拍 | 黄色a级片视频 | 成人免费视频免费观看 | 国产欧美日韩一区二区三区 | 激情内射亚洲一区二区三区爱妻 | 久久久18 | 国产精品久久久无码一区 | 亚洲天堂伊人 | 污污软件在线观看 | 日韩亚洲欧美中文字幕 | 美女被草网站 | 日韩中文字幕在线看 | 在线观看免费视频 | 91亚色视频在线观看 | 黄色成人免费视频 | 99av视频| 五月天最新网址 | 伊人久久大香线蕉综合75 | 婷婷五月综合缴情在线视频 | 日韩久久久久久久 | 久视频在线 | 国产精品区一区二区三 | 国产精品一区麻豆 | 欧美精品99 | 哪里可以免费看av | 丁香花在线影院观看在线播放 | 日韩人妻精品一区二区三区 | 玖玖久久| 欧美黄色一级网站 | 精品国产乱码久久久久久影片 | 国产精品传媒麻豆hd | 操日本老妇 | 亚洲综合色一区 | 日韩精品在线观看中文字幕 | 久久久高清免费视频 | 99re视频在线 | 夜夜艹| 九色精品视频 | 你懂的在线观看网址 | 在线精品一区二区三区 | 国产黄色激情视频 | 亚洲av成人精品毛片 | 亚洲天堂av在线播放 | 欧美激情一区二区三区免费观看 | 日韩大片在线免费观看 | jizzjizzjizz亚洲女| 91jk制服白丝超短裙大长腿 | 少妇xxxx69| 超在线视频 | 一区二区啪啪啪 | 91亚洲视频在线观看 | 三级在线看中文字幕完整版 | 久久逼逼| 亚洲涩涩 | 性一交一乱一区二区洋洋av | 欧美日韩性生活 | 在线观看www. |