1. 程式人生 > >less在瀏覽器直接使用以及rem佈局

less在瀏覽器直接使用以及rem佈局

less的語法

  1. 註釋
    • // 只在less中顯示
    • /**/ 會在編譯好的css檔案中顯示
  2. 變數
    • 定義變數用@
      • less中的寫法
      @ly_width:100px;
      .box {
          width:@ly_width;
      }
      • 編譯後在css中顯示的是
      .box {
          width:100px;
      }
  3. 混合
    • 不帶引數的混合
      • 先上less中的程式碼 如果想在.one中應用.border的樣式怎麼辦?
      @ly_width:100px;
      @ly_height:200px;
      @ly_color:green;
      .border {
          border:1px solid red;
      }
      .one {
          width:@ly_width;
          height:@ly_height;
          background-color:@ly_color;
      }
      • 寫成下面的樣子
      @ly_width:100px;
      @ly_height:200px;
      @ly_color:green;
      .border {
          border:1px solid red;
      }
      .one {
          width:@ly_width;
          height:@ly_height;
          background-color:@ly_color;
          .border;
      }
      • 編譯後在css中顯示的是
        .border { border:1px solid red; } .one { width: 100px; height: 200px; background-color: #008000; border: 1px solid red; }
    • 帶引數的混合---不帶預設值 (可以傳多個引數,以逗號或者分號隔開,推薦用分號 下面以一個引數為例)
      • less中的寫法
      @ly_width:100px;
      @ly_height:200px;
      @ly_color:green;
      .border(@border_width) {
          border:@border_width solid red;
      }
      .one {
          width:@ly_width;
          height:@ly_height;
          background-color:@ly_color;
          .border(1px);
      }
      • 編譯後在css中顯示的是
      .one {
          width: 100px;
          height: 200px;
          background-color: #008000;
          border: 1px solid #ff0000;
      }
    • 帶引數的混合---帶預設值 (可以傳多個引數 下面以一個引數為例)
      • less中的寫法
      @ly_width:100px;
      @ly_height:200px;
      @ly_color:green;
      .border(@border_width:3px;) {
          border:@border_width solid red;
      }
      .one {
          width:@ly_width;
          height:@ly_height;
          background-color:@ly_color;
          .border();
      }
      • 編譯後在css中顯示的是
      .one {
          width: 100px;
          height: 200px;
          background-color: #008000;
          border: 3px solid #ff0000;
      }
    • 在解決css3相容性時候經常用到
      • 解決border-radius相容
      .border_radius (@radius: 5px) {
          -webkit-border-radius: @radius;
          -moz-border-radius: @radius;
          -ms-border-radius: @radius;
          -o-border-radius: @radius;
          border-radius: @radius;
      }
  4. 匹配模式
    • 可以理解成if 和上面的混合有些相似
      • less中的寫法
      //定義上,下,左,右邊框的樣式
      .border(top;@border_width:5px;@border_color:red){
          border-top:@border_width solid @border_color;
      }
      .border(bottom;@border_width:5px;@border_color:red){
          border-bottom:@border_width solid @border_color;
      }
      .border(left;@border_width:5px;@border_color:red){
          border-left:@border_width solid @border_color;
      }
      .border(right;@border_width:5px;@border_color:red){
          border-right:@border_width solid @border_color;
      }
      //如果想寫通用的樣式 可以在下面的程式碼中寫 格式是固定的 
      .border(@_,@border_width:5px;@border_color:red){
          border-color:yellow;
      }
      .border_use1 {
          //選擇和if差不多 如果是left就呼叫上面對應的
          .border(left);
      }
      .border_use2 {
          //選擇和if差不多 如果是right就呼叫上面對應的
          .border(right);
      }
      • 編譯後在css中顯示的是
      .border_use1 {
          border-left:5px solid #ff0000;
          border-color:yellow;
      }
      .border_use2 {
          border-right:5px solid #ff0000;
          border-color:yellow;
      }
  5. 運算
    • 運算提供了加,減,乘,除操作,還可以做屬性值和顏色的運算...
      • less中的寫法
      @ly_width:100px;
      .one {
          width:@ly_widht + 100;
      }
      • 編譯後在css中顯示的是
      .one {
          width:200px;
      }
  6. 巢狀
    • 可以在一個選擇器中巢狀另一個選擇器,程式碼看起來層次分明,提高程式碼可維護性
      • html結構
      <div class="one">
          <div class="two"></div>
      </div>
      • less中的寫法
      @ly_width:100px;
      @ly_height:200px;
      @ly_color:red;
      .one {
          width:@ly_width;
          height:@ly_height;
          background-color:@ly_color;
          .two {
              background-color: green;
          }
      }
      • 編譯後在css中顯示的是
      .one {
      width: 100px;
      height: 200px;
      background-color: #ff0000;
      }
      .one .two {
        background-color: green;
      }
  7. @arguments變數
    • 可以包含所有的變數,將變數一起處理
      • less中的寫法
      //和前面提到的混合一起舉個栗子  
      .border(@border_width;@border_style;@border_color){
          border:@arguments;
      }
      .one {
          .border(1px;solid;red);
      }
      • 編譯後在css中顯示的是
      .one {
          border:1px solid #ff0000;
      }

text.less程式碼引入到html中 

​@charset"utf-8";
@color:red;
@fontSize:16px;
@className:box;
/*註釋:在css中可以訪問*/
//註釋:在css中不支援,不會編譯在css檔案中
//變數以@字首
//js命名與js一樣
a {
  color: @color;
  font-size:@fontSize ;
}
//變數名拼接,使用方法:@(變數)
[email protected]{className} {
  color: @color;
}​
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" type="text/less" href="test.less">
<!--//與css一樣引用,但需要注意一定要加type="text/less",不然樣式
不會被識別-->
    <script src="lib/less/less.js"></script>  <!--//通過less裡
面的ajax向伺服器請求資料,將less轉換為css-->
    <script>less.watch();</script>   <!--//不用重新整理直接出來樣式-->
</head>
<body>
<a href="javascript:;">天下第一刀,蠻三刀天下第一刀,蠻三刀
    天下第一刀,蠻三刀天下第一刀,蠻三刀天下第一刀,蠻三刀
    天下第一刀,蠻三刀天下第一刀,蠻三刀天下第一刀,蠻三刀天下
第一刀,蠻三刀天下第一刀,蠻三刀天下第一刀,蠻三刀天下第一刀,
蠻三刀天下第一刀,蠻三刀天下第一刀,蠻三刀天下第一刀,蠻三刀
天下第一刀,蠻三刀天下第一刀,蠻三刀天下第一刀,蠻三刀天下第
一刀,蠻三刀天下第一刀,蠻三刀天下第一刀,蠻三刀
</a>
</body>
</html>

 

 rem佈局

   流式佈局
        響應式佈局  媒體查詢
        伸縮佈局   flex
        共同點:只能做寬度的適配(排除圖片,因為圖片有寬高自適應)都不能對height進行百分比佈局(等比縮放),只能給固定高度
        rem佈局----通過控制html上的文字大小去控制頁面上所有以rem為單位的基準值控制尺寸
        吧頁面上所有px單位換為rem單位
        怎麼換算?-------預設一個基準值  方便計算   100px = 1rem
        換算公式:當前的rem基準值= 預設基準值/設計稿的寬*當前螢幕的寬
        怎麼去改變js換算 , 媒體查詢
        裝置 320px 414px 640px
        當前裝置對應的基準值=預設/預設對應的螢幕尺寸*當前螢幕尺寸

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body{
            padding: 0;
            margin: 0;
        }
        @media(min-width: 320px) {
            html{
                font-size: 50px;
            }
        }
        @media(min-width: 414px) {
            html{
                font-size: 64px;
            }
        }
        @media(min-width: 640px) {
            html{
                font-size: 100px;
            }
        }
        .rem{
            width: 100%;
            background-color: #e20c3a;
            height: 1rem;
            line-height: 1rem;
            font-size: 0.32rem;
            text-align: center;
        }
    </style>
</head>
<body>
    <div class="rem">rem</div>
</body>
</html>