css預處理器sass使用教程(多圖預警)

? ? ? ?css預處理器賦予了css動態語言的特性,如變量、函數、運算、繼承、嵌套等,有助于更好地組織管理樣式文件,以及更高效地開發項目。css預處理器可以更方便的維護和管理css代碼,讓整個網頁變得更加靈活可變。對于預處理器,廣泛使用的有less和sass。在這不做對比,2者大同小異,sass基于Ruby語言編寫,所以編譯sass文件需要Ruby環境。我們使用sass并不需要過多了解Ruby語言,只需要安裝Ruby環境即可,而less則主要是運行在node環境下,功能語法有類似之處。本文主要介紹Ruby下sass的使用。

Ruby下載與安裝:

1、登錄http://rubyinstaller.org/

  

2、點擊download后到這個頁面,64位windows電腦下載箭頭所指的版本即可

3、完了直接安裝

點擊finish后,就算安裝完了,我們還需要去命令行下檢測是否安裝成功,注意的是ruby的命令行而不是cmd下的命令行。

?打開后進入命令行:

緊接著在ruby下安裝sass:輸入指令gem install sass

輸入sass -v,后出現版本號,就算安裝成功了。

好了,下載安裝完成,環境算是搭建好了,關于語法跟相關指令下面介紹。

?sass的使用。

為了讓更多人能夠真正學會使用sass,我從新建文件開始,一步一步演示。

1、我在桌面建了一個名叫sasstest的文件夾,里面新建了一個sass.scss后綴的文件。(新建文本文檔后,把名字后綴改成sass.scss)

?

這里說明一下,為什么sass的后綴是scss?其實,sass有兩種語法形式。

首先是scss,也就是我們這個后綴形式的語法。這種格式在 CSS3 語法的基礎上進行擴展,這意味著每個CSS樣式表是一個同等的SCSS文件。此外,SCSS 也支持大多數 CSS hacks 寫法 以及瀏覽器專屬前綴語法,這種語法的樣式表文件需要以?.scss?作為拓展名。

另一種,也是最早的語法,被稱為縮進語法。它提供了一種更加簡介的方式來書寫CSS。它使用縮進而不是花括號來表示選擇器的嵌套,用換行而不是分號來分隔屬性,一些人認為這樣做比 SCSS 更容易閱讀,書寫也更快速。縮排語法具有 Sass 的所有特色功能, 雖然有些語法上稍有差異。 使用此種語法的樣式表文件需要以?.sass?作為擴展名。

其實不管哪種語法,任何一種語法的文件可以直接導入?到另一種語法的文件中使用,同時還可以通過sass-convert 命令行工具,進行互相轉換。

我感覺不用糾結這些差異,使用一種即可,我習慣第一種,所以本文一直使用scss的語法形式。

2、第二步當然就是打開sass.scss啦。用什么編輯器都行,本文使用sublime text。

要想運行sass,就要使用到指令了,好了,先別管語法,在sass.scss中敲上幾行,看能不能編譯成css,提前了解下指令。

?

敲上去之后呢,查看新建的文件夾,你會發現什么都沒有,還是老樣

當然啦,你還沒監測運行你的sass代碼怎么會有變化呢?還記得ruby的命令行窗口嗎?是的,需要在那里敲上運行的指令,sass才能生成css代碼。

運行sass文件:sass input.scss output.css (左邊代表sass輸入文件,右邊是css輸出文件)

sass監視sass文件的指令有:

所謂監視,就是每當sass文件發生改變時,css文件隨之生成。這點與運行不同,運行時一次性的,監視是持續性的。

監視某一個sass文件:sass --watch input.scss:output.css(左邊代表sass輸入文件,右邊是css輸出文件)

監視整個文件夾:sass --watch sass:css(左邊代表監視的文件夾路徑,右邊代表輸出文件夾路徑)

那么,跑一邊我們的scss代碼,看看生成的css,我想要的是在sasstest文件夾下面生成一個css文件夾,存放css文件,方便管理。

1)找到當前文件夾。由于是桌面,所以路徑如下

注意,如果跨盤,直接這樣進入某盤:

按照上面3種,寫對應的指令。

2)運行:運行的時候,沒能生成css文件夾,這時需要手動增加css文件夾。

本例子指令:

說明:首先進入sasstest文件夾,然后敲指令。

結果圖:

第一個是生成的緩存文件,打開是css,會看到,

除了css,還有一個map文件,sass文件相當于源文件,css相當于編譯后的文件,當檢查到頁面問題的時候,你看到的是css,但是需要修改的是sass文件,這個map就是兩個文件的對應關系表。

分別打開2個文件:

??

可以看到css出來了,而那個文件只是對應關系表,不用管它。

3)監視文件。我們恢復文件夾初始狀態,如圖:

監視sass.scss一個文件sass --watch sass.scss:css\sass.css,監視會生成對應的文件夾,不用手動創建。(注意,這樣只能監視一個文件,就是sass.scss,如果sasstest下還有其他sass文件,則監視不了)

效果是一樣的:

我們有恢復文件夾初始狀態,把生成的刪去,試一下監視文件夾的指令,其實用的更多的還是監視文件夾

要監視文件夾,路徑需要回到文件夾的上一級,本文中就是桌面了。

好了,關于運行就介紹到這里了。

關于css輸出格式,sass提供了四種:nested、expanded、compact、compressed。

指令寫法:

nested:nested(嵌套)格式是 Sass 默認的輸出格式,因為它的格式反映CSS樣式與HTML文檔結構。每個屬性都獨占用一行,但縮排不是固定的。每個規則是基于它的何嵌套深度縮進。

expanded:expanded(擴展)格式更像是手寫的CSS樣式,每個屬性和規則都獨占用一行。在規則之內的屬性縮進的,但規則沒有任何特殊的縮進。

compact:compact(緊湊)格式比起nested(嵌套)或expanded(擴展)格式占據更小的空間。這種格式重點聚焦在選擇器上,不是它們的屬性。每個CSS規則獨占用一行,該行還包括定義的每個屬性。嵌套的規則都是另起一行,不嵌套的選擇器會輸出空白行作為分隔符。

compressed:compressed(壓縮)格式占用盡可能小的空間,在該文件的末尾會有一個換行,并且除了必要的分隔選擇器之外,基本沒有多余空格,它還包括其他一些小的壓縮,比如選擇顏色最小的表示方式。這意味著可讀性很差。

sass的語法:

時間有限,我貼一下我練習是使用到的語法代碼:

?

@charset "utf-8";
/*
* CSS擴展
*/
/*嵌套規則*/
#main{width:100px;p, div{font-size:2em;a{font-weight: bold;}}
}
/*引用父選擇器*/
a{text-decoration: none;font-weight: lighter;&:hover{text-decoration:underline;font-weight: bolder;}body.firefox &{color:red;}
}
#main{color:red;a{font-size: 20px;&:hover{color:blue;}}
}
/*嵌套屬性*/
.fun{font:{family:"微軟雅黑";size:16px;weight:bolder;}
}
/* 占位符選擇器: %foo 
Sass 支持一種特殊類型的選擇器,叫做"占位符選擇器" 
](placeholder selector)。這些看起來像 class 和 id 
選擇器,除了# 或.用%替換。他們需要在@extend 指令中使用;
*/
/*
*  Sassscript
*/
/* 交互式 shell */
/*
Interactive Shell 可以在命令行中測試 SassScript 的功能。
在命令行中輸入 sass -i,然后輸入想要測試的 SassScript 
查看輸出結果:
sass -i
>> "Hello, Sassy World!"
"Hello, Sassy World!"
>> 1px + 1px + 1px
3px
>> #777 + #777
#eeeeee
>> #777 + #888
white
*/
/*變量:變量僅在它定義的選擇器嵌套層級的范圍內可用(愚人碼頭注:可以理解為塊級作用域)。不在任何嵌套選擇器內定義的變量則在可任何地方使用(愚人碼頭注:可以理解為全局變量)。定義變量的時候可以后面帶上!global標志,在這種情況下,變量在任何地方可見(愚人碼頭注:可以理解為全局變量)*/#bod{$width:100px !global;width:$width;}#ref{width:$width;}
/*
數據類型:SassScript 支持 7 種主要的數據類型
數字、文本字符串、顏色、布爾值、空值、值列表 (list)、maps
*/
@mixin firefox-message($select){body #{$select}:before{color:red;content: "hi";}
}
@include firefox-message(".header");
/* 插值 */
$name : son;
$color :blue;
p.#{$name}{color:#{color};
}
/* SassScript中的& 
就像當它在選擇器中使用一樣,SassScript中的&指向
當前父選擇器。下面是一個逗號分隔的列表(list)
中包含一個空格的分隔列表(list)
*/
@mixin does-parent-exist {@if & {&:hover {color: red;}} @else {a {color: red;}}
}
@include does-parent-exist;
/* 變量默認: !default 如果分配給變量的值后面添加了!default標志 ,這意味著該變量如果已經賦值,那么它不會被重新賦值,但是,如果它尚未賦值,那么它會被賦予新的給定值。
*/
$content: "Second content?" !default;
$content: "First content";
$new_content: "First time reference" !default;#main {content: $content;new-content: $new_content;
}
/* @media */
.silder{width: 300px;@media screen  and (max-width: 500px) {width:500px;}
}
$media: screen;
$feature: -webkit-min-device-pixel-ratio;
$value: 1.5;@media #{$media} and ($feature: $value) {.sidebar {width: 500px;}
}
/* @extend */
.error{border: 1px #f00;background-color: #fdd;
}
.seriousError{@extend .error;border-width: 3px;
}
#fake-links .link {@extend a.class;font-size: 18px;
}
a.class{color:blue;&:hover{color:red;}
}
/*
@extend-Only 選擇器
占位選擇器看起來很像普通的 class 和 id 選擇器,
只是 # 或 . 被替換成了 %。他可以像 class 或者id 選擇器那樣使用,而它本身的規則,不會被編譯到 CSS 文件中,如下
*/
#context a%extreme {color: blue;font-weight: bold;font-size: 2em;
}
/*
占位符選擇器,就像class和id選擇器那樣可以用于擴展。
擴展選擇器,將會編譯成CSS,占位符選擇器本身不會被
編譯。例如:
*/
.notice {@extend %extreme;
}
/*
!optional 標記:主要是避免擴展時如果沒有某個選擇器,會報錯
*/
a.important {@extend .noticeqq !optional;
}
/*
*
*控制指令和表達式
*
*/
/*@if 語法*/
$type : monster;
p{@if $type == ocean {color: red;} @else if $type == matator{color: blue;} @else if $type == monster{color: green;} @else {color: black;}
}
/*@for 語法*/
/*
@for指令重復輸出一組樣式。對于每次重復,計數器變量用于
調整輸出結果。該指令有兩種形式:@for $var from <start> 
through <end> 和 @for $var from <start> to <end>。注意
關鍵字through 和 to的區別。$var可以是任何變量名,比如$i;
<start> 和 <end>是應該返回整數的SassScript表達式。當
<start>比<end>大的時候,計數器將遞減,而不是增量。@for語句將設置$var為指定的范圍內每個連續的數值,并且每
一次輸出的嵌套樣式中使用$var的值。對于from ... through
的形式,范圍包括<start>和<end>的值,但from ... to的形式
從<start>開始運行,但不包括<end>的值。
*/
@for $i from 1 through 3 {.item-#{$i} { width: 2em * $i; }
}
@for $i from 5 to 3 {.item-#{$i} { width: 2em * $i; }
}
/*@each
@each指令通常格式是@each $var in <list or map>。$var可以
是任何變量名,像$length 或者 $name,和<list or map>是一
個返回列表(list)或 map 的 SassScript 表達式。@each 規則將$var設置為列表(list)或 map 中的每個項目,
輸出樣式中包含使用$var的值
*/
@each $animal in puma, sea-slug, egret, salamander {.#{$animal}-icon {background-image: url('/images/#{$animal}.png');}
}
/*多重賦值*/
@each $animal, $color, $cursor in (puma, black, default),(sea-slug, blue, pointer),(egret, white, move) {.#{$animal}-icon {background-image: url('/images/#{$animal}.png');border: 2px solid $color;cursor: $cursor;}
}
@each $header, $size in (h1: 2em, h2: 1.5em, h3: 1.2em) {#{$header} {font-size: $size;}
}
/*
@while 指令重復輸出嵌套樣式,直到SassScript表達式返回結果
為false。這可用于實現比@for語句更復雜的循環
*/
$i: 6;@while $i > 0 {.item-#{$i} { width: 2em * $i; }$i: $i - 2;
}
/*
*
*混入指令
*
*/
/*
混入(mixin)允許定義可以在整個樣式表中重復使用的樣式,
而避免了使用無語意的類(class),比如 .float-left。
混入(mixin)還可以包含所有的CSS規則,以及任何其他在Sass
文檔中被允許使用的東西。他們甚至可以帶arguments,引入變
量,只需少量的混入(mixin)代碼就能輸出多樣化的樣式。
*/
/*1、定義一個混入(mixin):@mixin*/
@mixin large-text {font: {family: Arial;size: 20px;weight: bold;}color: #ff0000;
}
/*2、引入混合樣式:@include*/
.page-title {@include large-text;padding: 4px;margin-top: 10px;
}
/*
混入(mixin)也可以包含在任何規則的外(即,在文檔的根),
只要它們不直接定義的任何屬性或使用任何父選擇器引用
*/
@mixin silly-links {a {color: blue;background-color: red;}
}
@include silly-links;
/*帶參數*/
@mixin sexy-border($color, $width: 1in) {border: {color: $color;width: $width;style: dashed;}
}
p { @include sexy-border(blue); }
h1 { @include sexy-border(blue, 2in); }

?下面是一個按鈕樣式制作例子:

.button-narmol{position: relative;margin-left: auto;margin-right: auto;box-sizing: border-box;text-align: center;text-decoration: none;color: #FFFFFF;border-radius: 3px;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);overflow: hidden;cursor:pointer;&:after{content: " ";width: 200%;height: 200%;position: absolute;top: 0;left: 0;border: 1px solid rgba(0, 0, 0, 0.2);-webkit-transform: scale(0.5);transform: scale(0.5);-webkit-transform-origin: 0 0;transform-origin: 0 0;box-sizing: border-box;border-radius: 10px;}
}
@mixin button-style-block($select,$color,$darken){#{$select}{display: block;padding-left: 14px;padding-right: 14px;font-size: 16px;line-height: 2.55555556;background-color: darken($color,$darken);@extend .button-narmol;&:active{background-color: darken($color,$darken+10%);}}
}
@mixin button-style-inline-block($select,$color,$darken){#{$select}{background-color: darken($color,$darken);display: inline-block;padding: 0 1.32em;line-height: 2.3;font-size: 13px;@extend .button-narmol;&:active{background-color: darken($color,$darken+10%);}}
}
@include button-style-block(".krui-btn_primary",#1AAD19,10%);
@include button-style-block(".krui-btn_error",#E64340,0%);
@include button-style-inline-block(".krui-btn_primary-small",#1AAD19,0%);

只要在html中調用即可。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>button</title><link rel="stylesheet" href="css/button.css"><style type="text/css">span{margin-bottom: 20px;}</style>
</head>
<body><span class="krui-btn_primary">登錄</span><span class="krui-btn_primary-small">登錄</span><span class="krui-btn_primary-small">登錄</span><span class="krui-btn_primary-small">登錄</span><span class="krui-btn_primary-small">登錄</span><span class="krui-btn_error">登錄</span><span class="krui-btn_primary">登錄</span><span class="krui-btn_primary">登錄</span>
</body>
</html>?

?

補充:1、不生成緩存

2、編譯中文出現類似Syntax error: Invalid GBK character “\xE5″的錯誤解決方法:

找到這個文件,在require.XXX后面添加一行代碼:Encoding.default_external = Encoding.find('utf-8')

如果還不行,檢查一下文件夾名和文件名是否用了中文,改英文試試?

上班期間偷偷花了好多時間寫了本文,希望對大家有用,另外也請尊重下原創,轉載寫明出處。-------博客園.我是水魚

sass中文文檔:http://www.css88.com/doc/sass/

后續補充:

最近換系統,換了win10,需要重裝sass,待我裝完ruby,安裝sass時出現問題,如下:

原因:ruby證書不對。

解決方法:

1、打開http://curl.haxx.se/cs/cscert.pem,下載證書并保存為cscert.pem文件(Ctrl+s保存為即可)。

2、將cscert.pem放在Ruby23-x64目錄下(其實放哪都無所謂)

3、設置環境變量中的系統變量(修改環境變量的方法不了解的可以百度一下)

4、重開一次ruby,再次下載,成功如下

轉載于:https://www.cnblogs.com/wuzhiquan/p/5912146.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260466.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260466.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260466.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql 主從優點_MySql主從配置實踐及其優勢淺談

1、增加兩個MySQL,我將C:\xampp\mysql下的MYSQL復制了一份&#xff0c;放到D:\Mysql2\Mysql5.1修改my.ini(linux下應該是my.cnf)&#xff1a;[client]port 3307[mysqld]port 3307basedirD:/Mysql2/Mysql5.1/mysqldatadirD:/Mysql2/Mysql5.1/mysql/data/之后&#xff0c;再增加…

python 多線程并發編程(生產者、消費者模式),邊讀圖像,邊處理圖像,處理完后保存圖像實現提高處理效率

文章目錄需求實現先導入本次需要用到的包一些輔助函數如下函數是得到指定后綴的文件如下的函數一個是讀圖像&#xff0c;一個是把RGB轉成BGR下面是主要的幾個處理函數在上面幾個函數構建對應的處理函數main函數按順序執行結果需求 本次的需求是邊讀圖像&#xff0c;邊處理圖像…

Sharepoint學習筆記—Site Definition系列-- 2、創建Content Type

Sharepoint本身就是一個豐富的大容器&#xff0c;里面存儲的所有信息我們可以稱其為“內容(Content)”&#xff0c;為了便于管理這些Conent&#xff0c;按照人類的正常邏輯就必然想到的是對此進行“分類”。分類所涉及到的層面又必然包括: 1、分類的標準或特征描述{即&#xf…

arduino byte轉string_Java數組轉List集合的三駕馬車

點擊上方 藍字關注我們來源&#xff1a;blog.csdn.net/x541211190/article/details/79597236前言本文中的代碼命名有的可能不太規范&#xff0c;是因為沒法排版的問題&#xff0c;小仙已經很努力去解決了&#xff0c;希望各位能多多點贊、分享。好了&#xff0c;不多bb了(不要讓…

ES6筆記(4)-- Symbol類型

系列文章 -- ES6筆記系列 Symbol是什么&#xff1f;中文意思是標志、記號&#xff0c;顧名思義&#xff0c;它可以用了做記號。 是的&#xff0c;它是一種標記的方法&#xff0c;被ES6引入作為一種新的數據類型&#xff0c;表示獨一無二的值。 由此&#xff0c;JS的數據類型多了…

mysql類型說明_MYSQL 數據類型說明

MySQL支持大量的列類型&#xff0c;它可以被分為3類&#xff1a;數字類型、日期和時間類型以及字符串(字符)類型。本節首先給出可用類型的一個概述&#xff0c;并且總結每個列類型的存儲需求&#xff0c;然后提供每個類中的類型性質的更詳細的描述。概述有意簡化&#xff0c;更…

LeetCode OJ - Convert Sorted List to Binary Search Tree

題目&#xff1a; Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST. 解題思路&#xff1a; 注意是讓構造平衡二叉搜索樹。 每次將鏈表從中間斷開&#xff0c;分成左右兩部分。左邊部分用來構造左子樹&#xff…

手把手教你如下在Linux下如何寫一個C語言代碼,編譯并運行

文章目錄手把手教你如下在Linux下如何寫一個C語言代碼&#xff0c;編譯并運行打開Ubuntu終端創建 helloworld.c編譯C文件手把手教你如下在Linux下如何寫一個C語言代碼&#xff0c;編譯并運行 打開Ubuntu終端 我這里的終端是Windows下的WSL&#xff0c;如果有疑問&#xff0c;…

郵件群發工具的編寫(二)數據的保存

數據的保存與讀取 人類是在不斷探索與改進中進步的 上一篇&#xff0c;郵件群發工具的編寫&#xff08;一&#xff09;郵件地址提取&#xff0c;我們講到了郵箱的提取。 那么這一篇&#xff0c;講一下提取完的郵箱信息的保存和讀取。 首先&#xff0c;我希望對上一篇郵箱提取類…

mysql 文件描述符_MySQL沒有發布臨時文件描述符

幾天前,我們遇到了MySQL安裝的一些嚴重問題&#xff1a;MySQL不斷打開臨時文件(正常行為)但這些文件從未發布過.結果是,最終磁盤空間耗盡,我們必須重新啟動服務并手動清理/ tmp.使用lsof,我們看到這樣的事情&#xff1a;mysqld 16866 mysql 5u REG 8,3 0 692 /tmp/ibyWJylQ (de…

c++ lambda函數_C++11 之 lambda函數的詳細使用

1. lambda 函數概述lambda 表達式是一種匿名函數&#xff0c;即沒有函數名的函數&#xff1b;該匿名函數是由數學中的λ演算而來的。通常情況下&#xff0c;lambda函數的語法定義為&#xff1a;[capture] (parameters) mutable ->return-type {statement}其中&#xff1a;[c…

zabbix監控 openstack 的實例的資源使用情況

領導提出的需求&#xff1a;在不給云主機安裝客戶端的情況下&#xff0c;監控云主機的 cpui 內存 網絡 io&#xff0c;并且能出圖。想了幾個方案&#xff1a;1、ceilometer取數據&#xff0c;存入mangodb&#xff0c;用zabbix來讀mangodb數據繪圖2 ceilometer 取數據 &#xff…

pytorch 正向與反向傳播的過程 獲取模型的梯度(gradient),并繪制梯度的直方圖

記錄一下怎樣pytorch框架下怎樣獲得模型的梯度 文章目錄引入所需要的庫一個簡單的函數模型梯度獲取先定義一個model如下定義兩個獲取梯度的函數定義一些過程與調用上述函數的方法可視化一下梯度的histogram引入所需要的庫 import os import torch import torch.nn as nn impor…

2012-9

響應式設計的典范 http://www.bostonglobe.com/ 網站測試頁面 http://www.webpagetest.org/ 編程算法 http://blog.sina.com.cn/s/articlelist_1647038822_1_1.html C Programmers Cookbook http://www.cppblog.com/mzty/category/7609.html Blade 是一個現代構建系統&#xff…

PV操作 (轉載)

PV操作與信號量的處理相關&#xff0c;P表示通過的意思&#xff0c;V表示釋放的意思。信號量是最早出現的用來解決進程同步與互斥問題的機制&#xff0c;包括一個稱為信號量的變量及對它進行的兩個原語操作。 信號量&#xff08;semaphore&#xff09;的數據結構為一個值和一個…

ubuntu升級python_Ubuntu 升級python3為更高版本【已實測】

2020-04-13 更新安裝步驟&#xff1a; 1. 先update一下 sudo apt update 2. 安裝依賴庫 sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev liblzma-d…

mysql5.0 java連接_Java連接mysql5.0

網上的資料真爛&#xff0c;千篇一律的拷貝的&#xff0c;根本不能用&#xff0c;鄙視&#xff01; 正題&#xff1a; 到MYSQL網站下載mysql-connector-java-5.0.4.zip文件&#xff0c;解壓&#xff1b; 解壓后有一個文件&#xff1a;mysql-connector-java-5.0.4-bin.jar 把這個…

Framework打包

2019獨角獸企業重金招聘Python工程師標準>>> iOS app需要在許多不同的CPU架構下運行&#xff1a; arm7: 在最老的支持iOS7的設備上使用 arm7s: 在iPhone5和5C上使用 arm64: 運行于iPhone5S的64位 ARM 處理器 上 i386: 32位模擬器上使用 x86_64: 64為模擬器上使用…

windows 10 下利用WSL的Linux環境實現vscode C/C++環境的配置

本文主要結合二個工具&#xff0c;介紹如何在windows搭建Linux開發環境&#xff1a; WSL(Windows Subsystem for Linux)VSCode(Visual Studio Code) 文章目錄WSL安裝VSCode安裝配置Linux下的C/C環境1. 打開WSL的控制臺2. 更新ubuntu軟件3. 安裝GCC和GDB4. 配置VSCode(1). 打開…

java類初始化順序

轉自&#xff1a;http://zangweiren.iteye.com/blog/208122 對于靜態變量、靜態初始化塊、變量、初始化塊、構造器&#xff0c;它們的初始化順序以此是&#xff08;靜態變量、靜態初始化塊&#xff09;>&#xff08;變量、初始化塊&#xff09;>構造器。我們也可以通過下…