又是一篇自 W3CPLUS 中转化而来的文章。

和 W3CPLUS 上的做法,在设计上最大的不同就在于,这里我用的是多个 Mixins 函数来实现。

先总结这种做法的特点:

需要额外的标签来实现,因此可以在同一容器中插入多个三角,并且支持低版本浏览器

使用 Mixins 函数名来区分不同的三角,每个 Mixins 函数固定包含4个参数,规律已经在代码注释中说明,还是很好掌握的

P 前缀开头的是名义私有 Mixins ,供库本身调用。虽然也能外部调用,但实际意义不大。

因为我不想用太多的参数来区分不同的三角,觉得用  Mixins 函数名来区分更为直观、好记,所以也没有用的名义私有 Mixins,而不是通过控制作用域来实现真正的私有 Mixins。

多个 Mixins 函数的实现方式还有个好处,就是每个 Mixins 函数的实现都很简单直观,没有很复杂的逻辑,所以阅读起来感觉也是相对轻松点。

功能不算特别丰富,但基本能满足日常对与三角的使用。如果想要 just mobile ,且不需要同一容器中插入多个三角,可以改造成伪元素版,相信这对 LESS Developer 来说并不是难事。

/* LESS triangle Mixins 代码,命名为triangle.less */
/*
triangle 系列 Mixins
Mixins 名称中的 left ,right ,top ,bottom 描述的是三角形中90度的那个角的指向
凡是带 P 前缀的 Mixins 函数,都是名义私有 Mixins 函数,虽然也能调用,但单独调用它并无实质意义... 参数说明:
@size【必传】
三角的大小 @color【必传】
三角的颜色 @offsetSide【必传】
调整位置的匹配模式
如果 Mixins 名称是以 top 或者 bottom 为结尾,那此参数就调整水平位置,对应取值分别为 left 或者 right
如果 Mixins 名称是以 left 或者 right 为结尾,那此参数就调整垂直位置,对应取值分别为 top 或者 bottom @offset
三角的位置,根据 @offsetSide 参数的取值,以对应的 CSS 属性调整三角形的所在位置
*/
.P-triangle-el-simple(){
display: block;
width:;
height:;
position: absolute;
} .P-triangle(@size){
border: (@size / 2) solid transparent;
} .P-triangle-border(left){
border-color: transparent @color transparent transparent;
border-left-width:;
} .P-triangle-border(right){
border-color: transparent transparent transparent @color;
border-right-width:;
} .P-triangle-border(top){
border-color: transparent transparent @color transparent;
border-top-width:;
} .P-triangle-border(bottom){
border-color: @color transparent transparent transparent;
border-bottom-width:;
} .P-triangle-border(leftTop){
border-top: @size solid @color;
border-left: 0 solid transparent;
} .P-triangle-border(rightTop){
border-top: @size solid @color;
border-right: 0 solid transparent;
} .P-triangle-border(leftBottom){
border-bottom: @size solid @color;
border-left: 0 solid transparent;
} .P-triangle-border(rightBottom){
border-bottom: @size solid @color;
border-right: 0 solid transparent;
} .triangle-left(@size, @color, top, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size);
.P-triangle-border(left);
right: 100%;
top: @offset;
} .triangle-left(@size, @color, bottom, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size);
.P-triangle-border(left);
right: 100%;
bottom: @offset;
} .triangle-inner-left(@size, @color, top, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size);
.P-triangle-border(left);
right:;
top: @offset;
} .triangle-inner-left(@size, @color, bottom, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size);
.P-triangle-border(left);
right:;
bottom: @offset;
} .triangle-right(@size, @color, top, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size);
.P-triangle-border(right);
left: 100%;
top: @offset;
} .triangle-right(@size, @color, bottom, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size);
.P-triangle-border(right);
left: 100%;
bottom: @offset;
} .triangle-inner-right(@size, @color, top, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size);
.P-triangle-border(right);
left:;
top: @offset;
} .triangle-inner-right(@size, @color, bottom, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size);
.P-triangle-border(right);
left:;
bottom: @offset;
} .triangle-top(@size, @color, left, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size);
.P-triangle-border(top);
bottom: 100%;
left: @offset;
} .triangle-top(@size, @color, right, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size);
.P-triangle-border(top);
bottom: 100%;
right: @offset;
} .triangle-inner-top(@size, @color, left, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size);
.P-triangle-border(top);
bottom:;
left: @offset;
} .triangle-inner-top(@size, @color, right, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size);
.P-triangle-border(top);
bottom:;
right: @offset;
} .triangle-bottom(@size, @color, left, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size);
.P-triangle-border(bottom);
top: 100%;
left: @offset;
} .triangle-bottom(@size, @color, right, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size);
.P-triangle-border(bottom);
top: 100%;
right: @offset;
} .triangle-inner-bottom(@size, @color, left, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size);
.P-triangle-border(bottom);
top:;
left: @offset;
} .triangle-inner-bottom(@size, @color, right, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size);
.P-triangle-border(bottom);
top:;
right: @offset;
} .triangle-left-top(@size, @color, left, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size * 2);
.P-triangle-border(leftTop);
top: 100%;
left: @offset;
} .triangle-left-top(@size, @color, right, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size * 2);
.P-triangle-border(leftTop);
top: 100%;
right: @offset;
} .triangle-inner-left-top(@size, @color, left, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size * 2);
.P-triangle-border(leftTop);
top:;
left: @offset;
} .triangle-inner-left-top(@size, @color, right, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size * 2);
.P-triangle-border(leftTop);
top:;
right: @offset;
} .triangle-right-top(@size, @color, left, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size * 2);
.P-triangle-border(rightTop);
top: 100%;
left: @offset;
} .triangle-right-top(@size, @color, right, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size * 2);
.P-triangle-border(rightTop);
top: 100%;
right: @offset;
} .triangle-inner-right-top(@size, @color, left, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size * 2);
.P-triangle-border(rightTop);
top:;
left: @offset;
} .triangle-inner-right-top(@size, @color, right, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size * 2);
.P-triangle-border(rightTop);
top:;
right: @offset;
} .triangle-left-bottom(@size, @color, left, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size * 2);
.P-triangle-border(leftBottom);
bottom: 100%;
left: @offset;
} .triangle-left-bottom(@size, @color, right, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size * 2);
.P-triangle-border(leftBottom);
bottom: 100%;
right: @offset;
} .triangle-inner-left-bottom(@size, @color, left, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size * 2);
.P-triangle-border(leftBottom);
bottom:;
left: @offset;
} .triangle-inner-left-bottom(@size, @color, right, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size * 2);
.P-triangle-border(leftBottom);
bottom:;
right: @offset;
} .triangle-right-bottom(@size, @color, left, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size * 2);
.P-triangle-border(rightBottom);
bottom: 100%;
left: @offset;
} .triangle-right-bottom(@size, @color, right, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size * 2);
.P-triangle-border(rightBottom);
bottom: 100%;
right: @offset;
} .triangle-inner-right-bottom(@size, @color, left, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size * 2);
.P-triangle-border(rightBottom);
bottom:;
left: @offset;
} .triangle-inner-right-bottom(@size, @color, right, @offset: 0){
.P-triangle-el-simple();
.P-triangle(@size * 2);
.P-triangle-border(rightBottom);
bottom:;
right: @offset;
}
/* 实例要用到的LESS代码 */
@import "triangle.less";
body {
background: #fff;
}
.wrap-a, .wrap-b{
display: inline-block;
background: #f36;
margin: 20px;
padding: 10px;
width: 240px;
height: 45px;
line-height: 45px;
color: #fff;
text-align: center;
position: relative;
}
.wrap-b{
background: #ff0;
color: #f36;
} .top-l{
.triangle-top(20px, #f36, left);
}
.left-b{
.triangle-left(20px, #f36, bottom);
}
.bottom-r{
.triangle-bottom(20px, #f36, right);
}
.right-t{
.triangle-right(20px, #f36, top);
}
.top-r{
.triangle-top(20px, #f36, right);
}
.left-t{
.triangle-left(20px, #f36, top);
}
.bottom-l{
.triangle-bottom(20px, #f36, left);
}
.right-b{
.triangle-right(20px, #f36, bottom);
} .top-i-l{
.triangle-inner-top(20px, #f36, left);
}
.left-i-b{
.triangle-inner-left(20px, #f36, bottom);
}
.bottom-i-r{
.triangle-inner-bottom(20px, #f36, right);
}
.right-i-t{
.triangle-inner-right(20px, #f36, top);
}
.top-i-r{
.triangle-inner-top(20px, #f36, right);
}
.left-i-t{
.triangle-inner-left(20px, #f36, top);
}
.bottom-i-l{
.triangle-inner-bottom(20px, #f36, left);
}
.right-i-b{
.triangle-inner-right(20px, #f36, bottom);
} .leftTop-r{
.triangle-left-top(20px, #f36, right);
}
.rightTop-l{
.triangle-right-top(20px, #f36, left);
}
.leftBottom-r{
.triangle-left-bottom(20px, #f36, right);
}
.rightBottom-l{
.triangle-right-bottom(20px, #f36, left);
}
.leftTop-l{
.triangle-left-top(20px, #f36, left);
}
.rightTop-r{
.triangle-right-top(20px, #f36, right);
}
.leftBottom-l{
.triangle-left-bottom(20px, #f36, left);
}
.rightBottom-r{
.triangle-right-bottom(20px, #f36, right);
} .leftTop-i-r{
.triangle-inner-left-top(20px, #f36, right);
}
.rightTop-i-l{
.triangle-inner-right-top(20px, #f36, left);
}
.leftBottom-i-r{
.triangle-inner-left-bottom(20px, #f36, right);
}
.rightBottom-i-l{
.triangle-inner-right-bottom(20px, #f36, left);
}
.leftTop-i-l{
.triangle-inner-left-top(20px, #f36, left);
}
.rightTop-i-r{
.triangle-inner-right-top(20px, #f36, right);
}
.leftBottom-i-l{
.triangle-inner-left-bottom(20px, #f36, left);
}
.rightBottom-i-r{
.triangle-inner-right-bottom(20px, #f36, right);
}
<!-- 实例要用到的HTML代码,引入的CSS是上面两个LESS编译生成出的CSS文件 -->
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>test</title>
<link type="text/css" rel="stylesheet" href="test.css">
</head>
<body>
<div class="wrap-a">
EL1
<i class="top-r"></i>
<i class="left-t"></i>
<i class="bottom-l"></i>
<i class="right-b"></i>
</div> <div class="wrap-a">
EL2
<i class="top-l"></i>
<i class="left-b"></i>
<i class="bottom-r"></i>
<i class="right-t"></i>
</div> <div class="wrap-b">
EL3
<i class="top-i-r"></i>
<i class="left-i-t"></i>
<i class="bottom-i-l"></i>
<i class="right-i-b"></i>
</div> <div class="wrap-b">
EL4
<i class="top-i-l"></i>
<i class="left-i-b"></i>
<i class="bottom-i-r"></i>
<i class="right-i-t"></i>
</div> <div class="wrap-a">
EL5
<i class="leftTop-r"></i>
<i class="rightTop-l"></i>
<i class="leftBottom-r"></i>
<i class="rightBottom-l"></i>
</div> <div class="wrap-a">
EL6
<i class="leftTop-l"></i>
<i class="rightTop-r"></i>
<i class="leftBottom-l"></i>
<i class="rightBottom-r"></i>
</div> <div class="wrap-b">
EL7
<i class="leftTop-i-r"></i>
<i class="rightTop-i-l"></i>
<i class="leftBottom-i-r"></i>
<i class="rightBottom-i-l"></i>
</div> <div class="wrap-b">
EL8
<i class="leftTop-i-l"></i>
<i class="rightTop-i-r"></i>
<i class="leftBottom-i-l"></i>
<i class="rightBottom-i-r"></i>
</div>
</body>
</html>

最后补一发效果图:

【LESS系列】三角形Mixins的更多相关文章

  1. CSS 魔法系列:纯 CSS 绘制三角形(各种角度)

    我们的网页因为 CSS 而呈现千变万化的风格.这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果.特别是随着 CSS3 的广泛使用,更多新奇的 CSS 作品涌现出来. ...

  2. Opentk教程系列-1绘制一个三角形

    本系列教程翻译自Neo Kabuto's Blog.已经取得作者授权. 本文原文地址http://neokabuto.blogspot.com/2013/02/opentk-tutorial-1-op ...

  3. 基于Cocos2d-x学习OpenGL ES 2.0系列——你的第一个三角形(1)

    前言 在本系列教程中,我会以当下最流行的2D引擎Cocos2d-x为基础,介绍OpenGL ES 2.0的一些基本用法.本系列教程的宗旨是OpenGL扫盲,让大家在使用Cocos2d-x过程中,知其然 ...

  4. [Modern OpenGL系列(三)]用OpenGL绘制一个三角形

    本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/51347008 在上一篇文章中已经介绍了OpenGL窗口的创建.本文接着说如 ...

  5. Bootstrap系列 -- 35. 按钮的向下向上三角形

    按钮的向下三角形,我们是通过在<button>标签中添加一个“<span>”标签元素,并且命名为“caret”. <div class="btn-group d ...

  6. 学习react系列(八)—— mixins迁移

    先来介绍一下mixins(混入) 先来看一段代码: const mixin = function(obj, mixins) { const newObj = obj; newObj.prototype ...

  7. 【LESS系列】一些常用的Mixins

    在我们平时的开发中,对于一些使用频率很高的方法函数,我们一般都会将其归纳到一起,整理出一个核心库来. 其实这个思想,借助 LESS 也可以在 CSS 中得以实现. 下面是几个在 W3CPLUS 中偷过 ...

  8. HDU 4503 湫湫系列故事——植树节(单色三角形)

    题目链接 #include <cstdio> using namespace std; int main() { int n,sum,a,t,i; scanf("%d" ...

  9. Java基础系列(26)- 打印三角形

    package struct; public class TestDemo { public static void main(String[] args) { for (int i = 1; i & ...

随机推荐

  1. Jetty 源码分析

    一. 总括      你了解Jetty 吗,就像我们所熟知的Tomcat一样, Jetty是一个免费的开放源码的100%纯Java的Http服务器和Servlet容器. Jetty具备以下特点:   ...

  2. 使用Arduino Wire Library读取温湿度传感器AM2321

    AM2321是采用I2C总线或单总线通讯的国产温湿度传感器.在AM2321手册中,当采用I2C通讯时,手册指定了多处需要主机等待的时间间隔,包括: (1)唤醒传感器时,从机不回复ACK,但主机主要等待 ...

  3. 疑难杂症--SQL SERVER 18056的错误

    朋友遇到一个很棘手的问题,查看服务器日志,报以下错误: ::,spid296,未知,错误: ,严重性: ,状态: . ::,spid495,未知, The client was unable < ...

  4. Solr中的概念:分析器(analyzer)、字符过滤器(character filter)、分词器(Tokenizer)、词元过滤器(Token Filter)、 词干化(Stemming)

    文本中包含许多文本处理步骤,比如:分词,大写转小写,词干化,同义词转化和许多的文本处理. 文本分析既用于索引时对一文本域的处理,也用于查询时查询字符串的文本处理.文本处理对搜索引擎的搜索结果有着重要的 ...

  5. ASP.NET 常用的字符串加密

    字符串常用的加密有三种 1.MD5加密,这个常用于密码,单向加密,不可解密,有些在线解密的可以解大部份,用代码不能实现,如果不想让人解密,加密后随便截取一段就好了: 2.Base64位加密,通常加密后 ...

  6. nginx反向代理后abp的webapi host如何获取客户端ip?

    dotnet core 跨平台是微软伟大的创举,脱离iis后服务器成本都降低了. 问题 这不,采用abp搞了个小项目,部署到centos后发现审计日志里面的ip信息不对. 解决 这个问题在.net 4 ...

  7. Amazon新一代云端关系数据库Aurora(下)

    本文由  网易云发布. 作者:郭忆 本篇文章仅限内部分享,如需转载,请联系网易获取授权. 故障恢复 MySQL基于Check point的机制,周期性的建立redo log与数据页的一致点.一旦数据库 ...

  8. Tomcat绿色版启动"startup.bat"一闪问题的解决方法!

    进入DOS窗口,运行"startup.bat",会出现错误提示,我是win7 64位,提示“JRE_HOME”设置不正确.于是进入环境变量配置,设置“JRE_HOME”项,随后保存 ...

  9. http与https通信

    HTTP协议 http协议与https协议的区别 GET请求和POST请求的说明与比较 发送GET和POST请求(使用NSURLSession)

  10. 【OCP-12c】CUUG 071题库考试原题及答案解析(17)

    17.(7-11) choose twoView the Exhibit and examine the structure of ORDER_ITEMS and ORDERS tables.You ...