重新整理:纯CSS写三角形

整理一下几年前写的知识点,关于如何用纯CSS写三角形。

方法1:利用CSS3旋转正方形

知识点:

transform:rotate(45deg)

兼容性:FF/Chrome/IE9+

html:

<div class="imgbox1">
    <img src="images/200x300.jpg" alt="" />
    <p>内容文字内容文字内容文字内容文字</p>
</div>

CSS:

.imgbox1{position:relative;width:200px;height:300px;overflow:hidden;margin:50px auto}
.imgbox1 img{display:block;}
.imgbox1 p{position:absolute;left:0;bottom:0;line-height:22px;padding:8px 10px;background:#fff;color:#666;font-size:14px;}
.imgbox1 p:before{content:"";position:absolute;left:20px;top:-7px;display:block;width:15px;height:15px;background:#fff;transform:rotate(45deg);}

也可以把伪元素变成空标签,如:

html:

<div class="imgbox2">
    <img src="images/200x300.jpg" alt="" />
    <p>内容文字内容文字内容文字内容文字</p>
    <i></i>
</div>

CSS:

.imgbox2{position:relative;width:200px;height:300px;overflow:hidden;margin:50px auto}
.imgbox2 img{display:block;}
.imgbox2 p{position:absolute;left:0;bottom:0;line-height:22px;padding:8px 10px;background:#fff;color:#666;font-size:14px;}
.imgbox2 i{position:absolute;left:20px;bottom:52px;display:block;width:15px;height:15px;background:#fff;transform:rotate(45deg);}

方法2:利用border属性

知识点:border设置的边,会彼此叠加。

兼容性:FF/Chrome/IE8+

html:

<div class="imgbox3">
    <img src="images/200x300.jpg" alt="" />
    <p>内容文字内容文字内容文字内容文字</p>
</div>

CSS:

.imgbox3{position:relative;width:200px;height:300px;overflow:hidden;margin:50px auto}
.imgbox3 img{display:block;}
.imgbox3 p{position:absolute;left:0;bottom:0;line-height:22px;padding:8px 10px;background:#fff;color:#666;font-size:14px;}
.imgbox3 p:before{content:"";position:absolute;left:20px;top:-10px;display:block;width:0;height:0;overflow:hidden;border-width:0 10px 10px;border-style:solid;border-color:transparent transparent #fff;}

扩展:

1. 上、下、左、右三角形

html:

<!-- border三角形原理 -->
<div class="triangle"></div>
<!-- 上 -->
<div class="tri-up"></div>
<!-- 下 -->
<div class="tri-down"></div>
<!-- 左 -->
<div class="tri-left"></div>
<!-- 右 -->
<div class="tri-right"></div>

CSS:

/*border三角形原理*/
.triangle{width:0;height:0;border-width:30px;border-style:solid;border-color:#c03 #fc0 #69c #6c6;}
/*上*/
.tri-up{width:0;height:0;border-width:0 21px 21px 21px;border-style:solid;border-color:transparent transparent #69c transparent;}
/*下*/
.tri-down{width:0;height:0;border-width:21px 21px 0 21px;border-style:solid;border-color:#c03 transparent transparent transparent;}
/*左*/
.tri-left{width:0;height:0;border-width:21px 21px 21px 0;border-style:solid;border-color:transparent #fc0 transparent transparent;}
/*右*/
.tri-right{width:0;height:0;border-width:21px 0 21px 21px;border-style:solid;border-color:transparent transparent transparent #6c6;}

2. 西北、东北、西南、东南三角形

如图,方法不唯一。

html:

<!-- 西北 -->
<div class="tri-nw"></div>
<!-- 东北 -->
<div class="tri-ne"></div>
<!-- 西南 -->
<div class="tri-sw"></div>
<!-- 东南 -->
<div class="tri-se"></div>

CSS:

/*西北*/
.tri-nw{width:0;height:0;border-top:30px solid #6c6;border-right:30px solid transparent;}
/*东北*/
.tri-ne{width:0;height:0;border-top:30px solid #c03;border-left:30px solid transparent;}
/*西南*/
.tri-sw{width:0;height:0;border-left:30px solid #69c;border-top:30px solid transparent;}
/*东南*/
.tri-se{width:0;height:0;border-right:30px solid #fc0;border-top:30px solid transparent;}

3. 有边三角形

思路:两个三角形叠加

html:

<div class="imgbox4">
    <img src="images/200x300.jpg" alt="" />
    <p>内容文字内容文字内容文字内容文字</p>
</div>

CSS:

.imgbox4{position:relative;width:200px;height:300px;overflow:hidden;margin:50px auto}
.imgbox4 img{display:block;}
.imgbox4 p{position:absolute;left:0;bottom:0;line-height:22px;padding:8px 10px;background:#fff;color:#666;font-size:14px;border-top:2px solid #501817;}
.imgbox4 p:before{content:"";position:absolute;left:20px;top:-10px;display:block;width:0;height:0;overflow:hidden;border-width:0 10px 10px;border-style:solid;border-color:transparent transparent #fff;z-index:10}
.imgbox4 p:after{content:"";position:absolute;left:18px;top:-12px;display:block;width:0;height:0;overflow:hidden;border-width:0 12px 12px;border-style:solid;border-color:transparent transparent #501817;z-index: 0}

以上。

时间: 2024-08-11 07:44:21

重新整理:纯CSS写三角形的相关文章

纯CSS写三角形-border法[基础篇]

纯CSS写三角形-border法[基础篇] 注意:所有知识点将不考虑IE6 ( ̄▽ ̄") 在制作如上图所示的三角形时,我们基本采用PNG或GIF图片来实现,这种形式在编写代码时较容易掌握,所以得到普遍制作者的认可.但涉及到后期优化维护的话,就需要不断的修改图片,在图形编辑器和代码编辑器之间来回切换,这无疑是加大了工作量.所以,如果单纯利用CSS来写的话,不但可以减少网站零碎图片的数量.减少了加载图片的时间,而且在修改时不用再重新切图,减少工作量. CSS3出现以后,“方形旋转45度”制作三角形的

纯CSS写三角形-border法[晋级篇01]

纯CSS写三角形-border法[晋级篇01] 注意:所有知识点将不考虑IE6 ( ̄▽ ̄") (1)有边框的三角形 在上一篇完成简单的三角形border法后,我们来写下带边框的三角形. 如果是一个正方形,我们写边时,会用到border,但我们这里讨论的三角形本身就是border,不可能再给border添加border属性,所以我们需要用到其他办法. 最容易想到的,是叠加层.思路是将两个三角形叠加在一起,外层三角形稍大一些,颜色设置成边框所需的颜色:内层三角形绝对定位在里面.整体就能形成带边框三角

【转】纯CSS写三角形-border法[晋级篇01]

(1)有边框的三角形 我们来写下带边框的三角形. 如果是一个正方形,我们写边时,会用到border,但我们这里讨论的三角形本身就是border,不可能再给border添加border属性,所以我们需要用到其他办法. 最容易想到的,是叠加层.思路是将两个三角形叠加在一起,外层三角形稍大一些,颜色设置成边框所需的颜色:内层三角形绝对定位在里面.整体就能形成带边框三角形的假象. 这里就涉及到一个绝对定位的问题,上.下.左.右四种方向的三角形相对于父级定位是不同的.首先我们来看下,当定位都为0(left

关于纯css写三角形在firefox下的锯齿问题

相信很多人都用过利用border来实现小三角箭头,百度一下,这类的文章多如牛毛,这里我还是啰嗦点把常用的方法陈列出来: .triangle_border_up{ width:0; height:0; border-width:0 30px 30px; border-style:solid; border-color:transparent transparent #333;/*透明 透明 灰*/ margin:40px auto; position:relative; } 或者: .border

用纯css写三角形

正三角: .sanjiao{width:0;height:0;overflow:hidden;border-width:10px;border-color: transparent transparent red transparent;border-style:dashed dashed solid dashed;} 倒三角: .sanjiao{width:0;height:0;overflow:hidden;border-width:10px;border-color: red transp

纯css写三角形

<style>    .triangle_border_up {        width: 0;        height: 0;        border-width: 0 30px 30px 30px;        border-style: solid;        border-color: transparent transparent #333;        /*透明 透明  灰*/    }    .triangle_border_left {        widt

三种纯CSS实现三角形的方法

看到像上图这样的 tip 的小三角,你会怎么办? 切个图上去?恩,不错,简单,兼容性也一级棒,不但好控制,那点小东西也增加不了多少图片的大小.但有没有更好更讲究技巧的办法呢?哈哈,那必须有啊,而且还不止一种呢:) 纯 CSS 做三角形的方法,目前我知道三种,分别是利用 border 属性,“◆”字符,和 CSS3 transfrom 做 45 度旋转实现的,CSS3的方法是在码头哥的博客上学到的,很感谢你们的分享,前端有你们更精彩! 1.利用 border 属性实现三角形 这个原理很简单,我我们

纯css写带小三角对话框

在实际样式中经常会遇到要写类似对话框的样式,而这种样式往往会有一个小三角,如下所示: 那么如何用css写出来呢,其实很简单,先让父元素相对定位,然后运用css的伪类before或after.就可以写个三角形,如果想要带边框的三角形,则可以两个重叠使用.代码如下: <div class="box2"> 纯css写带小三角对话框 </div> .box2{ float:left; position:relative; width:200px; height:100p

无聊,纯css写了个评分鼠标移入的效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta h