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

純CSS實現常見的UI效果

開發 前端
在用純CSS實現這些效果之前,筆者先介紹幾個常用的SCSS Mixin和一個得力武器,用它們來進行創作將會事半功倍。

 前言

切圖仔,是大多數前端用來自嘲的稱呼。相信很多人平時寫頁面的時候,大部分時間是在切圖和排圖,如此往復。這里并不是要否定切圖本身,而是在質疑:一直切圖到底對自己的功力增長有何好處?想想UI丟給你一套好看的界面,你卻只需一個img標簽,或者一個background-image屬性即可搞定了它,但日后某個地方需要調整某些外觀(顏色、文字等),你還不是會讓UI再修改之前的素材,然后替換上去完事?這樣就完全受制于UI,而無法發揮自己的能動性。

那么,如何打破這個僵局?很簡單,如果你CSS玩的夠溜,你就無需再進行那枯燥無比的切圖工作,那些界面、元素都是通過你雙手親自締造而成的,盡管創作它們可能會花一些功夫,但帶來的回報也是巨大的,你不僅能夠自由掌控你所創造出來的元素,而且能大幅提高自己的CSS功力。

在此之前

在用純CSS實現這些效果之前,筆者先介紹幾個常用的SCSS Mixin和一個得力武器,用它們來進行創作將會事半功倍

覆蓋 - cover 

  1. @mixin cover($top: 0, $left: 0, $width: 100%, $height: 100%) {  
  2.   position: absolute;  
  3.   top: $top;  
  4.   left: $left;  
  5.   width: $width;  
  6.   height: $height;  

當你想在原先元素的基礎上再“復制”一個元素,并將其覆蓋在它身上時,你將會用到它

demo地址:https://codepen.io/alphardex/pen/GRjEoBZ

嵌入 - inset 

  1. @mixin inset($inset: 0) {  
  2.   position: absolute;  
  3.   top: $inset;  
  4.   left: $inset;  
  5.   right: $inset;  
  6.   bottom: $inset;  

同樣地,這也是在原先元素基礎上復制出一個元素,只不過這個元素位置和原先的元素相同,大小會基于原先的元素而增減。

舉個例子,倘若你想創建多個半徑不同的同心圓,這個Mixin將會很有幫助

aqua.css

aqua.css是筆者開源的一個優雅的、輕量級的CSS框架。里面有很多常用的組件以及常用的樣式類,用它來寫CSS體驗將會非常爽

在codepen上,筆者準備了一個aqua.css模版,大家可以用它來進行CSS的創作

常見UI效果

條紋效果

2

首先,我們要抓住“邊框”這個詞,如何創作出一個特殊的邊框呢?如果一般的CSS屬性實現不了的話,可以考慮用偽元素來實現,思路如下:在原先的元素下方創建一個有條紋背景的偽元素,并保證原先元素覆蓋住它就行,這樣就模擬了邊框的效果。

那么如何創建條紋背景呢?這里我們將使用repeating-linear-gradient來實現它 

  1. <div class="card w-80">  
  2.   <div class="border-stripe rounded-xl">  
  3.     Lorem ipsum...  
  4.   </div>  
  5. </div>  
  1. .border-stripe {  
  2.   --stripe-width: 0.5rem;  
  3.   --stripe-deg: -45deg;  
  4.   --stripe-color-1: var(--grey-color-1);  
  5.   --stripe-offset-1: 2px;  
  6.   --stripe-color-2: var(--skin-color-2);  
  7.   --stripe-offset-2: 1rem;  
  8.   --stripe-radius: 15px;  
  9.   --stripe-inset: calc(var(--stripe-width) * -1);  
  10.   &::before {  
  11.     @include inset(var(--stripe-inset));  
  12.     content: "";  
  13.     z-index: -1;  
  14.     background: repeating-linear-gradient(  
  15.       var(--stripe-deg),  
  16.       var(--stripe-color-1) 0 var(--stripe-offset-1),  
  17.       var(--stripe-color-2) 0 var(--stripe-offset-2)  
  18.     );  
  19.     border-radius: var(--stripe-radius);  
  20.   }  

為了保證復用性,這里將其抽象成了border-stripe類,里面的值都可以通過CSS變量來動態調節

demo地址:https://codepen.io/alphardex/pen/VwKWvdG

光澤效果

一看到光澤,相信你可能會想到一個關鍵角色——徑向漸變,通過它,我們可以創作出放射狀的圖案,而光澤也恰好是放射狀的,再根據背景可以疊加的特性,光澤效果就能輕松實現了 

  1. <div class="flex flex-col space-y-4">  
  2.   <span class="btn btn-primary btn-round inline-flex">  
  3.     <span class="font-bold text-grad">Shine Button 1</span>  
  4.   </span>  
  5.   <span class="btn btn-info btn-round btn-depth inline-flex">  
  6.     <span class="font-bold">Shine Button 2</span>  
  7.   </span>  
  8. </div>  
  1. :root {  
  2.   --blue-color-1: #08123d;  
  3.   --gold-color-1: #dcb687;  
  4.   --brown-color-1: #50301f;  
  5.   --brown-color-2: #936237;  
  6.   --gold-grad-1: radial-gradient(  
  7.       circle at 50% 5%,  
  8.       #{transparentize(white, 0.5)},  
  9.       #eba262  
  10.     ),  
  11.     #eba262;  
  12.   --gold-grad-2: linear-gradient(88deg, #e7924e 0%, #f8ffee 50%, #e7924e 100%);  
  13.   --blue-grad-1: radial-gradient(  
  14.       circle at 50% 5%,  
  15.       #{transparentize(white, 0.8)},  
  16.       #091344  
  17.     ),  
  18.     #091344;  
  19.   --primary-color: var(--blue-grad-1);  
  20.   --info-color: var(--gold-grad-1);  
  21.  
  22. .btn {  
  23.   &-primary {  
  24.     border: 4px solid var(--gold-color-1);  
  25.     span {  
  26.       background-image: var(--gold-grad-2);  
  27.     }  
  28.   }  
  29.   &-info {  
  30.     color: var(--brown-color-1);  
  31.     border: none;  
  32.   }  
  33.   &-depth {  
  34.     box-shadow: 0 -5px 0 var(--brown-color-2);  
  35.   }  

demo地址:https://codepen.io/alphardex/details/vYXZNez

不規則形狀

首先,讓我們先觀察一下上圖的緞帶形狀是由哪些基本形狀組成的:中間是一個矩形,矩形下方有2個三角形,左右2側各有一個被裁切過的矩形。一提裁切,就能想到clip-path這個屬性,于是問題也就很好解決了 

  1. <div class="ribbon">  
  2.   Pure CSS Ribbon  
  3.   <div class="block"></div>  
  4.   <div class="block"></div>  
  5.   <div class="block"></div>  
  6.   <div class="block"></div>  
  7. </div>  
  1. .ribbon {  
  2.   --ribbon-color-1: var(--yellow-color-1);  
  3.   --ribbon-color-2: var(--yellow-color-2);  
  4.   --ribbon-color-3: var(--yellow-color-3);  
  5.   position: relative;  
  6.   padding: 0.5rem 1rem;  
  7.   color: white;  
  8.   background: var(--ribbon-color-1);  
  9.   .block {  
  10.     &:nth-child(1),  
  11.     &:nth-child(2) {  
  12.       position: absolute;  
  13.       bottom: -20%;  
  14.       width: 20%;  
  15.       height: 20%;  
  16.       background: var(--ribbon-color-2);  
  17.       clip-path: polygon(0 0, 100% 100%, 100% 0);  
  18.     } 
  19.     &:nth-child(1) {  
  20.       left: 0;  
  21.     }  
  22.     &:nth-child(2) {  
  23.       right: 0;  
  24.       transform: scaleX(-1); 
  25.     }  
  26.     &:nth-child(3),  
  27.     &:nth-child(4) {  
  28.       position: absolute;  
  29.       z-index: -1;  
  30.       top: 20%;  
  31.       width: 40%;  
  32.       height: 100%;  
  33.       background: var(--ribbon-color-3);  
  34.       clip-path: polygon(0 0, 25% 50%, 0 100%, 100% 100%, 100% 0);  
  35.     }  
  36.     &:nth-child(3) {  
  37.       left: -20%;  
  38.     }  
  39.     &:nth-child(4) {  
  40.       right: -20%;  
  41.       transform: scaleX(-1);  
  42.     }  
  43.   } 

注意到有一行代碼transform: scaleX(-1);,這起到了水平翻轉的作用,它可以防止再寫一遍clip-path

demo地址:https://codepen.io/alphardex/pen/OJRvaaR

浮雕效果

通過仔細觀察,你會發現這是由2個同心的元素組成的,于是自然就想到了inset這個Mixin。

創建了2個同心元素后,就要想辦法來創建它們的浮雕光澤了。這里的光澤可以用box-shadow來實現,通過疊加多重陰影,我們就能模擬出浮雕的效果了 

  1. <div class="px-6 py-2 text-xl embossed cursor-pointer" data-text="浮雕按鈕" style="--emboss-radius: 1.5rem">  
  2.   浮雕按鈕  
  3. </div>  
  1. :root {  
  2.   --red-color-1: #af2222;  
  3.   --red-color-2: #c1423e;  
  4.   --red-color-3: #c62a2a;  
  5.   --red-color-4: #951110;  
  6.   --green-color-1: #486433;  
  7.   --green-color-2: #2b361a;  
  8.   --red-grad-1: linear-gradient(  
  9.     to right,  
  10.     var(--red-color-1) 50%,  
  11.     var(--red-color-2) 0  
  12.   );  
  13.  
  14. .embossed {  
  15.   --emboss-radius: 1rem;  
  16.   --emboss-out: 6px;  
  17.   --emboss-out-minus: calc(var(--emboss-out) * -1);  
  18.   --emboss-inset: 2px;  
  19.   --emboss-inset-minus: calc(var(--emboss-inset) * -1);  
  20.   --emboss-blur: 1px;  
  21.   --emboss-bg-1: var(--red-color-3);  
  22.   --emboss-bg-2: var(--green-color-1);  
  23.   --emboss-color-1: white;  
  24.   --emboss-color-2: var(--red-color-4);  
  25.   --emboss-color-3: var(--green-color-2);  
  26.   position: relative;  
  27.   box-sizing: border-box;  
  28.   white-space: nowrap;   
  29.   &::before {  
  30.     @include inset(var(--emboss-out-minus));  
  31.     content: "";  
  32.     background: var(--emboss-bg-1);  
  33.     box-shadow: inset var(--emboss-inset-minus) var(--emboss-inset-minus)  
  34.         var(--emboss-blur) var(--emboss-color-1),  
  35.       inset var(--emboss-inset) var(--emboss-inset) var(--emboss-blur) 
  36.         var(--emboss-color-2);  
  37.     border-radius: calc(var(--emboss-radius) + var(--emboss-out));  
  38.   }  
  39.   &::after {  
  40.     @include inset;  
  41.     @include flex-center;  
  42.     content: attr(data-text);  
  43.     color: white;  
  44.     font-weight: bold;  
  45.     background: var(--emboss-bg-2);  
  46.     box-shadow: inset var(--emboss-inset) var(--emboss-inset) var(--emboss-blur)  
  47.         var(--emboss-color-1),  
  48.       inset var(--emboss-inset-minus) var(--emboss-inset-minus)  
  49.         var(--emboss-blur) var(--emboss-color-3); 
  50.     border-radius: var(--emboss-radius);  
  51.   }  

demo地址:https://codepen.io/alphardex/pen/poEEERM?editors=0110

課后作業

嘗試用純CSS來實現下圖的效果,不準切圖哦~

我的方案:https://codepen.io/alphardex/pen/gOweBBE 

 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2024-07-31 20:38:18

2023-10-08 20:32:59

CSS定義Loading

2022-09-15 10:30:06

CSS

2023-11-01 08:33:45

CSS動畫效果

2021-10-19 22:23:47

CSSBeautiful按鈕

2024-08-29 08:13:58

2023-12-04 08:06:41

CSS文字效果

2021-05-10 10:18:54

工具代碼開發

2017-04-27 14:05:59

CSS動畫前端

2022-02-21 07:02:16

CSSbeautiful按鈕

2013-04-08 14:07:28

CSS

2022-08-10 16:08:38

鴻蒙CSS

2020-11-04 13:55:06

CSS密室逃脫前端

2022-10-10 08:39:19

CSS前端

2017-05-03 11:30:20

CSS3小黃人動畫

2021-01-25 06:37:06

Css前端CSS 特效

2022-08-29 17:39:53

應用開發css動畫

2022-12-12 11:11:05

2010-09-13 14:09:35

CSS文字

2015-04-24 10:05:15

HTML+CSS阿童木頭像
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久毛片 | 波多野结衣一区二区三区在线观看 | 亚洲欧美日韩精品久久亚洲区 | 奇色影视 | 国产日韩一区二区 | av午夜激情 | 日韩1区| 欧美一区二区在线 | 91精品国产综合久久小仙女图片 | 欧美日韩高清在线一区 | 91麻豆久久久 | 中文字字幕一区二区三区四区五区 | 亚洲在线免费观看 | 免费亚洲成人 | 久久久久久综合 | 中文字幕精品一区 | 国产一区二区三区四区三区四 | 日本精品在线播放 | 91久久精品国产 | 久久婷婷国产麻豆91 | 国产91丝袜在线播放 | 天天色天天射天天干 | 国产综合精品一区二区三区 | 久久久久无码国产精品一区 | 欧美一级免费看 | 日韩一级电影免费观看 | 成人免费网站 | 国产三区精品 | 免费观看日韩精品 | 91精品国产一区二区三区 | 羞羞视频网站免费观看 | 一本一道久久a久久精品综合 | 精品国产一区二区三区日日嗨 | 黄色一级毛片 | 亚洲看片网站 | 午夜爽爽爽男女免费观看 | 影视一区 | 国产福利视频网站 | 国产婷婷色一区二区三区 | 日本二区在线观看 | 91免费小视频 |