【譯】必備的22個CSS小技巧

大家好,今天我們將會介紹一些非常實用的CSS小技巧,讓我們開始吧!

混合模式

之前Firefox和Safari瀏覽器已經開始支持類似Photoshop的混合模式,但是在Chrome和Opera瀏覽器中需要添加前綴。舉個栗子:

1//?你也可以嘗試不同的樣式

2

3.blend?{

4background:?#fff;

5}

6.blend?img?{

7mix-blend-mode:?darken;

8}

體驗地址:http://ilyashubin.github.io/FilterBlend/

漸變邊框

現在,你甚至可以在邊框中使用漸變。 要使用漸變邊框非常簡單,只需要設置一個更低z-index的偽元素即可:

1.box?{

2margin:80px30px;

3width:200px;

4height:200px;

5position:?relative;

6background:?#fff;

7float:?left;

8}

9.box:before?{

10content:'';

11z-index:-1;

12position:?absolute;

13width:220px;

14height:220px;

15top:-10px;

16left:-10px;

17background-image:?linear-gradient(90deg,?yellow,?gold);

18}

具體的例子可以看這里(https://jsfiddle.net/4qypuono/),或者看這里(https://codepen.io/anon/pen/jEOGJe)使用的是background-clip和background-origin屬性。

在不久的將來,也許所有瀏覽器都將支持border-image屬性,最終的代碼會和下面一樣:

1.box?{

2border-image:?linear-gradient(to?bottom,?#0000000%,?#FFFFFF100%);

3border-image-slice:1;/*?set?internal?offset?*/

4}

z-index的過渡

也許你不知道z-index同樣支持過渡!在過渡的每一步中,它的值都不發生改變,所以你以為它不支持過渡——但其實它支持。

舉個栗子→(http://zomigi.com/demo/z-index_transition.html)

currentColor

我們可以使用這個方法來偵測當前的顏色,以避免經常地重復定義它。

順便給大家推薦一個裙,它的前面是 537,中間是631,最后就是 707。想要學習前端的小伙伴可以加入我們一起學習,互相幫助。群里每天晚上都有大神免費直播上課,如果不是想學習的小伙伴就不要加啦。

?這個方法在使用SVG圖標的時候非常有用,因為它們的顏色由其父元素決定。通常我們是這么做的:

1.button?{

2color:?black;

3}

4.button:hover?{

5color:?red;

6}

7.button:active?{

8color:?green;

9}

10

11.button?svg?{

12fill:?black;

13}

14.button:hover?svg?{

15fill:?red;

16}

17.button:active?svg?{

18fill:?green;

19}

但我們可以使用currentColor這么做:

1svg?{

2fill:?currentColor;

3}

4

5.button?{

6color:?black;

7border:1px?solid?currentColor;

8}

9.button:hover?{

10color:?red;

11}

12.button:active?{

13color:?green;

14}

附上其它帶有偽元素的例子:

1a?{

2color:?#000;

3}

4a:hover?{

5color:?#333;

6}

7a:active?{

8color:?#666;

9}

10

11a:after,

12a:hover:after,

13a:active:after?{

14background:?currentColor;

15...

16}

Object Fit

你是否還記得為了解決一些問題而給一幅背景圖設置background-size屬性的時刻呢?

現在你可以使用object-fit屬性啦,webkit瀏覽器都支持它,Firefox也將在近期予以支持。

1.image__contain?{

2object-fit:?contain;

3}

4.image__fill?{

5object-fit:?fill;

6}

7.image__cover?{

8object-fit:?cover;

9}

10.image__scale-down?{

11object-fit:?scale-down;

12}

舉個栗子→(https://codepen.io/CSSKing/pen/XJEZeG)

單選框和復選框的樣式

讓我們一起不使用圖片來設置復選框的樣式:

1

2

3Checkbox

1

2input[type=checkbox]?{display:?none;}

3

4input[type=checkbox]?+?label:before?{

5content:"";

6border:1px?solid?#000;

7font-size:11px;

8line-height:10px;

9margin:05px00;

10height:10px;

11width:10px;

12text-align:?center;

13vertical-align:?middle;

14}

15

16input[type=checkbox]:checked?+?label:before?{

17content:"\2713";

18}

正如你所看見的,我們隱藏了原有的復選框,改為使用偽元素和偽類:checked(IE9+)來表現它。

當它被選中時,一個設置在content里的Unicode編碼的字符將會顯示出來。

值得注意的是,Unicode編碼在CSS和HTML中的寫法是不一樣的。在CSS中它是一個以反斜杠為開始的十六進制數,而在HTML中它是十進制的,比如✓。 接著為我們的復選框添加一些動畫效果:

1

2input[type=checkbox]?+?label:before?{

3content:"\2713";

4color:?transparent;

5transition:?color?ease.3s;

6}

7input[type=checkbox]:checked?+?label:before?{

8color:?#000;

9}

10

11

12input[type=radio]?+?label:before?{

13content:"\26AB";

14border:1px?solid?#000;

15border-radius:50%;

16font-size:0;

17transition:?font-size?ease.3s;

18}

19input[type=radio]:checked?+?label:before?{

20font-size:10px;

21}

這里(https://unicode-table.com/en/)是所有的Unicode編碼,以及可以在這里(https://codepen.io/anon/pen/CdzwB)進行體驗。

CSS中的計數器

總所周知CSS中是可以使用計數器的:

1

2

3

  • a
  • 4

  • b
  • 5

  • c
  • 6

    1

    2.list?{

    3counter-reset:?i;//reset?conunter

    4}

    5.list?>?li?{

    6counter-increment:?i;//counter?ID

    7}

    8.list?li:after?{

    9content:"["counter(i)"]";//print?the?result

    10}

    我們定義了一個ID在counter-reset屬性中作為初始值(默認為0)。你可以設置另一個值在counter-increment屬性中作為每一步的遞增值。

    順便給大家推薦一個裙,它的前面是 537,中間是631,最后就是 707。想要學習前端的小伙伴可以加入我們一起學習,互相幫助。群里每天晚上都有大神免費直播上課,如果不是想學習的小伙伴就不要加啦。

    高級CSS計數器

    你可以計算出有多少個復選框被用戶勾選了:

    1

    2

    3C

    4C++

    5C#

    6Java

    7JavaScript

    8PHP

    9Python

    10Ruby

    11

    12

    13Total?selected:

    14

    1

    2.languages?{

    3counter-reset:?characters;

    4}

    5input:checked?{

    6counter-increment:?characters;

    7}

    8.total:after?{

    9content:?counter(characters);

    10}

    你也可以制作一個簡單的計算器:

    1

    2

    31

    42

    53

    64

    75

    8100

    9

    10

    11Sum

    12

    1

    2.numbers?{

    3counter-reset:?sum;

    4}

    5

    6#one:checked?{?counter-increment:?sum1;?}

    7#two:checked?{?counter-increment:?sum2;?}

    8#three:checked?{?counter-increment:?sum3;?}

    9#four:checked?{?counter-increment:?sum4;?}

    10#five:checked?{?counter-increment:?sum5;?}

    11#one-hundred:checked?{?counter-increment:?sum100;?}

    12

    13.sum::after?{

    14content:'=?'counter(sum);

    15}

    它同樣得以運行,請看具體的DEMO(https://codepen.io/CSSKing/pen/vEeMey)和文章(https://codersblock.com/blog/fun-times-with-css-counters/)。

    不使用圖片的菜單圖標

    你記得你有多么經常被迫需要一個“漢堡”圖標嗎?

    這里有至少3個方式去實現它:

    1、 Shadows

    1.shadow-icon?{

    2position:?relative;

    3}

    4.shadow-icon:after?{

    5content:"";

    6position:?absolute;

    7left:0;

    8top:-50px;

    9height:100%;

    10width:100%;

    11box-shadow:05px0#000,015px0#fff,025px0#000,035px0#fff,045px0#000;

    12}

    2、 Gradient

    1.gradient-icon?{

    2background:?linear-gradient(to?bottom,?#0000%,?#00020%,?transparent20%,?transparent40%,?#00040%,?#00060%,?transparent60%,?transparent80%,?#00080%,?#000100%);

    3}

    3、 UTF-8 你可以直接使用標準符號:? (Unicode: U+2630, HTML: ?)。你也可以像其他元素那樣靈活設置它的顏色或大小。

    順便給大家推薦一個裙,它的前面是 537,中間是631,最后就是 707。想要學習前端的小伙伴可以加入我們一起學習,互相幫助。群里每天晚上都有大神免費直播上課,如果不是想學習的小伙伴就不要加啦。

    ?你也可以使用SVG,字體圖標,或者通過偽元素設置的border邊框。

    @Supports

    這是一個新的叫做supports的CSS表達式。顧名思義,它可以檢測某些設定是否被瀏覽器所支持,并非所有的瀏覽器都支持它,但是你仍然可以使用它作為基本的檢測手段:

    1@supports?(display:?flex)?{

    2div?{display:?flex;?}

    3}

    4

    5/*You?can?check?prefixes*/

    6@supports?(display:?-webkit-flex)?or?(display:?-moz-flex)?or?(display:?flex)?{

    7section?{

    8display:?-webkit-flex;

    9display:?-moz-flex;

    10display:?flex;

    11float:?none;

    12}

    13}

    visibility: visible

    在你看來,把一個設置為visibility: visible的元素放在一個設置為visibility: hidden的元素里面,會發生什么?

    1.hidden?{

    2visibility:?hidden;

    3}

    4.hidden?.visible?{

    5visibility:?visible;

    6}

    你可能會認為兩個元素都不顯示——然而事實上整個父元素都被隱藏了,而子元素不會。請看DEMO(https://codepen.io/CSSKing/pen/lxBfk)。

    position: sticky

    我們發現了一個新的特性,你可以新建一個sticky屬性的元素。它的運行效果和fixed相同,但不會擋住任何元素。你最好看看例子?只有Mozilla和Safari瀏覽器支持這一屬性,但你也可以像下面那樣使用它:

    1.sticky?{

    2position:static;

    3position:?sticky;

    4top:0px;

    5}

    我們將會在支持的瀏覽器中得到一個sticky屬性的元素,而在不支持的瀏覽器中它將會是一個普通的元素。這在你需要建立一個不可替代的,可以移動的元素的移動端頁面的時候非常實用。

    新的尺寸單位

    不久之前,一些新的用以描述不同元素大小的尺寸單位問世了,它們是:

    vw (viewport width) - 瀏覽器窗口寬度的1%。

    vh (viewport height) - 同上,只不過用來描述高度。

    vmin and vmax 設置介于vh和vw之間的最大最小值。

    有趣的是,幾乎所有的現代瀏覽器都能很好地支持它們,所以你可以放心地使用。 為什么我們需要這些新的單位?因為它們可以讓不同的尺寸更容易被定義,你不要為父元素指定任何的百分比或者別的什么,請看例子:

    1.some-text?{

    2font-size:100vh;

    3line-height:100vh;

    4}

    或者你可以設置一個漂亮的彈出框在屏幕中間:

    1.blackSquare?{

    2background:?black;

    3position:?fixed;

    4height:50vh;

    5width:50vw;

    6left:25vw;

    7top:25vh;

    8}

    這看起來酷斃了,看看在codepen的例子(https://codepen.io/CrocoDillon/pen/fBJxu)

    ?但是目前仍然有一些關于這些新單位的不足之處:

    IE9應該用vm而不是vmin。

    iOS7在使用vh的時候可能會有bug。

    vmax至今并未得到全面的支持。

    文字修飾

    我們可以通過幾行代碼修改文字被選中時的效果:

    1*::selection?{

    2color:?#fff;

    3background:?#000;

    4}

    5*::-moz-selection?{

    6/*Only?Firefox?still?needs?a?prefix*/

    7color:?#fff;

    8background:?#000;

    9}

    你不僅可以定義文字被選中時的顏色,還能定義陰影或者背景顏色。

    順便給大家推薦一個裙,它的前面是 537,中間是631,最后就是 707。想要學習前端的小伙伴可以加入我們一起學習,互相幫助。群里每天晚上都有大神免費直播上課,如果不是想學習的小伙伴就不要加啦。

    觸摸屏當中的元素滾動

    如果你需要在觸摸屏當中為一些元素設置內滾動,那么你不僅需要overflow: scroll / auto,還需要-webkit-overflow-scrolling: touch;實際上,移動端瀏覽器在某些時候并不能正確執行overflow: scroll / auto,它可能會滾動整個頁面而不是你想要的那部分。-webkit-overflow-scrolling解決了這個問題,你可以在你的實際項目中體驗一下。

    使用硬件加速

    有時候動畫可能會導致用戶的電腦卡頓,你可以在特定元素中使用硬件加速來避免這個問題:

    1.block?{

    2transform:?translateZ(0);

    3}

    你并不會察覺有什么不同,但瀏覽器會為這個元素進行3D硬件加速,在will-change這個特殊屬性未被全面支持之前,這個方法還是很有用的。

    Unicode Classes

    你可以用Unicode符號明名class:

    1.??{

    2...

    3}

    4.??{

    5...

    6}

    7.??{

    8...

    9}

    10.★?{

    11...

    12}

    13.??{

    14...

    15}

    但這其實是用來搞笑的,千萬不要在大型項目中使用,因為不是所有的電腦都支持Unicode符號。

    垂直方向的百分比邊距

    實際上垂直方向的排列計算是基于父元素的寬度而不是高度。定義兩個元素:

    1

    2

    3

    4

    5

    1

    2

    3.parent?{

    4height:400px;

    5width:200px;

    6}

    7.child?{

    8height:50%;

    9padding-top:25%;

    10padding-bottom:25%;

    11width:100%;

    12}

    理論上,子元素的高會是父元素高的一半,但是看看我們實際得到的情況:

    記住,子元素的百分比是相對于父元素的寬度。

    火狐瀏覽器的按鈕邊距

    Firefox用它自己的方式去計算按鈕的邊距。這聽起來有點奇怪,但它會自動地添加一些邊距進去:

    可以用以下方法來修復這個問題:

    1button::-moz-focus-inner,

    2input[type="reset"]::-moz-focus-inner,

    3input[type="button"]::-moz-focus-inner,

    4input[type="submit"]::-moz-focus-inner?{

    5border:?none;

    6padding:0;

    7}

    Color + Border =Border-Color

    很少人知道,定義了一個元素的文字顏色,意味著這個元素的邊框顏色也被定義了:

    1input[type="text"]?{

    2color:?red;

    3border:1px?solid;

    4}

    古老瀏覽器的彩蛋

    如果你仍需要適配IE7或者類似的古老瀏覽器,你可以在定義hack的時候使用笑臉符號,像這樣:

    1body?{

    2:)?background:?pink;

    3}

    是不是很有趣?

    以上就是你所必備的22個CSS小技巧,感謝閱讀。

    最后編輯于
    ?著作權歸作者所有,轉載或內容合作請聯系作者
    • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
      沈念sama閱讀 227,533評論 6 531
    • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
      沈念sama閱讀 98,055評論 3 414
    • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
      開封第一講書人閱讀 175,365評論 0 373
    • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
      開封第一講書人閱讀 62,561評論 1 307
    • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
      茶點故事閱讀 71,346評論 6 404
    • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
      開封第一講書人閱讀 54,889評論 1 321
    • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
      沈念sama閱讀 42,978評論 3 439
    • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
      開封第一講書人閱讀 42,118評論 0 286
    • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
      沈念sama閱讀 48,637評論 1 333
    • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
      茶點故事閱讀 40,558評論 3 354
    • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
      茶點故事閱讀 42,739評論 1 369
    • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
      沈念sama閱讀 38,246評論 5 355
    • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
      茶點故事閱讀 43,980評論 3 346
    • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
      開封第一講書人閱讀 34,362評論 0 25
    • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
      開封第一講書人閱讀 35,619評論 1 280
    • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
      沈念sama閱讀 51,347評論 3 390
    • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
      茶點故事閱讀 47,702評論 2 370