日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
純CSS實(shí)現(xiàn)常見的UI效果

 前言

高明網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,高明網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為高明上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的高明做網(wǎng)站的公司定做!

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

那么,如何打破這個(gè)僵局?很簡(jiǎn)單,如果你CSS玩的夠溜,你就無(wú)需再進(jìn)行那枯燥無(wú)比的切圖工作,那些界面、元素都是通過(guò)你雙手親自締造而成的,盡管創(chuàng)作它們可能會(huì)花一些功夫,但帶來(lái)的回報(bào)也是巨大的,你不僅能夠自由掌控你所創(chuàng)造出來(lái)的元素,而且能大幅提高自己的CSS功力。

在此之前

在用純CSS實(shí)現(xiàn)這些效果之前,筆者先介紹幾個(gè)常用的SCSS Mixin和一個(gè)得力武器,用它們來(lái)進(jìn)行創(chuàng)作將會(huì)事半功倍

覆蓋 - 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;  

當(dāng)你想在原先元素的基礎(chǔ)上再“復(fù)制”一個(gè)元素,并將其覆蓋在它身上時(shí),你將會(huì)用到它

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;  

同樣地,這也是在原先元素基礎(chǔ)上復(fù)制出一個(gè)元素,只不過(guò)這個(gè)元素位置和原先的元素相同,大小會(huì)基于原先的元素而增減。

舉個(gè)例子,倘若你想創(chuàng)建多個(gè)半徑不同的同心圓,這個(gè)Mixin將會(huì)很有幫助

aqua.css

aqua.css是筆者開源的一個(gè)優(yōu)雅的、輕量級(jí)的CSS框架。里面有很多常用的組件以及常用的樣式類,用它來(lái)寫CSS體驗(yàn)將會(huì)非常爽

在codepen上,筆者準(zhǔn)備了一個(gè)aqua.css模版,大家可以用它來(lái)進(jìn)行CSS的創(chuàng)作

常見UI效果

條紋效果

2

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

那么如何創(chuàng)建條紋背景呢?這里我們將使用repeating-linear-gradient來(lái)實(shí)現(xiàn)它 

 
 
 
 
  1.   
  2.     
  3.     Lorem ipsum...  
  4.   
  
  •   
     
     
     
     
    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.   }  

    為了保證復(fù)用性,這里將其抽象成了border-stripe類,里面的值都可以通過(guò)CSS變量來(lái)動(dòng)態(tài)調(diào)節(jié)

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

    光澤效果

    一看到光澤,相信你可能會(huì)想到一個(gè)關(guān)鍵角色——徑向漸變,通過(guò)它,我們可以創(chuàng)作出放射狀的圖案,而光澤也恰好是放射狀的,再根據(jù)背景可以疊加的特性,光澤效果就能輕松實(shí)現(xiàn)了 

     
     
     
     
    1.   
    2.     
    3.     Shine Button 1  
    4.     
    5.     
    6.     Shine Button 2  
    7.     
      
     
     
     
     
    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

    不規(guī)則形狀

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

     
     
     
     
    1.   
    2.   Pure CSS Ribbon  
    3.   
      
  •   
  •   
  •   
  •   
  •   
  •   
  •   
     
     
     
     
    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);,這起到了水平翻轉(zhuǎn)的作用,它可以防止再寫一遍clip-path

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

    浮雕效果

    通過(guò)仔細(xì)觀察,你會(huì)發(fā)現(xiàn)這是由2個(gè)同心的元素組成的,于是自然就想到了inset這個(gè)Mixin。

    創(chuàng)建了2個(gè)同心元素后,就要想辦法來(lái)創(chuàng)建它們的浮雕光澤了。這里的光澤可以用box-shadow來(lái)實(shí)現(xiàn),通過(guò)疊加多重陰影,我們就能模擬出浮雕的效果了 

     
     
     
     
    1.   
    2.   浮雕按鈕  
      
     
     
     
     
    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

    課后作業(yè)

    嘗試用純CSS來(lái)實(shí)現(xiàn)下圖的效果,不準(zhǔn)切圖哦~

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


    本文標(biāo)題:純CSS實(shí)現(xiàn)常見的UI效果
    本文URL:http://m.5511xx.com/article/codgidp.html