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

歡迎訪問 生活随笔!

生活随笔

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

CSS

css l数字相加,CSS calc()的完整指南

發布時間:2024/1/1 CSS 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 css l数字相加,CSS calc()的完整指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CSS具有calc()執行基本數學運算的特殊功能。

.main-content {

/* 從100vh減去80px */

height: calc(100vh - 80px);

}

在本指南中,我將介紹有關此非常有用的功能的所有知識。 推薦閱讀之前寫過一篇類似文章《css3 calc()屬性介紹以及自適應布局使用方法》。

calc()用于值

可以使用calc()函數的唯一地方是值。請看下面這些示例,其中我們為許多不同的屬性設置值。

.el {

font-size: calc(3vw + 2px);

width: calc(100% - 20px);

height: calc(100vh - 20px);

padding: calc(1vw + 5px);

}

它也可以僅用于屬性的一部分,例如:

.el {

margin: 10px calc(2vw + 5px);

border-radius: 15px calc(15px / 3) 4px 2px;

transition: transform calc(1s - 120ms);

}

它甚至可以成為構成屬性一部分的另一個函數的一部分!例如,在顏色漸變屬性中使用calc():

.el {

background: #1E88E5 linear-gradient(

to bottom,

#1E88E5,

#1E88E5 calc(50% - 10px),

#3949AB calc(50% + 10px),

#3949AB

);

}

calc()用于長度和其他數字事物

請注意,以上所有示例本質上都是基于數字的。我們將討論一些數字使用方法的注意事項(因為有時不需要單位),但這是用于數字數學的,而不是字符串或類似的東西。

.el {

/* 不可以! */

counter-reset: calc("My " + "counter");

}

.el::before {

/* 不可以! */

content: calc("Candyman " * 3);

}

CSS有很多長度,它們都可以用于calc():

px

%

em

rem

in

mm

cm

pt

pc

ex

ch

vh

vw

vmin

vmax

當然沒有單位數也可以接受,例如line-height: calc(1.2 * 1.2);,如transform: rotate(calc(10deg * 5));。

當我們不用calc()去執行任何計算時,它仍然有效:

.el {

/* 有點怪,不過還好 */

width: calc(20px);

}

不接受媒體查詢

如果calc()使用正確(將長度單位用作屬性的值),則將其calc()應用于媒體查詢時無法使用。

@media (max-width: 40rem) {}

/* 不可以 */

@media (min-width: calc(40rem + 1px)) {}

混合單元

這也許是最能體現calc()價值的功能!上面幾乎每個示例都已經做到了這一點,但只是要指出一點,這里混合了不同的長度單元:

width: calc(100% - 20px);

這就是說:元素的寬度為負20像素。

有字面上沒有辦法預先計算出在流體寬度的情況下單獨的像素值。換句話說,calc()無法使用Sass之類的東西進行預處理,以嘗試完成polyfill。不需要,因為瀏覽器支持很好。但是要點是,當我們以這種方式混合單位時,必須在瀏覽器中(“運行時”)完成操作,這是的大部分值calc()。

這是混合單元的其他一些示例:

transform: rotate(calc(1turn + 45deg));

animation-delay: calc(1s + 15ms);

這些可能會被預處理,因為它們混合了與運行時確定的任何單位都不相關的單位。

與預處理器數學比較

我們剛剛介紹了無法預處理calc()可以做的最有用的事情。但是有一點需要注意,例如,Sass內置了數學功能,因此可以執行以下操作:

$padding: 1rem;

.el[data-padding="extra"] {

padding: $padding + 2rem;

margin-bottom: $padding * 2;

}

甚至帶有單位的數學也可以在這里工作,將相同單位的值相加或乘以無單位數。但是你不能混合使用單位,并且它也有類似的限制calc()(例如,乘法和除法必須使用無單位的數字)。

數學計算

例如,通過calc()假設你需要計算準確1 / 7個元素的寬度

.el {

/* 這更容易理解 */

width: calc(100% / 7);

/* 傳統的寫法 */

width: 14.2857142857%;

}

這可能會在某種自行創建的CSS API中獲得成功,例如:

[data-columns="7"] .col { width: calc(100% / 7); }

[data-columns="6"] .col { width: calc(100% / 6); }

[data-columns="5"] .col { width: calc(100% / 5); }

[data-columns="4"] .col { width: calc(100% / 4); }

[data-columns="3"] .col { width: calc(100% / 3); }

[data-columns="2"] .col { width: calc(100% / 2); }

calc()的數學運算符

數學運算符+,-,*,和/ 對于大家來說并不陌生。但是這里在使用它們的方式上有所不同。

加號(+)和減號(-)要求兩個數字均為長度

.el {

/* 有效 👍 */

margin: calc(10px + 10px);

/* 無效 👎 */

margin: calc(10px + 5);

}

無效的值會使整個單獨的聲明無效。

除(/)要求第二個數字不能為無單位

.el {

/* 有效👍 */

margin: calc(30px / 3);

/* 無效 👎 */

margin: calc(30px / 10px);

/* 無效👎 (不能除以0) */

margin: calc(30px / 0);

}

乘法(*)要求數字之一為無單位

.el {

/* 有效👍 */

margin: calc(10px * 3);

/* 有效 👍 */

margin: calc(3 * 10px);

/* 無效 👎 */

margin: calc(30px * 3px);

}

空格很重要

可以進行加法和減法。

.el {

/* 有效👍 */

font-size: calc(3vw + 2px);

/* 無效 👎 */

font-size: calc(3vw+2px);

/* 有效 👍 */

font-size: calc(3vw - 2px);

/* 無效 👎 */

font-size: calc(3vw-2px);

}

負數是可以的(例如calc(5vw - - 5px)),但這是一個例子,說明空白不僅是必需的,而且是有用的。

之所以需要在+和-之間設置間距,實際上是因為解析問題。例如,2px-3px被解析為數字“2”和單位“px-3px”,+還有其他問題,比如“被數字語法占用了”。我猜空白應該與自定義屬性的- -語法有關,但不是!

乘法和除法不需要運算符周圍的空格。但是我個人建議為了可讀性還是有必要加上

外部的空白無關緊要。我們甚至可以根據需要進行換行:

.el {

/* Valid 👍 */

width: calc(

100% / 3

);

}

但是請注意這一點:calc和()括號之間沒有空格。

.el {

/* 無效👎 */

width: calc (100% / 3);

}

嵌套calc(calc())

.el {

width: calc(

calc(100% / 3)

-

calc(1rem * 2)

);

}

calc()里面嵌套的calc()是可以忽略掉的,因為它的父級是單獨工作的:

.el {

width: calc(

(100% / 3)

-

(1rem * 2)

);

}

在這種情況下,即使沒有括號,也會遵循數學中的加減乘除的“操作順序”規則。也就是說,除法和乘法首先發生(在加法和減法之前),因此根本不需要括號。可以這樣寫:

.el {

width: calc(100% / 3 - 1rem * 2);

}

如果我們確實需要先進行加法或減法,則需要給它們加上必要的括號就可以啦。

.el {

width: calc(100% + 2rem / 2);

width: calc((100% + 2rem) / 2);

}

CSS自定義屬性和calc()使用

除了calc()混合單元的驚人功能外,接下來最令人驚訝的是calc()可將其與自定義屬性一起使用。自定義屬性可以在隨后的計算中使用:

html {

--spacing: 10px;

}

.module {

padding: calc(var(--spacing) * 2);

}

我敢肯定,你可以想象一個CSS設置,其中設置一堆CSS自定義屬性,然后讓其余的CSS根據需要使用它們,從而在頂部進行大量配置。

自定義屬性也可以相互引用。下面是一個例子,其中使用了一些數學(注意,首先缺少calc()函數),然后再應用。(它最終必須在calc()中。)

html {

--spacing: 10px;

--spacing-L: var(--spacing) * 2;

--spacing-XL: var(--spacing) * 3;

}

.module[data-spacing="XL"] {

padding: calc(var(--spacing-XL));

}

你可能不喜歡這樣,因為你需要記住calc()在哪里使用該屬性,但從可讀性的角度來看,這是可能的,而且可能很有趣。

自定義屬性可以來自HTML,這有時是一件非常酷和有用的事情。

... ... ...

div {

/* 索引值來自HTML(帶有回退) */

animation-delay: calc(var(--index, 1) * 0.2s);

}

添加單位

如果你處于這樣一種情況:沒有單位的數字更容易存儲,或者提前用沒有單位的數字進行數學運算,你可以一直等到你應用數字乘以1和單位來添加單位。

html {

--importantNumber: 2;

}

.el {

/* Number stays 2, but it has a unit now */

padding: calc(var(--importantNumber) * 1rem);

}

色彩值的使用

像RGB和HSL這樣的顏色格式有可以使用calc()處理的數字。例如,設置一些基本HSL值,然后更改它們以形成自己創建的系統(示例):

html {

--H: 100;

--S: 100%;

--L: 50%;

}

.el {

background: hsl(

calc(var(--H) + 20),

calc(var(--S) - 10%),

calc(var(--L) + 30%)

)

}

不能將calc()和attr()合并

CSS中的attr()函數看起來很吸引人,就像你可以從HTML中提取屬性值并使用它們一樣。但是

...

div {

/* 不行 */

color: attr(data-color);

}

這里沒有“類型”,所以attr()的唯一用途是與content屬性一起使用的字符串。這意味著這樣是有效的:

div::before {

content: attr(data-color);

}

我之所以提到這一點,是因為試圖以這種方式提取一個數字以用于計算可能會很有誘惑力,例如:

...

.grid {

display: grid;

/* 這兩項工作都沒有 */

grid-template-columns: repeat(attr(data-columns), 1fr);

grid-gap: calc(1rem * attr(data-gap));

}

幸運的是,這并不重要,因為HTML中的自定義屬性同樣有用甚至更多!

...

.grid {

display: grid;

/* 好了! */

grid-template-columns: repeat(var(--columns), 1fr);

grid-gap: calc(var(--gap));

}

瀏覽器工具

瀏覽器開發工具會傾向于在樣式表中編寫calc()時向你顯示它。

如果需要計算出的值,可以使用“計算”??選項卡(在所有瀏覽器的DevTools中,至少是我所知道的)向你顯示。

瀏覽器支持

該瀏覽器支持數據來自Caniuse,它具有更多詳細信息。數字表示瀏覽器支持該版本及更高版本的功能。

如果確實需要支持更早版本(例如IE 8或Firefox 3.6),通常的技巧是在使用calc()以下屬性或值之前添加另一個屬性或值:

.el {

width: 92%; /* Fallback */

width: calc(100% - 2rem);

}

當然也有很多已知的問題calc(),不過它們都是針對舊瀏覽器的。

Firefox <59不支持 calc() 顏色功能。范例: color: hsl(calc(60 * 2), 100%, 50%)。

當IE 9 – 11 用于任何值box-shadow 時,將不會呈現該 屬性 calc()。

width: calc() 用在表格單元格上時,在IE 9-11和Edge都不支持

如果要將calc()用作包含視口單位等的流體類型情況下,請確保包含使用rem或em的單位,以便用戶仍然可以根據需要通過放大或縮小來控制字體的上下起伏。

總結

以上是生活随笔為你收集整理的css l数字相加,CSS calc()的完整指南的全部內容,希望文章能夠幫你解決所遇到的問題。

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