1. 程式人生 > >button樣式篇一(ant Design React)

button樣式篇一(ant Design React)

這篇來介紹button中elementUi、iview、ant中樣式結構

ant Design react

ant-react中button分兩個檔案less:

  • mixins.less:根據button功能樣式不同封裝成函式。
  • index.less:呼叫mixins.less中的函式來宣告button的相關class

我們先來看mixins.less的結構

  • btn(基礎樣式,主要用設定按鈕通用樣式):
.btn() {
  display: inline-block;//行內塊元素
  font-weight: @btn-font-weight;//字型粗細
  text-align: center;//字型居中
  touch-action: manipulation;//瀏覽器只允許進行滾動和持續縮放操作
  cursor: pointer;//滑鼠移上去形狀
  background-image: none;//背景圖片為空
  border: @border-width-base @border-style-base transparent;//邊框透明
  white-space: nowrap;//不換行
  .button-size(@btn-height-base; @btn-padding-base; @font-size-base; @btn-border-radius-base);//padding height font-size  border-radius設定
  user-select: none;//文字不能被選擇
  transition: all .3s @ease-in-out;//過渡
  position: relative;//相對定位

  > 
[email protected]
{iconfont-css-prefix} { line-height: 1;//行高不帶單位是相對字型的比例 } &, &:active, &:focus { outline: 0;//是繪製於元素周圍的一條線,位於邊框邊緣的外圍,可起到突出元素的作用 } &:not([disabled]):hover { text-decoration: none;//定義標準的文字 } &:not([disabled]):active { outline: 0; transition: none; } &.disabled, &[disabled] { cursor: not-allowed; > * { pointer-events: none;//元素永遠不會成為滑鼠事件的target } } &-lg { .button-size(@btn-height-lg; @btn-padding-lg; @btn-font-size-lg; @btn-border-radius-base); } &-sm { .button-size(@btn-height-sm; @btn-padding-sm; @btn-font-size-sm; @btn-border-radius-sm); } }

其中的具體屬性不多說了,不知道的可以百度屬性就知道了,大概就是設定字型粗細、字型居中、不換行、過渡、定位、邊框、啟用、焦點、hover、disabled等樣式,其中btn中呼叫了button-size函式。&-lg、&-sm設定大按鈕和小按鈕,呼叫了button-size函式

  • button-size(設定按鈕大小):
.button-size(@height; @padding; @font-size; @border-radius) {
  padding: @padding;
  font-size: @font-size;
  border-radius: @border-radius;
  height: @height;
}

height、padding、font-size、border-radius為輸入引數來設定按鈕大小,寬度通過padding和font-size就能設定寬度。

  • 下一個部分是設定按鈕型別為主按鈕、次按鈕、虛線按鈕、危險按鈕、幽靈按鍵樣式函式:
.button-variant-primary(@color; @background) {
  .button-color(@color; @background; @background);
  &:hover,
  &:focus {
    .button-color(@color; ~`colorPalette("@{background}", 5)`; ~`colorPalette("@{background}", 5)`);
  }

  &:active,
  &.active {
    .button-color(@color; ~`colorPalette("@{background}", 7)`; ~`colorPalette("@{background}", 7)`);
  }

  .button-disabled();
}

.button-variant-other(@color; @background; @border) {
  .button-color(@color; @background; @border);

  &:hover,
  &:focus {
    .button-color(@primary-5; @background; @primary-5);
  }

  &:active,
  &.active {
    .button-color(@primary-7; @background; @primary-7);
  }

  .button-disabled();
}

.button-variant-danger(@color; @background; @border) {
  .button-color(@color; @background; @border);

  &:hover {
    .button-color(@btn-primary-color; ~`colorPalette("@{color}", 5)`; ~`colorPalette("@{color}", 5)`);
  }

  &:focus {
    .button-color(~`colorPalette("@{color}", 5)`; #fff; ~`colorPalette("@{color}", 5)`);
  }

  &:active,
  &.active {
    .button-color(@btn-primary-color; ~`colorPalette("@{color}", 7)`; ~`colorPalette("@{color}", 7)`);
  }

  .button-disabled();
}

.button-variant-ghost(@color) {
  .button-color(@color; transparent; @color);

  &:hover,
  &:focus {
    .button-color(~`colorPalette("@{color}", 5)`; transparent; ~`colorPalette("@{color}", 5)`);
  }

  &:active,
  &.active {
    .button-color(~`colorPalette("@{color}", 7)`; transparent; ~`colorPalette("@{color}", 7)`);
  }

  .button-disabled();
}

程式碼中我們可以看到這些函式都是呼叫button-color來設定按鈕的邊框,背景,文字顏色,和呼叫button-disabled來設定禁用樣式。主要還是基礎顏色樣式不同,而且hover,active顏色樣式不一樣。而且在後面函式中btn-primary、btn-default、btn-ghost、btn-dashed、btn-danger呼叫上面的對應函式。程式碼如下:

// primary button style
.btn-primary() {
  .button-variant-primary(@btn-primary-color; @btn-primary-bg);
}

// default button style
.btn-default() {
  .button-variant-other(@btn-default-color; @btn-default-bg; @btn-default-border);
  &:hover,
  &:focus,
  &:active,
  &.active {
    background: @btn-default-bg;
    text-decoration: none;
  }
}

// ghost button style
.btn-ghost() {
  .button-variant-other(@btn-ghost-color, @btn-ghost-bg, @btn-ghost-border);
}

// dashed button style
.btn-dashed() {
  .button-variant-other(@btn-default-color, @btn-default-bg, @btn-default-border);
  border-style: dashed;
}

// danger button style
.btn-danger() {
  .button-variant-danger(@btn-danger-color, @btn-danger-bg, @btn-danger-border);
}

剩下就是按鈕組的樣式和圓按鈕的樣式

.button-group-base(@btnClassName) {//按鈕組的基礎樣式
  position: relative;
  display: inline-block;
  > [email protected]{btnClassName},
  > span > [email protected]{btnClassName} {
    position: relative;
    line-height: @btn-height-base - 2px;

    &:hover,
    &:focus,
    &:active,
    &.active {
      z-index: 2;
    }

    &:disabled {
      z-index: 0;
    }
  }

  // size
  &-lg > [email protected]{btnClassName},
  &-lg > span > [email protected]{btnClassName} {
    .button-size(@btn-height-lg; @btn-padding-lg; @btn-font-size-lg; 0);
    line-height: @btn-height-lg - 2px;
  }

  &-sm > [email protected]{btnClassName},
  &-sm > span > [email protected]{btnClassName} {
    .button-size(@btn-height-sm; @btn-padding-sm; @font-size-base; 0);
    line-height: @btn-height-sm - 2px;
    > [email protected]{iconfont-css-prefix} {
      font-size: @font-size-base;
    }
  }
}
.btn-group(@btnClassName: btn) {//按鈕組主要是設定裡面一排按鈕的邊框和圓角
  .button-group-base(@btnClassName);

  [email protected]{btnClassName} + [email protected]{btnClassName},
  [email protected]{btnClassName} + &,
  span + [email protected]{btnClassName},
  [email protected]{btnClassName} + span,
  > span + span,
  & + [email protected]{btnClassName},
  & + & {
    margin-left: -1px;
  }

  [email protected]{btnClassName}-primary + [email protected]{btnClassName}:not([email protected]{btnClassName}-primary):not([disabled]) {
    border-left-color: transparent;
  }

  [email protected]{btnClassName} {
    border-radius: 0;
  }

  > [email protected]{btnClassName}:first-child,
  > span:first-child > [email protected]{btnClassName} {
    margin-left: 0;
  }
  > [email protected]{btnClassName}:only-child {
    border-radius: @btn-border-radius-base;
  }
  > span:only-child > [email protected]{btnClassName} {
    border-radius: @btn-border-radius-base;
  }

  > [email protected]{btnClassName}:first-child:not(:last-child),
  > span:first-child:not(:last-child) > [email protected]{btnClassName} {
    border-bottom-left-radius: @btn-border-radius-base;
    border-top-left-radius: @btn-border-radius-base;
  }

  > [email protected]{btnClassName}:last-child:not(:first-child),
  > span:last-child:not(:first-child) > [email protected]{btnClassName} {
    border-bottom-right-radius: @btn-border-radius-base;
    border-top-right-radius: @btn-border-radius-base;
  }

  &-sm {
    > [email protected]{btnClassName}:only-child {
      border-radius: @btn-border-radius-sm;
    }
    > span:only-child > [email protected]{btnClassName} {
      border-radius: @btn-border-radius-sm;
    }
    > [email protected]{btnClassName}:first-child:not(:last-child),
    > span:first-child:not(:last-child) > [email protected]{btnClassName} {
      border-bottom-left-radius: @btn-border-radius-sm;
      border-top-left-radius: @btn-border-radius-sm;
    }
    > [email protected]{btnClassName}:last-child:not(:first-child),
    > span:last-child:not(:first-child) > [email protected]{btnClassName} {
      border-bottom-right-radius: @btn-border-radius-sm;
      border-top-right-radius: @btn-border-radius-sm;
    }
  }

  & > & {
    float: left;
  }

  & > &:not(:first-child):not(:last-child) > [email protected]{btnClassName} {
    border-radius: 0;
  }

  & > &:first-child:not(:last-child) {
    > [email protected]{btnClassName}:last-child {
      border-bottom-right-radius: 0;
      border-top-right-radius: 0;
      padding-right: 8px;
    }
  }

  & > &:last-child:not(:first-child) > [email protected]{btnClassName}:first-child {
    border-bottom-left-radius: 0;
    border-top-left-radius: 0;
    padding-left: 8px;
  }
}

相關推薦

button樣式ant Design React

這篇來介紹button中elementUi、iview、ant中樣式結構 ant Design react ant-react中button分兩個檔案less: mixins.less:根據button功能樣式不同封裝成函式。 index.less:呼叫mixin

reactant-design-pro路由-router踩坑

最近學習react,使用的是阿里推出的ant-design-pro框架,踩了一些關於react(ant-design)路由的坑,在此做一下總結。 router 我們先大致瞭解一下react和ant-design-pro中的路由。 首先我們來講一下React中原生的路由(

JAVA總結JDK的安裝

由於寫文的初衷是為了方便複習,因此相關的原理與歷史事件不做重點描述一.JDK的安裝在這裡我安裝的是jdk-7u79-windows-x64.exe,它的安裝過程與一般的應用程式並無多大區別,在這便不多說。二.配置環境變數相比於安裝JDK,環境變數的配置先對來說稍複雜一點;環境

JAVA隨筆Timer源代碼分析和scheduleAtFixedRate的使用

exce 啟動 get stat dsm ldr 基礎篇 ask pty 寫完了基礎篇,想了非常久要不要去寫進階篇。去寫JSP等等的用法。最後決定先不去寫。由於自己並非JAVA方面的大牛。眼下也在邊做邊學,所以決定先將自己不懂的拿出來學並記下來。 Timer是Java自

海康威視攝像機的實時讀取OpenCV開發環境配置

參考博主lonelyrains的文章,利用海康SDK+OpenCV,實現了海康攝像機影象實時讀取。篇一介紹環境配置及相關注意事項。 OpenCV開發環境配置 1.下載opencv-2.4.11(其他版本配置過程相似),下載完成後,雙擊檔案會提示解壓到某個地方,解壓完成複製到要配置的目錄下

分享IBNIntent-based networking調研報告

IBN調研報告 背景 SDN(Software-defined network):最大特點在於具有鬆耦合的控制平面與資料平面、支援集中化的網路狀態控制、實現底層網路設施對上層應用的透明。具有靈活的軟體程式設計能力,使得網路的自動化管理和控制能力得到空前提升。 SDN存在的問題: 儘管當前,SDN在超大規模的雲

Elasticsearch學習,請先看這Elasticsearch教程01|MVP講堂

作者:阿里雲MVP 銘毅 上節內容:死磕 Elasticsearch 方法論:普通程式設計師高效精進的 10 大狠招!下節連結:Elasticsearch增、刪、改、查操作深入詳解(Elasticsearch教程02) 題記:Elasticsearch研究有一段時間了,現特將Elasticsearch相關

JAVA隨筆Timer原始碼分析和scheduleAtFixedRate的使用

寫完了基礎篇,想了很久要不要去寫進階篇,去寫JSP等等的使用方法,最後決定先不去寫,因為自己並不是JAVA方面的大牛,目前也在邊做邊學,所以決定先將自己不懂的拿出來學並記下來。 Timer是Java自帶的java.util.Timer類,通過排程一個java.util.Ti

網頁遊戲開發入門教程webgame+design

 一、簡單的程式框架。 webgame程式構成:三大部分。第一是資料流程。第二是程式。第三是美術。其中,資料流程包括了功能。也只有在功能中才能體現資料流程。資料流程相當的麻煩,後面再討論。比如最簡單的賣買產品。要實現這個功能。那麼需要有產品基礎表、產品詳細表、商店表、揹包表。如果擴充套件性更強,相應的雙表是

塊裝置驅動實戰基礎 170行程式碼構建一個邏輯塊裝置驅動

作業系統是如何將資料讀到緩衝區的,發生了什麼?我們帶著這樣的問題,粗略走一下read呼叫系統過程,希望這個初探,可以喚起大家研究作業系統核心的好奇心和興趣,並以此為例,讓我們先初步對請求在過濾塊裝置驅動中的處理過程有個大概印象和了解。 塊裝置在整個Linux中應用的

.Net轉Java自學之路—Mybatis框架入門

spa dstat namespace devel word nvi lose 列名 優化 原生態JDBC程序問題總結:   1、數據庫連接,使用時就創建,不使用立即釋放。該操作是對數據庫進行頻繁連接開啟和關閉,造成數據庫資源浪費,影響數據庫性能。    解決:使用數據庫

.Net轉Java自學之路—SpringMVC框架簡述

RKE jsp 實現類 適配器 isp 基於 freemark ping 之間 SpringMVC是Spring框架的一個模塊,SpringMVC和Spring無需通過中間層進行整合。SpringMVC是一個基於MVC設計模式的一個框架。 SpringMVC框架原理:

.NET進行客戶端Web開發又利器 - Ant Design Blazor

你好,我是Dotnet9,繼上篇介紹[Bootstrap風格的BlazorUI元件庫](https://mp.weixin.qq.com/s/Prpf7S5vTRg1fqLkUYmFKQ)後,今天我來介紹另一款Blazor UI元件庫:一套基於 Ant Design 和 Blazor 的企業級元件庫。 本文

java隨筆關於定時任務

implement adt dex run pre println time cut blog public class ThreadTest { class MyTask implements Runnable{ public void ru

C#基礎 方法詳解

命名 可選參數 編譯 標記 .com 操作 改變 根據 ref 需要知道:類和方法的關系 方法和參數修飾符 自定義方法可以有或沒有參數,也可以有或沒有返回值。可以被各種關鍵字(static、virtual、public、new等)修飾以限制其行為。

狀態壓縮·狀態壓縮DP

pos weight i+1 else urn footer 分享 pre 同時 描述 小Hi和小Ho在兌換到了喜歡的獎品之後,便繼續起了他們的美國之行,思來想去,他們決定乘坐火車前往下一座城市——那座城市即將舉行美食節! 但是不幸的是,小Hi和小Ho並沒有能夠買到很好的火

Python3 接口自動化測試項目實戰WEB項目

json格式 協議類型 def 以及 chrom pos token 人的 acc 1.1 接口測試項目搭建 1.1.1 教育局招生管理系統部署 教育局招生管理系統是基於java+mysql,下面介紹它的部署過程。 1.從我的網盤下載部署文件。 2.安裝jdk以及配置

Vue.js實戰 學習筆記 初識Vue.js

hid dom 介紹頁面 pan 分離 name 管理 end 筆記 官方文檔中介紹:漸進式技術棧(漸進式即可以階段性地使用Vue,或者可以在使用jQuery的同時,部分模塊上使用Vue,而不是像Angular一樣一用就是全部使用) 在設計上,使用MVVM(Model-V

網頁程式設計技術瀏覽器核心介紹

1、瀏覽器核心由兩部分組成:渲染引擎和JavaScript引擎   渲染引擎:負責獲取網頁(HTML、XML、圖形等)、整理資訊(CSS)以及計算網頁顯示方式   JavaScript引擎:負責解析和執行JavaScript程式碼來實現網頁的動態效果。(由於JavaScript引擎越來越獨立,核心傾向於指

GAN使用譜歸spectral-normalization-gan穩定訓練——tensorflow應用

參考程式碼:https://github.com/christiancosgrove/pytorch-spectral-normalization-gan 參考程式碼:https://github.com/heykeetae/Self-Attention-GAN 參考程式碼:https://