CSS媒體查詢和響應式設計

如何在CSS中使用媒體查詢來構建響應式網頁 在本篇文章中,我將首先介紹媒體類型和媒體特性描述符,然後解釋媒體查詢。 媒體類型 在媒體查詢和@import聲明中使用的媒體類型,允許我們確定在哪個媒體上加載CSS文件或CSS片段。 我們有以下媒體類型: all表示所有媒體 print用於打印 screen用於在屏幕上顯示頁面 speech用於屏幕閱讀器 screen是默認值。 以前我們有更多的媒體類型,但大多數已被棄用,因為它們被證明不能有效地確定設備需求。 我們可以在@import語句中使用它們,就像這樣: @import url(myfile.css) screen; @import url(myfile-print.css) print; 我們可以在多個媒體類型上加載CSS文件,每個類型之間用逗號隔開: @import url(myfile.css) screen, print; 在HTML的link標籤中也可以這樣使用: <link rel="stylesheet" type="text/css" href="myfile.css" media="screen" /> <link rel="stylesheet" type="text/css" href="another.css" media="screen, print" /> 我們不僅僅可以在media屬性和@import聲明中使用媒體類型。還有更多。 媒體特性描述符 首先,讓我們介紹媒體特性描述符。它們是我們可以將其添加到link的media屬性或@import聲明中的附加關鍵字,以對CSS的加載表示更多的條件。 以下是列表: 寬度(width) 高度(height) 設備寬度(device-width) 設備高度(device-height) 寬高比(aspect-ratio) 設備寬高比(device-aspect-ratio) 顏色(color) 顏色索引(color-index) 黑白顯示(monochrome) 分辨率(resolution) 方向(orientation) 掃描方式(scan) 网格(grid) 每個媒體特性描述符都有對應的min-和max-,例如: min-width和max-width min-device-width和max-device-width 等等。 其中一些接受length值,可以使用px或rem或任何長度值來表示。這就是width、height、device-width和device-height的情況。 例如: @import url(myfile.css) screen and (max-width: 800px); 請注意,我們將每個使用媒體特性描述符的塊都用括號包裹起來。 某些特性描述符接受固定值。orientation用於檢測設備方向,它接受portrait或landscape。 例如: <link rel="stylesheet" type="text/css" href="myfile....

CSS過渡的入門指南

CSS過渡是在CSS中創建動畫的最簡單的方法。在過渡中,您更改屬性的值,並告訴CSS根據某些參數慢慢將其變化到最終狀態。 CSS過渡介紹 CSS過渡的示例 過渡的時間函數值 瀏覽器DevTools中的CSS過渡 可以使用CSS過渡動畫的屬性 CSS過渡介紹 CSS過渡是在CSS中創建動畫的最簡單的方法。 在過渡中,您更改屬性的值,並告訴CSS根據某些參數慢慢將其變化到最終狀態。 CSS過渡由以下屬性定義: 屬性 描述 transition-property 應過渡的CSS屬性 transition-duration 過渡的持續時間 transition-timing-function 動畫使用的時間函數(常見值:linear,ease)。默認值:ease transition-delay 開始動畫之前的可選秒數 transition屬性是一個方便的簡寫: .container { transition: property duration timing-function delay; } CSS過渡的示例 以下代碼實現了一個CSS過渡: .one, .three { background: rgba(142, 92, 205, 0.75); transition: background 1s ease-in; } .two, .four { background: rgba(236, 252, 100, 0.75); } .circle:hover { background: rgba(142, 92, 205, 0.25); /* 淺色 */ } 在懸停在.one和.three元素上時,即紫色圓圈,有一個過渡動畫,平滑地改變背景顏色,而黃色圓圈則不會,因為它們沒有定義transition屬性。 過渡的時間函數值 transition-timing-function允許指定過渡的加速曲線。 這裡有一些簡單的值可以使用: 值 linear ease ease-in ease-out ease-in-out 這個Glitch展示了這些值在實踐中的工作方式。...

CSS層疊

了解CSS層疊的意義及其重要性 層疊是CSS的一個基本概念。畢竟,它在名字中就有了,CSS的第一個C - Cascading Style Sheets(層疊樣式表),它一定是一件重要的事情。 它代表什麼意思? 層疊是指確定應用於頁面上每個元素的屬性的過程或算法。 試圖從定義在各個位置的CSS規則列表中匯總。 它考慮到了: 特定性 重要性 繼承 檔案中的順序 它還負責解決衝突。 對於應用於同一元素的相同屬性的兩個或更多競爭CSS規則,需要根據CSS規範進行進一步處理,以確定應該應用哪個規則。 即使您只有一個CSS文件在頁面上加載,仍然有其他CSS會參與到此過程中。我們有瀏覽器(user agent)的CSS。瀏覽器有一套預設規則,各個瀏覽器之間都不相同。 然後進行您的CSS。 然後瀏覽器應用任何用戶樣式表,這可能也是由瀏覽器擴展應用的。 所有這些規則在渲染頁面時都會參與其中。

CSS濾鏡

如何使用CSS的filter屬性 濾鏡允許我們對元素進行操作。 你通常可以在Photoshop或其他圖片編輯軟件中進行的操作,像是更改透明度、亮度等等。 使用filter屬性。這是一個對圖片應用的例子,但這個屬性可以用於任何元素: img { filter: <something>; } 你可以在這裡使用各種不同的值: blur() brightness() contrast() drop-shadow() grayscale() hue-rotate() invert() opacity() sepia() saturate() url() 注意每個選項後面的括號,因為它們都需要一個參數。 例如: img { filter: opacity(0.5); } 這意味著圖片將是50%透明,因為opacity()接受介於0到1之間的值,或者是一個百分比。 你也可以同時應用多個濾鏡: img { filter: opacity(0.5) blur(2px); } 現在讓我們詳細介紹每個濾鏡。 blur() 對元素的內容進行模糊處理。你需要傳遞一個值,以px、em或rem表示,用於確定模糊半徑。 例子: img { filter: blur(4px); } opacity() opacity()接受介於0到1之間的值,或者是一個百分比,並根據它來確定圖片的透明度。 0或0%表示完全透明。 1、100%或更高表示完全可見。 例子: img { filter: opacity(0.5); } CSS還有一個opacity屬性,但filter可以根據實現方式進行硬件加速,所以應該優先使用filter。 drop-shadow() drop-shadow()在元素後面顯示一個陰影,該陰影遵循alpha通道。這意味著如果你有一個透明的圖片,在圖片的形狀上應用陰影,而不是在整個圖片框上應用陰影。如果圖片沒有alpha通道,陰影將應用於整個圖片框。 它接受至少2個參數,最多5個: 偏移X設置水平偏移量。可以是負數。 偏移Y設置垂直偏移量。可以是負數。 模糊半徑,可選,設置陰影的模糊半徑。它的默認值為0,表示不模糊。 擴散半徑,可選,設置擴散半徑。以px、rem或em表示。 顏色,可選,設置陰影的顏色。 你可以只設置顏色而不設置擴散半徑或模糊半徑。CSS會將該值理解為顏色而不是長度值。 例子: img { filter: drop-shadow(10px 10px 5px orange); } img { filter: drop-shadow(10px 10px orange); } img { filter: drop-shadow(10px 10px 5px 5px #333); } grayscale() 使元素變為灰色。...

CSS顏色

學習如何在CSS中使用顏色 默認情況下,網頁瀏覽器在使用顏色方面的渲染效果相當低劣。 我們有白色背景、黑色文字和藍色連結。這只是這樣而已。 幸運的是,CSS給了我們在設計中添加顏色的能力。 我們有以下屬性: color background-color border-color 所有這些屬性都接受一個顏色值,可以以不同的形式呈現。 命名顏色 首先,我們有CSS關鍵字定義的顏色。CSS一開始只有16個,但如今有大量的顏色名稱: [中文翻譯略] 除了“tranparent”和“currentColor”以外,它們都是CSS顏色模組4的一部分,它們是大小寫不敏感的。 維基百科有一個很好的表格可以根據名稱選擇完美的顏色。 命名顏色並不是唯一的選擇。 RGB和RGBa 您可以使用“rgb()”函數根據RGB表示法計算顏色,根據其紅綠藍部分設置顏色。範圍從0到255: p { color: rgb(255,255,255); /* white */ background-color: rgb(0,0,0); /* black */ } “rgba()”讓您可以添加alpha通道以輸入透明部分。這可以是0到1的數字: p { background-color: rgba(0,0,0,0.5); } 十六進位表示法 另一個選擇是使用十六進位表示法表示顏色的RGB部分,它由3個塊組成。 黑色,即“rgb(0,0,0)”,可以表示為“#000000”或“#000”(如果兩個數字相等,我們可以將2個數字簡化為1個)。 白色,即“rgb(255,255,255)”,可以表示為“#ffffff”或“#fff”。 十六進位表示法允許我們使用2位數來表示0到255之間的數字,因為它們可以從0到15(f)。 通過在末尾添加1或2個更多的數字,我們可以添加alpha通道,例如“#00000033”。並非所有瀏覽器都支持簡短的表示法,因此請使用全部6個數字來表示RGB部分。 HSL和HSLa 這是CSS的一個相對較新的添加。 HSL = 色相 飽和度 明度。 在這種表示法中,黑色為“hsl(0, 0%, 0%)”,白色為“hsl(0, 0%, 100%)”。 如果您對HSL比RGB更熟悉,由於您的過去知識,您肯定可以使用它。 您還可以使用“hsla()”將alpha通道添加到混合中,再次是0到1之間的數字:hsl(0, 0%, 0%, 0.5)

CSS邊框

如何透過CSS處理邊框 邊框是在內邊距和外邊距之間的一層薄紗。透過編輯邊框,可以讓元素在螢幕上繪製其周邊。 你可以透過以下屬性來處理邊框: border-style border-color border-width 屬性border可以作為所有這些屬性的快捷方式使用。 border-radius用於創建圓角。 還可以使用圖像作為邊框,使用border-image及其特定的分開屬性來實現。 border-image-source border-image-slice border-image-width border-image-outset border-image-repeat 讓我們從border-style開始。 邊框樣式 border-style屬性允許您選擇邊框的樣式。您可以使用的選項有: dotted dashed solid double groove ridge inset outset none hidden 在此Codepen中查看實例:https://codepen.io/flaviocopes/pen/yraaxq 樣式的默認值是none,所以要使邊框完全顯示,您需要將其更改為其他樣式。大多數情況下,solid是個不錯的選擇。 您可以使用以下屬性為每個邊緣設置不同的樣式: border-top-style border-right-style border-bottom-style border-left-style 或者,您可以使用具有多個值的border-style來定義它們,使用常規的上-右-下-左順序: p { border-style: solid dotted solid dotted; } 邊框寬度 border-width用於設置邊框的寬度。 您可以使用預定義的值之一: thin medium(默認值) thick 或者,使用像素、em、rem或任何其他有效的長度值來表示值。 示例: p { border-width: 2px; } 您可以使用4個值來分別設置每個邊緣(上-右-下-左)的寬度: p { border-width: 2px 1px 2px 1px; } 或者,您可以使用特定的邊緣屬性border-top-width、border-right-width、border-bottom-width、border-left-width。 邊框顏色 border-color用於設置邊框的顏色。 如果您不設置顏色,邊框默認使用元素中文本的顏色。 您可以將任何有效的顏色值傳遞給border-color。...

CSS繼承

了解CSS繼承的含義以及其重要性 當在CSS中的選擇器上設置一些屬性時,這些屬性會被該選擇器的所有子元素繼承。 我說的是一些,因為並不是所有的屬性都表現出這種行為。 這是因為有些屬性被繼承是有意義的。這幫助我們更簡潔地撰寫CSS,因為我們不需要在每個子元素上再次明確設置這些屬性。 而其他一些屬性則更有意義不被繼承。 想想字體:您不需要將 font-family 應用於您網頁的每個標籤。您只需設置 body 標籤的字體,每個子元素都會繼承它和其他屬性。 另一方面,background-color 屬性被繼承很少有意義。 可繼承的屬性 以下是一個可繼承屬性的列表。該列表並不全面,但這些規則通常是您會使用到的最流行的: border-collapse border-spacing caption-side color cursor direction empty-cells font-family font-size font-style font-variant font-weight font-size-adjust font-stretch font letter-spacing line-height list-style-image list-style-position list-style-type list-style orphans quotes tab-size text-align text-align-last text-decoration-color text-indent text-justify text-shadow text-transform visibility white-space widows word-break word-spacing 這些資訊取自這篇來自Sitepoint的文章。 強制屬性繼承 如果您有一個默認情況下不繼承的屬性,但在子元素中您希望它繼承,您可以將屬性值設置為特殊關鍵字inherit。 例如: body { background-color: yellow; } p { background-color: inherit; } 強制屬性不繼承 相反,您可能會有一個被繼承的屬性,但您希望它不被繼承。 您可以使用revert關鍵字將其還原。在這種情況下,該值會還原為瀏覽器在其默認樣式表中為其提供的原始值。 在實踐中,這很少被使用,大部分情況下您只需設置另一個值來覆蓋那個繼承的值。 其他特殊值 除了剛才提到的inherit和revert特殊關鍵字之外,您還可以將任何屬性設置為:...

CSS顯示屬性

如何在CSS中使用display屬性 對象的display屬性決定了瀏覽器如何渲染它。 這是一個非常重要的屬性,可能是你可以使用的值最多的一個。 這些值包括: block inline none contents flow flow-root table(以及所有的table-*) flex grid list-item inline-block inline-table inline-flex inline-grid inline-list-item 還有其他一些你可能不會用到的,比如ruby。 選擇其中任何一個將會顯著改變瀏覽器對元素及其子元素的行為。 在這篇文章中,我將分析一些在其他地方沒有涵蓋到的最重要的值: block inline inline-block none 我在其他文章中對其他的值進行了介紹: table 在Tables guide中 flex 在Flexbox guide中 grid 在CSS Grid guide中 inline inline是CSS中每個元素的默認顯示值。 除了一些元素(如div、p和section)是由用戶代理(瀏覽器)設置為block外,所有的HTML標籤都是默認以行內形式顯示的。 行內元素不會應用任何邊距或填充。 高度和寬度也是如此。 你可以添加它們,但網頁上的外觀不會改變 - 它們是由瀏覽器自動計算和應用的。 inline-block 與inline類似,但是inline-block會根據你指定的寬度和高度進行應用。 block 如前所述,通常元素是以行內形式顯示的,但有一些例外,包括: div p section ul 這些元素由瀏覽器設置為block。 使用display: block,元素以垂直方式一個接一個地堆疊,每個元素佔據整個頁面的100%。 如果你設置了width和height屬性的值以及margin和padding,則這些值都將被尊重。 none 使用display: none使元素消失。它仍然存在於HTML中,但在瀏覽器中不可見。

cut-silence-videos

如何自動切割視頻中的沉默段落 我通常使用文字進行溝通,但有時候我也會製作視頻,例如編程教學,或者在通訊時想要親自說些什麼。 文字是很好的表達方式,但當人們在視頻中看到你的面孔,聽到你的聲音時,那種聯繫就有所不同。 更不用說親自見面了。 我知道這個是因為我在YouTube上關注了許多人,我覺得我和他們是朋友,雖然是單向的。 無論如何,我跑題了。視頻格式固然好,但製作視頻真的很麻煩。 對我來說就是這樣。我是意大利人,但我想要用英文進行交流(而我14歲才開始學習英語)。 此外,我不是一個出色的演講者。每次演講我都犯錯,即使在講義上我也會犯許多錯誤。這進而使得編輯變得很痛苦。 我最後總是得到一個長達20分鐘的視頻,需要將其編輯成10分鐘的長度。 我還會加入許多停頓,並且希望在編輯過程中能夠刪除它們。 我發現了一個工具可以幫助我加快這個過程。它可以自動刪除停頓。在某些類型的視頻中這非常有用。 它可能不適用於每個視頻,最適合那些你一直講話的視頻。在你在編輯器中輸入代碼的編程視頻中使用它可能是個壞主意。 這是一個名為jumpcutter的Python程序,你可以在這裡找到它:https://github.com/carykh/jumpcutter。 在計算機的一個文件夾中運行以下命令: git clone https://github.com/carykh/jumpcutter.git 然後進入jumpcutter文件夾: cd jumpcutter 安裝所需的依賴項: python -m pip install --user -r requirements.txt 我們準備就緒了!將您的視頻拷貝到文件夾中,我這裡是video.mp4,然後運行: python jumpcutter.py --input\_file video.mp4 --silent\_speed 999999 --frame\_margin 2 --frame\_rate 30 要了解選項,您可以閱讀Python程序源代碼,因為它僅有200行:https://github.com/carykh/jumpcutter/blob/master/jumpcutter.py。 在此例中,--silent_speed 999999將使視頻在沉默時切割。該程序“修改視頻文件以在聲音和沉默時以不同速度播放”,因此我們基本上是以最快速度進行切割。 --frame_margin 2設置聲音周圍的幀數,以避免過於“突兀”的切割。 --frame_rate 30是視頻的幀率。 還有更多選項,但這些對我來說已經足夠了。 同時,請查看作者的這個視頻,以了解更多關於這個程序的信息。 非常感謝此gist,是通過這個gist我發現了這個程序。 我在一個24分鐘的視頻上進行了測試,最後縮短到了14分鐘。 現在我的編輯工作已經完成了一半。我只需要刪除我拍攝了2或3遍的鏡頭,然後按照自己的意願完成這個視頻。

C中的基本I/O概念

在C中如何使用printf和scanf进行输入/输出 C是一种简单的语言,而C的“核心”不包含任何输入/输出(I/O)功能。 当然,这不是C的特有情况。语言的核心通常对I/O不做任何假设。 在C的情况下,通过C标准库的stdio.h头文件中定义的一组函数向我们提供输入/输出功能。 您可以使用以下命令导入此库: #include <stdio.h> 在您的C文件顶部。 该库提供给我们许多其他函数之一: printf() scanf() sscanf() fgets() fprintf() 在描述这些函数的功能之前,我想花一分钟谈谈I/O流的概念。 在C中有3种类型的I/O流: stdin(标准输入) stdout(标准输出) stderr(标准错误) 使用I/O函数时,我们始终使用流。流是一个可以表示设备或文件的高级接口。从C的角度来看,无论是从文件还是从命令行中读取,它都是一个I/O流。 这是需要记住的一点。 有些函数设计为使用特定的流,例如printf(),它用于将字符打印到stdout。使用更通用的fprintf(),我们可以指定要写入的流。 既然我开始谈论printf(),现在让我们介绍一下它。 printf() 当学习C编程时,printf()是你将使用的第一个函数之一。 在最简单的用法中,您将其作为一个字符串字面量传递: printf("hey!"); 程序将把字符串的内容打印到屏幕上。 您可以打印变量的值,这有些棘手,因为您需要添加一个特殊的字符,一个占位符,它根据变量的类型而改变。例如,对于有符号的十进制整数,我们使用%d: int age = 37; printf("我的年龄是 %d", age); 我们可以使用逗号打印多个变量: int age_yesterday = 36; int age_today = 37; printf("昨天我是 %d 岁,而今天是 %d 岁", age_yesterday, age_today); 还有其他的格式说明符比如 %d: %c代表一个字符 %s代表一个字符串 %f代表浮点数 %p代表指针 等等。 在printf()中我们可以使用转义字符,如\n,它可以在输出中创建新的一行。 scanf() printf()用作输出函数。现在我想介绍一个输入函数,以便我们可以说我们可以做好所有的I/O事情:scanf()。 此函数用于从运行程序的用户那里获得一个值,从命令行输入。 我们首先必须定义一个变量,用于保存从输入中获得的值: int age; 然后我们以两个参数调用scanf():变量的格式(类型)和变量的地址: scanf("%d", &age); 如果我们想要获得一个字符串作为输入,请记住字符串名称是指向第一个字符的指针,因此您不需要在它之前加上&字符:...