所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

利用CSS3新特性|透明边框三角超详细实现教程

利用CSS3新特性|透明边框三角超详细实现教程 一

文章目录CloseOpen

为什么说CSS3做透明边框三角是「偷懒神器」?

先聊聊传统方法的痛点——你肯定懂的:用图片拼合的话,每换一次颜色、改一次大小,都得重新导出PNG,要是碰到夜间模式这种需要切换主题的场景,光切图就能耗掉半小时;用纯border做三角吧,以前只能做实心的,想加边框就得叠两个元素,HTML代码变多不说,维护时还得同步改两个地方。

但CSS3的伪元素彻底解决了这些麻烦——伪元素就是给元素“贴”个虚拟的“影子”,不用额外写HTML标签,还能随意调整样式。比如我做过一个电商网站的筛选栏箭头,要做带透明边框的下三角,用伪元素做了个主体三角,再叠个稍微大一点的透明边框三角,改大小只要调border-width,改颜色只要换border-color,5分钟就能搞定,比切图快多了。

这里得插个“大白话知识点”:伪元素的content属性必须设为空字符串(content: ''),否则不会显示;而且它的absolute定位是相对于最近的“已定位祖先元素”——也就是说,你要给父元素(比如提示框div)加position: relative,不然伪元素会跑到页面左上角去。我当初第一次做的时候就忘了这步,三角跑到页面顶上去了,找了10分钟才发现问题。

3步搞定透明边框三角,我踩过的坑你别再踩

接下来直接上“能落地的步骤”——我把自己踩过的坑都标出来,你跟着走准没错。

第一步:给父元素“打地基”

你要给需要加三角的元素(比如提示框、导航栏)加position: relative——这是伪元素定位的“锚点”,没这个一切白搭。比如做一个半透明的提示框:

.tooltip {

position: relative; / 关键!伪元素要相对于它定位 /

background: rgba(255,255,255,0.8); / 主框半透明 /

padding: 12px;

border-radius: 6px;

box-shadow: 0 2px 8px rgba(0,0,0,0.1);

}

第二步:用伪元素做“边框三角”

::before伪元素,做一个稍微大一点的三角——这个三角就是透明边框的“骨架”。比如要做向上的三角边框,就把border-bottom设为透明边框的颜色(比如rgba(255,255,255,0.5)),其他三个方向设为transparent(透明)。

注意:border-width越大,三角越大;top属性要调整到父元素外面(比如top: -12px就是把三角放到提示框上方)。代码长这样:

.tooltip::before {

content: ''; / 必须写,否则不显示 /

position: absolute;

top: -12px; / 把三角定位到提示框上方 /

left: 50%;

transform: translateX(-50%); / 水平居中,不用算margin-left /

border-width: 0 12px 12px 12px; / 下边框12px,其他方向0——这是向上三角的关键 /

border-style: solid;

border-color: transparent transparent rgba(255,255,255,0.5) transparent; / 透明边框颜色 /

}

第三步:叠上“主体三角”

再用::after伪元素做一个稍微小一点的主体三角,叠在边框三角上面——这样大三角露出来的部分就是“透明边框”。比如主体三角的颜色和提示框一致(rgba(255,255,255,0.8)),大小比边框三角小2px(border-width: 0 10px 10px 10px),位置再往下调2px(top: -10px),就能刚好盖住边框三角的中间部分。

还要注意z-index——把主体三角的z-index设为1,边框三角设为0,不然边框会盖在主体上面,看不出效果。代码:

.tooltip::after {

content: '';

position: absolute;

top: -10px; / 比边框三角低2px,避免覆盖 /

left: 50%;

transform: translateX(-50%);

border-width: 0 10px 10px 10px; / 比边框三角小2px /

border-style: solid;

border-color: transparent transparent rgba(255,255,255,0.8) transparent; / 主体颜色 /

z-index: 1; / 确保主体三角在边框上面 /

}

小技巧:想改方向/大小?超简单!

  • 改方向:比如要做向下的三角,就把border-top设为颜色,其他三个方向透明(border-width: 12px 12px 0 12px);要做向左的三角,把border-right设为颜色(border-width: 12px 12px 12px 0)——记住:哪个方向有颜色,三角就朝哪个方向
  • 改大小:直接调border-width——比如要更大的三角,把border-width改成15px,主体三角改成13px就行。
  • 改透明度:用rgba颜色值——比如想让边框更透,就把rgba(255,255,255,0.5)改成rgba(255,255,255,0.3),数值越小越透明。
  • 最后:试的时候碰到问题?来找我!

    我把自己踩过的坑都告诉你了,按这个步骤走,90%的情况都能成——要是你试的时候碰到问题(比如三角位置不对、边框没显示),或者想做其他方向的三角,都可以回来留个言,我帮你看看。

    毕竟我当初也是踩了“忘加relative”“z-index搞反”这些坑才摸透的,能帮你少走点弯路,我也开心~

    对了,你要是成功做出来了,记得发个截图——我想看看你做的三角长什么样~


    你是不是也碰到过这种情况?调透明边框颜色时,要么和主体元素“不搭”,要么显得特别“脏”——明明都是透明色,组合起来就是看着别扭?我之前帮美妆博客做产品提示框时就踩过这坑:主体用了淡粉色rgba(255,230,230,0.9),想让边框更透一点,直接选了个浅灰色rgba(240,240,240,0.5),结果出来的效果像给粉色盒子贴了圈灰边,朋友说“像沾了灰尘”,后来改回同色系的rgba(255,230,230,0.6),瞬间就对了——边框像从主体“晕”出来的,过渡特别自然,完全没有割裂感。

    其实秘诀就一个:边框颜色必须和主体同色系,再调透明度。比如主体是半透明白(rgba(255,255,255,0.8)),边框就用更透的白(rgba(255,255,255,0.5));如果主体是深色(比如夜间模式的深灰rgba(50,50,50,0.7)),边框就用更透的深灰(rgba(50,50,50,0.4))。我一般会把主体和边框的透明度差值控制在0.2-0.3之间——比如主体0.8,边框0.5;主体0.7,边框0.4,这样既有“边框”的层次感,又不会让两者脱节。

    再举个例子:我做过电商的“促销提示框”,主体是橙红色rgba(255,80,80,0.8),边框用了rgba(255,80,80,0.5),出来的效果像给提示框加了圈“渐变边”,既突出又不刺眼;后来试着把边框改成浅橙色,结果看起来像“两层皮”,立马又改回同色系了。

    还有个小技巧:如果实在拿不准选什么颜色,直接把主体颜色的rgba复制过来,把第四个透明度数值减0.2——比如主体是rgba(100,200,100,0.9),边框就用rgba(100,200,100,0.7),保准不会错。毕竟透明边框的核心是“融入主体”,而不是“另加装饰”,同色系+调整透明度,就是最稳的办法。


    为什么我加了伪元素,三角却没显示?

    最常见的两个原因:一是伪元素没写content: ''(必须设为空字符串才会显示,这步忘了等于白写);二是父元素没加position: relative,伪元素的absolute定位找不到“锚点”,直接跑到页面左上角了——我第一次做就踩了这个坑,找了10分钟才发现。

    三角位置总是偏,怎么调整到正确位置?

    水平位置用left: 50%transform: translateX(-50%)就能快速居中(不用算具体的margin-left,省得调像素);垂直位置调topbottom的数值——比如想让三角在提示框上方,就设top: -12px(数值等于边框宽度),如果偏上或偏下,微调这个数字就行(比如改成-10px或-14px)。

    想做向下/向左的三角,怎么改代码?

    三角方向由border-width的四个值(上、右、下、左)决定:比如做向下的三角,就把“上边框”设为有颜色,其他方向透明,代码是border-width: 12px 12px 0 12px;(上边框12px,其他0),border-color对应写成rgba(255,255,255,0.5) transparent transparent transparent;做向左的三角,就把“右边框”设为有颜色,border-width: 12px 12px 12px 0;——记住“哪个方向有border-width,三角就朝哪个方向”。

    透明边框的颜色怎么调才自然?

    用和主体元素同色系的rgba颜色:比如主体提示框是rgba(255,255,255,0.8)(半透明白),边框就用稍浅的rgba(255,255,255,0.5)(更透),这样边框和主体过渡自然;如果是深色主体(比如rgba(0,0,0,0.7)),边框就用rgba(0,0,0,0.4)——数值越小越透明,根据页面风格调就行。

    响应式布局里,三角会变形吗?怎么处理?

    用相对单位(比如em或百分比)代替固定像素就能避免变形。比如把border-width: 12px改成border-width: 0.8em(1em≈16px,0.8em≈12px),这样父元素字体变大或屏幕缩小,三角会跟着按比例缩放; left: 50%transform: translateX(-50%)本来就是响应式的,能一直保持水平居中,不用额外调整。

    原文链接:https://www.mayiym.com/46599.html,转载请注明出处。
    0
    显示验证码
    没有账号?注册  忘记密码?

    社交账号快速登录

    微信扫一扫关注
    如已关注,请回复“登录”二字获取验证码