【LESS系列】三角形Mixins

.triangle-el-simple(){
  content: "";
  display: block;
  width: 0;
  height: 0;
  position: absolute;
}

.triangle(@size){
  border: (@size / 2) solid transparent;
}

.triangle-left(@size: 20px, @color: #000, @offset: 0){
  &:before{
    .triangle-el-simple();
    .triangle(@size);
    border-color: transparent @color transparent transparent;
    border-left-width: 0;
    right: 100%;
    top: @offset;
  }
}

.triangle-inner-left(@size: 20px, @color: #000, @offset: 0){
  &:before {
    .triangle-el-simple();
    .triangle(@size);
    border-color: transparent transparent transparent @color;
    border-right-width: 0;
    left: 0;
    top: @offset;
  }
}

.triangle-right(@size: 20px, @color: #000, @offset: 0){
  &:before {
    .triangle-el-simple();
    .triangle(@size);
    border-color: transparent transparent transparent @color;
    border-right-width: 0;
    left: 100%;
    top: @offset;
  }
}

.triangle-inner-right(@size: 20px, @color: #000, @offset: 0){
  &:before {
    .triangle-el-simple();
    .triangle(@size);
    border-color: transparent @color transparent transparent;
    border-left-width: 0;
    right: 0;
    top: @offset;
  }
}

.triangle-top(@size: 20px, @color: #000, @offset: 0){
  &:before {
    .triangle-el-simple();
    .triangle(@size);
    border-color: transparent transparent @color transparent;
    border-top-width: 0;
    bottom: 100%;
    left: @offset;
  }
}

.triangle-inner-top(@size: 20px, @color: #000, @offset: 0){
  &:before {
    .triangle-el-simple();
    .triangle(@size);
    border-color: @color transparent transparent transparent;
    border-bottom-width: 0;
    top: 0;
    left: @offset;
  }
}

.triangle-bottom(@size: 20px, @color: #000, @offset: 0){
  &:before {
    .triangle-el-simple();
    .triangle(@size);
    border-color: @color transparent transparent transparent;
    border-bottom-width: 0;
    top: 100%;
    left: @offset;
  }
}

.triangle-inner-bottom(@size: 20px, @color: #000, @offset: 0){
  &:before {
    .triangle-el-simple();
    .triangle(@size);
    border-color: transparent transparent @color transparent;
    border-top-width: 0;
    bottom: 0;
    left: @offset;
  }
}

.triangle-left-top(@size: 20px, @color: #000, @offset: 0){
  &:before {
    .triangle-el-simple();
    .triangle(@size * 2);
    border-top: @size solid @color;
    top: 100%;
    border-left: 0 solid transparent;
    left: @offset;
  }
}

.triangle-inner-left-top(@size: 20px, @color: #000, @offset: 0){
  &:before {
    .triangle-el-simple();
    .triangle(@size * 2);
    border-top: @size solid @color;
    border-left: 0 solid transparent;
    top: 0;
    left: @offset;
    margin-left: @size * (-1);
  }
}

.triangle-right-top(@size: 20px, @color: #000, @offset: 0){
  &:before {
    .triangle-el-simple();
    .triangle(@size * 2);
    border-top: @size solid @color;
    top: 100%;
    border-right: 0 solid transparent;
    left: @offset;
  }
}

.triangle-inner-right-top(@size: 20px, @color: #000, @offset: 0){
  &:before {
    .triangle-el-simple();
    .triangle(@size * 2);
    border-top: @size solid @color;
    top: 0;
    border-right: 0 solid transparent;
    left: @offset;
  }
}

.triangle-left-bottom(@size: 20px, @color: #000, @offset: 0){
  &:before {
    .triangle-el-simple();
    .triangle(@size * 2);
    border-bottom: @size solid @color;
    bottom: 100%;
    border-left: 0 solid transparent;
    left: @offset;
  }
}

.triangle-inner-left-bottom(@size: 20px, @color: #000, @offset: 0){
  &:before {
    .triangle-el-simple();
    .triangle(@size * 2);
    border-bottom: @size solid @color;
    bottom: 0;
    border-left: 0 solid transparent;
    left: @offset;
  }
}

.triangle-right-bottom(@size: 20px, @color: #000, @offset: 0){
  &:before {
    .triangle-el-simple();
    .triangle(@size * 2);
    border-bottom: @size solid @color;
    bottom: 100%;
    border-right: 0 solid transparent;
    left: @offset;
  }
}

.triangle-inner-right-bottom(@size: 20px, @color: #000, @offset: 0){
  &:before {
    .triangle-el-simple();
    .triangle(@size * 2);
    border-bottom: @size solid @color;
    bottom: 0;
    border-right: 0 solid transparent;
    left: @offset;
  }
}
/*

triangle 系列 Mixins
Mixins 名称中的 left ,right ,top ,bottom 描述的是三角形中90度的那个角的指向

参数说明:
@size —— 三角的大小
@color —— 三角的颜色
@offset —— 三角的位置(如果 Mixins 名称是以 top 或者 bottom 为结尾,那此参数就调整水平位置。如果 Mixins 名称是以 left 或者 right 为结尾,那此参数就调整垂直位置)
*/

body {
  background: #fff;
}
.wrap {
  display: inline-block;
  background: #ff0;
  margin: 20px;
  padding: 10px;
  width: 240px;
  height: 45px;
  line-height: 45px;
  color: #fff;
  text-align: center;
  position: relative;
}
.up{
  .triangle-bottom(10px, #f36);
}
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <link type="text/css" rel="stylesheet" href="test.css">
</head>
<body>
<div class="wrap up">Hello Sass! up</div>
</body>
</html>
时间: 2025-01-06 11:02:18

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

TypeScript手册翻译系列8-常见错误与Mixins

常见错误 下面列出了在使用TypeScript语言和编译器期间,经常会遇到的一些常见错误. "tsc.exe" exited with error code 1. 解决方案: 检查文件编码为UTF-8 - https://typescript.codeplex.com/workitem/1587 external module XYZ cannot be resolved 解决方案:检查模块路径是大小写敏感- https://typescript.codeplex.com/workit

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

[本系列转自]http://cn.cocos2d-x.org/tutorial/lists?id=79 前言 在本系列教程中,我会以当下最流行的2D引擎Cocos2d-x为基础,介绍OpenGL ES 2.0的一些基本用法.本系列教程的宗旨是OpenGL扫盲,让大家在使用Cocos2d-x过程中,知其然,更知其所以然.本系列教程不会涉及非常底层的数学原理,同时也不会过多地提及OpenGL本身的一些细节知识.但是我会在每篇文章的最后给出一些参考链接,大家可以顺藤摸瓜,一举Get OpenGL这个新

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

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

css——一起画个三角形(菜鸟起飞系列)

1.利用border特性 首先看个例子,该例的border四边的颜色不同,宽度均为50px 代码如下: width: 0; height: 0; border-top:50px solid #FFF0C4; border-left:50px solid #C7F5BC; border-right:50px solid #D9BBF3; border-bottom:50px solid #FCC2C7; 根据border的这个特性,调整border宽度和颜色组合,我们可以画出各种三角形,如: .b

数字三角形系列

P1044 数字三角形 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 09年 USACO 11月月赛  铜牌第一道 描述 示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路径,使该路径所经过的数字的总和最大. 每一步可沿左斜线向下或右斜线向下走: 1<三角形行数<25: 三角形中的数字为整数<1000: 输入格式 第一行为N,表示有N行后面N行表示三角形每条路的路径权 输出格式 路径所经过的数字的总和最大的答案 测试样例1 输入 5

任意三角形形状判断|Python练习系列[10]

代码演示视频 完整代码和注释如下 class point(object):#定义平面点类 """docstring for point""" def __init__(self,x,y,name): self.x = x self.y = y self.name = name def distance(self,p2):#两点距离公式 self.d=((self.x-p2.x)**2+(self.y-p2.y)**2)**0.5 return s

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

Triangle Up 1 2 3 4 5 6 7 #triangle-up {     width: 0;     height: 0;     border-left: 50px solid transparent;     border-right: 50px solid transparent;     border-bottom: 100px solid red; } Triangle Down 1 2 3 4 5 6 7 #triangle-down {     width: 0;

Vue.js 系列教程 5:动画

原文:intro-to-vue-5-animations 译者:nzbin 译者的话:经过两周的努力,终于完成了这个系列的翻译,由于时间因素及个人水平有限,并没有详细的校对,其中仍然有很多不易理解的地方.我和原作者的初衷一样,希望大家能够通过这个系列文章有所收获,至少可以增加学习的乐趣,我也在学习的路上,所学心得必将与大家共勉. 这是 JavaScript 框架 Vue.js 五篇教程的第五部分.在这个系列的最后一部分,我们将学习动画(如果你了解我,你知道这一章迟早会来).这不是一个完整的指南,

基于Cocos2d-x学习OpenGL ES 2.0系列——初识MVP(3)

在上一篇文章中,我在介绍vertex shader的时候挖了一个坑:CC_MVPMatrix.它其实是一个uniform,每一个Cocos2d-x预定义的shader都包含有这个uniform,但是如果你在shader里面不使用这个变量的话,OpenGL底层会把它优化掉. 但是,CC_MVPMatrix是在什么时候设置进来的呢?我在shader里面明明没有看到它,它从哪儿来的?别急,请继续往下读. 初识Uniform 在回答上面几个问题之前,让我们先来介绍一下什么是uniform.简单来说,un