less学习小总结

less特点

学习一门语言或者技术之前要知道它是什么,怎么使用,有什么特点,能解决什么样的问题。

(百度了很多关于less使用的文章,但是都不尽如人意,大多都是介绍less的优点,和sass的对比,至于具体怎样使用说的都是很模糊的,看了文章之后还是不知道怎样着手去做,所以我就自己去摸索,在学习过程中把每一步都进行了总结,希望能帮到想学习less的同源人。)

less:

一、它是一门css预处理器

二、使用:安装node(可参考我之前的文章),新建一个项目文件夹,点击右键打开git bash,在终端中输入命令行

npm install -g less

完成安装之后如下图所示:

在项目文件下新建一个index.less(名字随便起)的文件,然后进行编译,在终端中输入

lessc index.less > index.css

不报错证明编译成功。在html中引入该index.css文件,更改index.less中的代码,需重新编译后同步到index.css文件中。

三、特点:

1、可声明变量:

less代码:

@background-color: #ffffff;
@text-color: #1A237E;
p{
      background-color: @background-color;
      color: @text-color;
      padding: 15px;
}
ul{
      background-color: @background-color;
}
li{
      color: @text-color;
}

编译完之后的css代码:

p{
    background-color: #ffffff;
    color: #1A237E;
    padding: 15px;
}
ul{
    background-color: #ffffff;
}
li{
    color: #1A237E;
}

如果需要修改p标签和ul标签的background-color,只需要修改声明的变量即可;

2、Maxin

Less 允许我们将已有的 class 和 id 的样式应用到另一个不同的选择器上。 下面这个例子可以清楚地说明这一点。

#circle{
  background-color: #4CAF50;
  border-radius: 100%;
}
#small-circle{
  width: 50px;
  height: 50px;
  #circle
}
#big-circle{
  width: 100px;
  height: 100px;
  #circle
}

将其转换成 CSS 代码如下

#circle {
    background-color: #4CAF50;
    border-radius: 100%;
}
#small-circle {
    width: 50px;
    height: 50px;
    background-color: #4CAF50;
    border-radius: 100%;
}
#big-circle {
    width: 100px;
    height: 100px;
    background-color: #4CAF50;
    border-radius: 100%;
}

如果你不想 mixin 也以一种规则的形式出现在 CSS 代码中,那么你可以在它的后面加上括号:

#circle(){
    background-color: #4CAF50;
    border-radius: 100%;
}
#small-circle{
    width: 50px;
    height: 50px;
    #circle
}
#big-circle{
    width: 100px;
    height: 100px;
    #circle
}

此时编译成 CSS :

#small-circle {
    width: 50px;
    height: 50px;
    background-color: #4CAF50;
    border-radius: 100%;
}
#big-circle {
    width: 100px;
    height: 100px;
    background-color: #4CAF50;
    border-radius: 100%;
}

Mixin 另一个比较酷的功能就是它支持传入参数,下面这个例子就为 circle 传入一个指定宽高的参数,默认是 25px。 这将创建一个 25×25的小圆和一个 100×100 的大圆。

#circle(@size: 25px){
    background-color: #4CAF50;
    border-radius: 100%;
    width: @size;
    height: @size;
}
#small-circle{
    #circle
}
#big-circle{
    #circle(100px)
}

转换成 CSS :

#small-circle {
    background-color: #4CAF50;
    border-radius: 100%;
    width: 25px;
    height: 25px;
}
#big-circle {
    background-color: #4CAF50;
    border-radius: 100%;
    width: 100px;
    height: 100px;
}

3、嵌套

嵌套可用于以与页面的HTML结构相匹配的方式构造样式表,同时减少了冲突的机会。下面是一个无序列表的例子。

ul{
    background-color: #03A9F4;
    padding: 10px;
    list-style: none;

    li{
        background-color: #fff;
        border-radius: 3px;
        margin: 10px 0;
    }
}

编译成 CSS 代码:

ul {
    background-color: #03A9F4;
    padding: 10px;
    list-style: none;
}
ul li {
    background-color: #fff;
    border-radius: 3px;
    margin: 10px 0;
}

就像在其它高级语言中一样, Less 的变量根据范围接受它们的值。如果在指定范围内没有关于变量值的声明, less 会一直往上查找,直至找到离它最近的声明。

回到 CSS 中来,我们的 li 标签将有白色的文本,如果我们在 ul 标签中声明 @text-color 规则。

@text-color: #000000;
ul{
    @text-color: #fff;
    background-color: #03A9F4;
    padding: 10px;
    list-style: none;
    li{
        color: @text-color;
        border-radius: 3px;
        margin: 10px 0;
    }
}

编译生成的 CSS 代码如下:

ul {
    background-color: #03A9F4;
    padding: 10px;
    list-style: none;
}
ul li {
    color: #ffffff;
    border-radius: 3px;
    margin: 10px 0;
}

4、运算

你可以对数值和颜色进行基本的数学运算。比如说我们想要两个紧邻的 div 标签,第二个标签是第一个标签的两倍宽并且拥有不同的背景色。

@div-width: 100px;
@color: #03A9F4;
div{
    height: 50px;
    display: inline-block;
}
#left{
    width: @div-width;
    background-color: @color - 100;
}
#right{
    width: @div-width * 2;
    background-color: @color;
}

编译成 CSS 如下:

div {
    height: 50px;
    display: inline-block;
}
#left {
    width: 100px;
    background-color: #004590;
}
#right {
    width: 200px;
    background-color: #03a9f4;
}

5、函数

Less 中也有函数,这让它看起来像一门编程语言了,不是吗?

让我们来看一下 fadeout, 一个降低颜色透明度的函数。

@var: #004590;

div{
  height: 50px;
  width: 50px;
  background-color: @var;
  &:hover{
    background-color: fadeout(@var, 50%)
  }
}

编译成 CSS 如下所示:

div {
    height: 50px;
    width: 50px;
    background-color: #004590;
}
div:hover {
    background-color: rgba(0, 69, 144, 0.5);
}

js里面插入媒体查询

js里面插入媒体查询

var mq=window.matchMedia('screen and (min-width: 800px)');

//当媒体查询的状态改变时,例如页面由799变成了801px
mq.addListener(widthWatch);
function widthWatch(){
       if(mq.matches){
        //........满足条件
    }else{
        //........
    }
}
widthWatch();

js获取url地址中带有的参数

如何用js获取url地址中带有的参数

如:url = http://www.baidu.com?id=2&http://www.genhao.cn

function GetUrlValue() {
    var url = location.search; //获取url中"?"符后的字串
    var theRequest = new Object();
    if (url.indexOf("?") != -1) {
        var str = url.substr(1);
        strs = str.split("&");
        for(var i = 0; i < strs.length; i ++) {
             theRequest[strs[i].split("=")[0]]=(strs[i].split("=")[1]);
        }
    }
    return theRequest;
}
var Value = new Object();
Value = GetUrlValue();

如果想要获取url后面的id=index,

var val = Value["id"];
console.log(val);  // 2

如果想要获取url(id)后面的参数:

var val = Value["url"];
console.log(val);  // http://www.genhao.cn

亲测可用!

img标签间距问题.原因及解决方法md

img标签间距产生的原因

块级元素包含内联元素如图片文字等时,内联元素默认是和父级元素的baseline(基线)对齐的,而baseline又和父级元素底边有一定的距离(这个距离和font有关,不一定是5px),所以以上代码的效果中不同div之间有间隙,这是因为图片与父元素的底边有距离。说到baseline呢,其实它是vertical-align属性的默认值,vertical-align属性是设置元素的垂直排列的,用来定义行内元素的基线相对于该元素所在行的基线的垂直对齐,除了baseline对齐方式之外,还可以是sub | super | top | text-top | middle | bottom | text-bottom |inherit(任何的版本的Internet Explorer (包括 IE8)都不支持属性值 “inherit”)。

解决方法

1、设置img的vertical-align属性为bottom;

2、给父元素加上font-size:0的属性,既然这个距离和font有关,那么把字体大小设为0,总该没有距离了吧;

3、给父元素加上line-height,设置line-height不大于12px就能够消除间隙了。

div+css简单三角形绘制

div+css简单三角形绘制原理

主要原理是利用了相邻两个边框的接壤处分配原则,如果没有宽度和高度的话,其实应该是四个三角形接成的矩形。

在矩形的直角,两条边的样式要均分,比如左上角 border-top 和 border-left 的样式要均分,如果border-left 无色透明, border-top有色, 就会出来一个45度的锐角。

代码如下:

<style>
    .box{
        width:0; 
        height:0;
        line-height:0;
        border:100px solid transparent; 
        border-bottom-color:#ccc;
        border-top:0;
    }
</style>
    <div class="box"></div>

效果如图:

新的layout布局

要点:

A.Layout属性:等同于原来的MasterPageFile属性。

B.@RenderBody()方法:直接渲染整个View到占位符处,而不需要原来所使用的<asp:Content />。

C.@RenderPage()方法:渲染指定的页面到占位符处。

D.@RenderSection方法:声明一个占位符,和原来的<asp:ContentPlaceHolder />功能类似。

E.@section标记:对@RenderSection方法声明的占位符进行实现,和原来的<asp:Content />功能类似。

1.@RenderBody()方法的使用

首先在~/Views/Shared/下创建一个名为_MyLayout.cshtml的LayoutPage文件,并将默认的内容替换为如下:

<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>
</head>
<body>
    <div>
        开始渲染Body<br />
        @RenderBody()
        渲染Body结束<br />
    </div>
</body>
</html>

然后打开在~/Views/Home/Index.cshtml文件并替换为如下的内容:

@{
    ViewBag.Title = "首页";
}
<div>
    	这里就是渲染Body啦。
</div>

最后别忘记把/Views/_ViewStart.cshtml中的Layout属性改为:
Layout = “
/Views/Shared/_MyLayout.cshtml”;

浏览器输出:

开始渲染Body

这里就是渲染Body啦。

渲染Body结束

在此,你或许会有疑问了.在_Layout中定义的RenderBody()是Render那个页啊?

答:其实最后Render页的归属就是Render你所访问的那个页,比如你访问/Home/Index.那么Render就是Home控制器下的Index.cshtml这个文件, 如果访问的是/Ohter/SomePage时,那么Render的是Ohter控制器下的SomePage这个.cshtml!

2.@RenderPage()方法的使用

在~/Views/Home/文件夹下新建立一个ViewPage1.cshtml文件,将内容改为如下:

<div>
        这里是~/Views/Home/ViewPage1.cshtml
</div>

并在原来的_MyLayout.cshtml文件中增加几行代码变成下面的这个样子:

<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>
</head>
<body>
    <div>
        开始渲染Body<br />
        @RenderBody()
        渲染Body结束<br />
        <br />
        开始渲染其他页1<br />
        @RenderPage("~/Views/Home/ViewPage1.cshtml")
        渲染其他页结束1<br />
        开始渲染其他页2<br />
        @RenderPage("~/Views/Home/ViewPage1.cshtml")
        渲染其他页结束2<br />
        开始渲染其他页3<br />
        @RenderPage("~/Views/Home/ViewPage1.cshtml")
        渲染其他页结束3<br />
    </div>
</body>
</html>

在这里记住:@RenderBody()只能在_Layout.cshtml中使用一次,而@RenderPage()则可以使用多次!另外@RenderPage()是直接定位View页面,不会运行对应的Action方法。

3.@RenderSection方法和@section标记

@RenderSection()方法等价于<asp:ContentPlaceHolder />,用途为在Layout中声明一个占位符.
在原来的_MyLayout.cshtml文件中更改内容为如下:

<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>
</head>
<body>
    <div>
        开始渲染Body<br />
        @RenderBody()
        渲染Body结束<br />
        <br />
        开始渲染其他页1<br />
        @RenderPage("~/Views/Home/ViewPage1.cshtml")
        渲染其他页结束1<br />
        开始渲染其他页2<br />
        @RenderPage("~/Views/Home/ViewPage1.cshtml")
        渲染其他页结束2<br />
        开始渲染其他页3<br />
        @RenderPage("~/Views/Home/ViewPage1.cshtml")
        渲染其他页结束3<br />
        <br />
        HOHO,开始学习Section了<br />
        开始渲染Section<br />
        声明方式1(推荐):SectionA:<br />
        @RenderSection("SectionA", false)
        -------<br />
        
        声明方式2:SectionB:<br />
        @{
            if (IsSectionDefined("SectionB"))
            {
                @RenderSection("SectionB")
            }
        }
        -------<br />
        渲染Sction结束<br />
    </div>
</body>
</html>

在~/Views/Home/Index.cshtml中更改为如下内容:

@{
    ViewBag.Title = "首页";
}

@section SectionA{
    <div>这里是SectionA:也不需要写神马runat="server"啊,有木有</div>
}

@section SectionB{
    <div>这里是SectionB:也不需要写神马&lt;asp:Content /&gt啊,有木有</div>
}

<div>
    这里就是渲染Body啦.~~不需要写神马&lt;asp:Content /&gt;,其实因为RenderBody()不在有歧义.
</div>

最后显示结果:
开始渲染Body

这里就是渲染Body啦.

渲染Body结束

开始渲染其他页1

这里是~/Views/Home/ViewPage1.cshtml

str1

str2
渲染其他页结束

开始渲染其他页2

这里是~/Views/Home/ViewPage1.cshtml

str1

str2

渲染其他页结束

开始渲染其他页3

这里是~/Views/Home/ViewPage1.cshtml

str1

str2

渲染其他页结束

HOHO,开始学习Section了

开始渲染Section

声明方式1(推荐):SectionA:

这里是SectionA


声明方式2:SectionB:

这里是SectionB


渲染Sction结束

问:为什么为什么要推荐方式1呢?

答:因为RenderSection()方法有2个重载.

如果使用第一个只接受一个string类型参数的重载的话.~如果你在具体的View中没有利用@section来定义实现的话,运行会报错.所以需要配合另外一个方法IsSectionDefined()来使用,才能防止报错.

而使用第2个重载就可以利用第二个bool类型的参数指明该Section是否为必须的.所以可以在使用该RenderSection方法的时候直接利用第二个重载,再把bool参数值设为false。

meta标签里的content属性

META

meta标签分两大部分:HTTP标题信息(http-equiv)和页面描述信息(name)。

<meta name="apple-touch-fullscreen" content="yes">

添加到主屏幕“后,全屏显示

<meta name="apple-mobile-web-app-capable" content="yes" />

这meta的作用就是删除默认的苹果工具栏和菜单栏。

content有两个值”yes”和”no”,当我们需要显示工具栏和菜单栏时,这个行meta就不用加了,默认就是显示。

<meta name=”apple-mobile-web-app-status-bar-style” content=black” /> 

默认值为default(白色),可以定为black(黑色)和black-translucent(灰色半透明)。

一般放这三个足已

<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<meta http-equiv="description" name="description" content="描述">
<meta name="keywords" http-equiv="keywords" content="关键字">

windows上搭建hexo博客

主要步骤:

在windows上下载的git软件,可在官网上下载(太慢,有时候中间会出现网络错误导致文件下载不下来,亲自试过),强烈建议在电脑上的软件管理上下载,这样可以匹配到自己电脑上的操作系统位数。

安装的过程不说了,成功安装后,随便在某处单机右键会出现Git Bash Here的标志。

安装hexo:

npm install -g hexo

之后在你喜欢的某盘下(我的在e盘)创建hexo文件夹,cd hexo,单机右键选择git bash here,输入命令行

hexo init
hexo generate
hexo server

一个命令一个命令来,输入hexo s(hexo server)后会出现一个localhost:4000的连接,复制到浏览器中可以观看搭建好的博客。

在windows上搭建hexo博客跟在mac上大致一样,可参考我之前发布的文章。

文档编写:

mac上可以选择Mou这个软件编写.md的文档,windows上可以用MarkdownPad2,前去下载

github仓库的创建与推送

github仓库的创建

首先你要先注册一个github账号,具体可参考以下介绍:

第一步:

第二步:

第三步:

第四步:


**OK!!!**
## github仓库的推送

第一步:

选择一个合适的地方,创建一个文件夹,

$ mkdir learngit
$ cd github
$ pwd

pwd命令用于显示当前目录。

第二步:

通过git init命令把这个目录变成Git可以管理的仓库:

$ git init

瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

第三步:

用命令git add告诉Git,把文件添加到仓库:

$ git add readme.txt

第四步:

用命令git commit告诉Git,把文件提交到仓库:

$ git commit -m "wrote a readme file"

git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

第五步:

线上仓库与本地文件连接:

git remote add origin 仓库路径

第六步:

提交到线上:

git push -u origin master

hexo博客的搭建与遇到的问题解答

1、安装Git

从Git官网上下载,如果电脑安装过Xcode就不用下载了,因为Xcode自带Git。

2、安装node.js

hexo是一个基于bode.js的静态博客生成器,要先安装node.js才能保证hexo的正常运行。

下载地址https://nodejs.org/en/,推荐下载v4.4.4LTS稳定版。

安装之后打开终端,输入

node -v

出现node.js版本号,表示安装成功。

3、安装hexo

推荐用node.js自带的npm安装,在终端中输入以下指令:

sudo npm install -g hexo

mpm install hexo-deployer-git -save

4、初始化hexo

新建一个blog文件夹,路径自行选择,并在该文件夹下初始化hexo:

mkdir blog (新建一个文件夹)

cd blog (进入一个文件夹)

hexo init (初始化)

npm install (npm安装)

5、本地启动测试

hexo server 或者缩写 hexo s

在浏览器中输入 http://localhost:4000就可以查看自己新建的一个博客。

6、新建github仓库并获取二级域名

  • 先去github官网注册一个自己的账号
  • 新建repository
  • 登录github账号后,点击右上角的“+”号按钮,选择“New repository”
  • 在repository name栏中填写:用户名.github.io

注:用户名要和github账号用户名一致,仓库右上部分HTTPS中的内容即为二级域名。

7、生成SSH Keys

目的是为了将本地git项目与github建立联系。

登录github,找到右上角三角形,依次点击settings > SHH and GPG keys > New SSH key,自己起个title,接下来获取密钥。

在终端输入:

ssh-keygen

vim ~/.ssh/id_rsa.pub

多按几次回车,生成密钥。

众所周知,在OS系统中,复制文件内容到剪贴板的命令是:

pbcopy < ~/.ssh/id_rsa.pub

在Win7或者Win10下这条命令就没用了。可以这样:

clip < ~/.ssh/id_rsa.pub

8、修改上传地址

打开你init生成的blog文件夹下的_config.yml文件

找到deploy

添加type: git

再添加一个属性repo:加上你的github仓库的HTTPS地址保存即可。

9、添加博文

hexo new “filename”
eg:hexo new 我的第一篇博客

或者直接在source/_posts文件夹下直接创建一个以.md为后缀的文件。

完成后在终端中输入:

hexo g
hexo d

这样就搭建好了属于自己的博客。

PS:以下为next博客主题供参考http://theme-next.iissnan.com/getting-started.html#menu-settings

10、可能遇到的问题:

1、部署时出现:Error:EACCES,open ‘/Users/Desktop/hexo/public/js/script.js’
原因:权限问题。

解决方法:在部署命令前加sudo。

2、deployer找不到git:ERROR Deployer not found: git

解决方法:

在终端输入:npm install hexo-deployer-git --save

3、hexo报错

{ [Error: Cannot find module './build/Release/DTraceProviderBindings'] code: 	'MODULE_NOT_FOUND' }
{ [Error: Cannot find module './build/default/DTraceProviderBindings'] code: 	'MODULE_NOT_FOUND' }
{ [Error: Cannot find module './build/Debug/DTraceProviderBindings'] code: 	'MODULE_NOT_FOUND' }

解决方法:

$ npm install hexo --no-optional

4、Warning: Permanently added the RSA host key for IP address ‘192.30.253.113’ to the list of known hosts. Permission denied (publickey). fatal: Could not read from remote repository.

未获得ssh秘钥,可参考第7条获得秘钥。

5、bash: /dev/tty: No such device or address
error: failed to execute prompt script (exit code 1)
fatal: could not read Username for ‘https://github.com‘: No erro

将配置文件_config.yml中的deploy:https换成ssh;