光标小下划线跟随,导航栏下划线跟随效果
分类:前端技术

不敢相信 无法相信的纯 CSS 导航栏下划线跟随效果

2018/04/02 · CSS · 下划线

正文作者: 伯乐在线 - chokcoco 。未经小编许可,禁绝转发!
应接参加伯乐在线 专辑小编。

先上张图,如何运用纯 CSS 制作如下效果?

图片 1

在继续读书下文早前,你能够先缓风流倜傥缓。尝试考虑一下方面包车型大巴法力依然动手尝试一下,不依附于 JS ,能无法神奇的达成上述作用。

OK,继续。那几个功效是自身在业务费用的经过中蒙受的多少个好像的正常。其实固然让本人依靠Javascript ,作者的率先反馈也是,感到很困苦啊。所以本尘世接在想,有未有十分的大概率只利用 CSS 完毕这些功效啊?

 

切图网在做项指标时候,为了更加好的体会效果,平日大家会给页面参与各样卡通,笔者个人是可怜喜欢css3 动漫的,上面演示一下轻松的css3 动漫。

奇妙的 CSS shapes(CSS图形)

2017/06/13 · CSS · 1 评论 · shapes

正文作者: 伯乐在线 - chokcoco 。未经作者许可,制止转发!
应接加入伯乐在线 专栏编辑者。

CSS 发展到前不久已经越来越强大了。其语法的步步高升,让相当多在先完结不了的思想政治工作,以后得以比较轻易的成就。明日就向我们介绍多少个相比较新的有力的 CSS 功效:

  • clip-path
  • shape-outside

shape 的意味是图片,CSS shapes 也正是 CSS 图形的意思,也正是使用 CSS 生成各样图片(圆形、矩形、椭圆、多边形等几何图形卡塔尔。

CSS3早先,大家能做的唯有矩形,四四方方,规行矩步。

妙用 scale 与 transfrom-origin,精准调整动漫方向

2018/04/25 · CSS · 1 评论 · scale, transfrom-origin

正文小编: 伯乐在线 - chokcoco 。未经作者许可,禁止转发!
接待参加伯乐在线 专栏审核人。

上次发完 不敢相信 无法相信的纯 CSS 导航栏下划线跟随效果 那篇小说之后,超级多相恋的人找我谈谈,惊讶CSS 的奇怪。

接下来前几日,群里一人相爱的人问到了三个和这么些职能比较像样的效应,问怎么

将上面这几个动漫的下划线效果,从左步入,侧边离开校正为从上边步入,下方离开。

叙述很难理解,看看原来的职能:

图片 2

概念须要

大家定义一下精简的平整,要求如下:

  • 万黄金年代 HTML 结构如下:
<ul> <li>不可思议的CSS</li>
<li>导航栏</li> <li>光标小下划线跟随</li>
<li>PURE CSS</li> <li>Nav Underline</li>
</ul>

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr class="odd">
<td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
<div class="crayon-num" data-line="crayon-5b8f6b0473490387173502-1">
1
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6b0473490387173502-2">
2
</div>
<div class="crayon-num" data-line="crayon-5b8f6b0473490387173502-3">
3
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6b0473490387173502-4">
4
</div>
<div class="crayon-num" data-line="crayon-5b8f6b0473490387173502-5">
5
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6b0473490387173502-6">
6
</div>
<div class="crayon-num" data-line="crayon-5b8f6b0473490387173502-7">
7
</div>
</div></td>
<td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
<div id="crayon-5b8f6b0473490387173502-1" class="crayon-line">
&lt;ul&gt;
</div>
<div id="crayon-5b8f6b0473490387173502-2" class="crayon-line crayon-striped-line">
  &lt;li&gt;不可思议的CSS&lt;/li&gt;
</div>
<div id="crayon-5b8f6b0473490387173502-3" class="crayon-line">
  &lt;li&gt;导航栏&lt;/li&gt;
</div>
<div id="crayon-5b8f6b0473490387173502-4" class="crayon-line crayon-striped-line">
  &lt;li&gt;光标小下划线跟随&lt;/li&gt;
</div>
<div id="crayon-5b8f6b0473490387173502-5" class="crayon-line">
  &lt;li&gt;PURE CSS&lt;/li&gt;
</div>
<div id="crayon-5b8f6b0473490387173502-6" class="crayon-line crayon-striped-line">
  &lt;li&gt;Nav Underline&lt;/li&gt;
</div>
<div id="crayon-5b8f6b0473490387173502-7" class="crayon-line">
&lt;/ul&gt;
</div>
</div></td>
</tr>
</tbody>
</table>
  • 导航栏目标 li 的增长幅度是不牢固的
  • 当从导航的左侧 li 移向右边 li,下划线从左往右移动。同理,当从导航的入手 li 移向左边 li,下划线从右往左移动。

 

html

CSS3

CSS3出去后,大家有了更广阔的施展空间,通过

  • border-radius
  • border
  • transform
  • 伪成分合营
  • gradient 渐变

笔者们能够作出极度多的几何图形。

除开最广大的矩形,圆形(border-radius卡塔 尔(英语:State of Qatar),下边稍稍列举部分别的几何图形:

难题所在

第一眼见到这些效应,小编的心坎毫无波澜。感到只是简单的三个下划线 hover 效果,经过朋友提示,才发觉,那个动漫效果中,下划线是从少年老成端步入,从其余风华正茂端离开的。何况,这一个hover 动漫是纯 CSS 完结的。

图片 3

先不寻思地方说的改变供给,先想大器晚成想,假诺就是回复上述效能,仅仅使用 CSS,该咋办啊?

 

完结需要

首先眼观看那一个职能,以为这些跟随动漫,仅靠 CSS 是不容许成功的。

假如想只用 CSS 完毕,只好独出机杼,使用部分别拿到益的点子。

好,上边就依附一些华而不实,使用 CSS 一步一步成功那几个效果。剖析一下问题:

<ul>
<li>光标小下划线跟随</li>
<li>光标小下划线跟随</li>
<li>光标小下划线跟随</li>
</ul>

三角形

平凡会动用透明的border模拟出一个三角形:

.traingle { width: 0; height: 0; border-left: 50px solid transparent; border-right: 50px solid transparent; border-bottom: 100px solid yellowgreen; }

1
2
3
4
5
6
7
.traingle {
width: 0;
height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-bottom: 100px solid yellowgreen;
}

图片 4

复原版的书文用

啊,不奇怪来讲,大家一个 hover 效果,大概正是从何地来,回何地去,大多数的应有是那般的:

图片 5

DEMO1

今后,难题就在于如何在 hover 离开的时候,退换动漫行进的趋势。

上边我们将二个 hover 动漫分解为 3 个部分:

  1. hover 步向状态
  2. hover 停留状态
  3. hover 离开状态

只是,对于三个 hover 效果来讲,符合规律的话,唯有开端状态,和hover状态二种。可能我们的代码是那般:

div { xxxx... } div:hover { xxxx... }

1
2
3
4
5
6
7
div {
    xxxx...
}
div:hover {
    xxxx...
}

对于三个 hover transition 动漫,它应有是从:

  • 寻常情况 -> hover状态 -> 寻常状态 (多个步骤,三种处境卡塔 尔(英语:State of Qatar)

据此,必定要有后生可畏种办法,能够使得 hover 动漫的进去与离开发生二种不一样样的效用,达成:

  • 情形1 -> hover状态 -> 状态2 (四个步骤,三种意况卡塔尔国

 

增长幅度不固定

先是个困难, li 的宽窄是不定点的。所以,大家或者必要从 li 本人的增长幅度上做小说。

既是每一种 li 的宽度不自然,那么它对应的下划线的长短,肯定是是要和他本人相适应的。放任自流,大家就能想到利用它的 border-bottom

li { border-bottom: 2px solid #000; }

1
2
3
li {
    border-bottom: 2px solid #000;
}

那么,大概今后是那样子的(li 之间是持续在同步的,li 间的空隙使用 padding 产生):

图片 6

css

切角

《CSS Secret》里面包车型客车秘技,选取多种线性渐变达成切角。

.notching { width: 40px; height: 40px; padding: 40px; background: linear-gradient(135deg, transparent 15px, yellowgreen 0) top left, linear-gradient(-135deg, transparent 15px, yellowgreen 0) top right, linear-gradient(-45deg, transparent 15px, yellowgreen 0) bottom right, linear-gradient(45deg, transparent 15px, yellowgreen 0) bottom left; background-size: 50% 50%; background-repeat: no-repeat; }

1
2
3
4
5
6
7
8
9
10
11
.notching {
    width: 40px;
    height: 40px;
    padding: 40px;
    background: linear-gradient(135deg, transparent 15px, yellowgreen 0) top left,
        linear-gradient(-135deg, transparent 15px, yellowgreen 0) top right,
        linear-gradient(-45deg, transparent 15px, yellowgreen 0) bottom right,
        linear-gradient(45deg, transparent 15px, yellowgreen 0) bottom left;
    background-size: 50% 50%;
    background-repeat: no-repeat;
}

图片 7

贯彻调节动漫方向的关键点

所以,这里的关键点就在于(划重视卡塔尔:

使得 hover 动漫的进去与离开发生二种差异的作用 。

接下去,也正是本文的关键所在,使用 transform: scale() 以及 transform-origin 完结那个作用。

 

默许隐瞒,动漫效果

当然,这里一齐首都是尚未下划线的,所以大家可能须求把他们给隐蔽起来。

li { border-bottom: 0px solid #000; }

1
2
3
li {
    border-bottom: 0px solid #000;
}

li{ display: inline-block; position: relative; padding: 0 10px;}

li::before {

content: "";

position: absolute;

top: 0;

left: 100%;

width: 0;

height: 100%;

border-bottom: 2px solid #000;

transition: 0.2s all linear;

}

li:hover::before {

width: 100%;

left: 0;

}

li:hover ~ li::before { left: 0; }

梯形

应用伪成分加旋转透视完结梯形:

.trapezoid{ position: relative; width: 60px; padding: 60px; } .trapezoid::before{ content:""; position: absolute; top: 0; right: 0; bottom: 0; left: 0; transform: perspective(20px) scaleY(1.3) rotateX(5deg); transform-origin: bottom; background: yellowgreen; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.trapezoid{
    position: relative;
    width: 60px;
    padding: 60px;
}
 
.trapezoid::before{
    content:"";
    position: absolute;
    top: 0; right: 0; bottom: 0; left: 0;
    transform: perspective(20px) scaleY(1.3) rotateX(5deg);
    transform-origin: bottom;
    background: yellowgreen;
}

自然,还应该有另生龙活虎种更简约的法子是应用border实现,依赖地点的协会三角形的点子,在矩形两边构造四个透明的三角形:

.trapezoid { position: relative; width: 60px; border-top: 60px solid yellowgreen; border-left: 40px solid transparent; border-right: 40px solid transparent; }

1
2
3
4
5
6
7
.trapezoid {
    position: relative;
    width: 60px;
    border-top: 60px solid yellowgreen;
    border-left: 40px solid transparent;
    border-right: 40px solid transparent;
}

图片 8

transform: scale() 达成线条运动

transform: scale 我们应该都很熟谙了,通俗的话是用来缩放,用官方的话说,正是:

CSS 函数 scale() 用于纠正成分的轻重。能够通过向量情势定义的缩放值来放大或收缩成分,同期能够在差别的倾向设置分歧的缩放值。

此处大家选择 transform: scaleX(0) 与 transform: scaleX(1) 来改换线条的呈现与隐敝,它的 CSS 代码轻易来看,恐怕是这么:

div { position: absolute; width: 200px; height: 60px; } div::before { content: ""; position: absolute; left: 0; bottom: 0; width: 200px; height: 2px; background: deeppink; transition: transform .5s; transform: scaleX(0); transrform-origin:100% 0; } div:hover::before { transform: scaleX(1); transform-origin:0 0; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
div {
    position: absolute;
    width: 200px;
    height: 60px;
}
div::before {
content: "";
position: absolute;
left: 0;
bottom: 0;
width: 200px;
height: 2px;
background: deeppink;
transition: transform .5s;
transform: scaleX(0);
transrform-origin:100% 0;
}
 
div:hover::before {
transform: scaleX(1);
transform-origin:0 0;
}

图片 9

DEMO2

嗯?为何是要用 transform: scale() 来实现线条的卡通?因为它能够合作 transform-origin 达成动画的分裂运动方向:

 

推翻重来,凭借伪成分

这么好像特别,因为隐蔽之后,hover li 的时候,需求下划线动漫,而 li 本人自然是不可能活动的。所以,大家着想依靠伪成分。将下划线成效到每种 li 的伪成分之上。

li::before { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; border-bottom: 2px solid #000; }

1
2
3
4
5
6
7
8
9
li::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    border-bottom: 2px solid #000;
}

上面考虑第一步的动漫,hover 的时候,下划线要从边上运动开展。所以,大家运用相对定位,将 li 的伪成分的肥瘦设置为0,在 hover 的时候,宽度从 width: 0 -> width: 100%,CSS 如下:

li::before { content: ""; position: absolute; top: 0; left: 0; width: 0; height: 100%; border-bottom: 2px solid #000; } li:hover::before { width: 100%; }

1
2
3
4
5
6
7
8
9
10
11
12
13
li::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 0;
    height: 100%;
    border-bottom: 2px solid #000;
}
 
li:hover::before {
    width: 100%;
}

获取,如下效果:

图片 10

大家这里依赖 ~ 选用符,对于当下的hover li ,其对应伪成分的下划线的一定是 left:百分之百, 而 li:hover~li::before,它的原则性是 left:0。

五边形

梯形加上三角形,非常轻巧就组合成一个五边形,这里须要依附八个伪成分达成:

.pentagon { position: relative; width: 60px; border-bottom: 60px solid yellowgreen; border-left: 40px solid transparent; border-right: 40px solid transparent; } .pentagon::before { content:""; position: absolute; top: 60px; left: -40px; border-top: 60px solid yellowgreen; border-left: 70px solid transparent; border-right: 70px solid transparent; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.pentagon {
    position: relative;
    width: 60px;
    border-bottom: 60px solid yellowgreen;
    border-left: 40px solid transparent;
    border-right: 40px solid transparent;
}
 
.pentagon::before {
    content:"";
    position: absolute;
    top: 60px;
    left: -40px;
    border-top: 60px solid yellowgreen;
    border-left: 70px solid transparent;
    border-right: 70px solid transparent;
}

图片 11

transform-origin 完结线条运动方向

transform-origin 让大家能够退换二个成分变形(transform卡塔 尔(英语:State of Qatar)的原点,transform-origin 属性能够行使贰个,多个或三个值来钦定,在那之中每一种值都表示贰个偏移量。 未有刚毅概念的偏移将重新设置为其相应的早先值。

本效果最最最重大的地点就在于这里,我们运用 transform-origin 去改变 transform: scale() 的原点完结线条运动的方向。

  1. 我们给线条设置三个暗中同意的 transform-origin 记为状态1
  2. hover 的时候,设置其余二个例外的 transform-origin, 记为状态2

故此,当然大家 hover 的时候,会读取状态2的transform-origin,从该原点开首加大至 scaleX(1),hover 离开的时候,会读取状态1的transform-origin,从scaleX(1)情形裁减至该原点。

啊,CSS代码大约是这么:

div { position: absolute; width: 200px; height: 60px; } div::before { content: ""; position: absolute; left: 0; bottom: 0; width: 200px; height: 2px; background: deeppink; transition: transform .5s; transform: scaleX(0); transform-origin: 100% 0; } div:hover::before { transform: scaleX(1); transform-origin: 0 0; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
div {
    position: absolute;
    width: 200px;
    height: 60px;
}
div::before {
content: "";
position: absolute;
left: 0;
bottom: 0;
width: 200px;
height: 2px;
background: deeppink;
transition: transform .5s;
transform: scaleX(0);
transform-origin: 100% 0;
}
 
div:hover::before {
transform: scaleX(1);
transform-origin: 0 0;
}

此间,大家五颜六色的经过 hover 状态施加了生龙活虎层新的 transform-origin ,让动漫的进去与离开爆发了二种不一样的职能,四个不等的方向。

如此一来,也就顺遂贯彻了大家想要的效果,撒花:

图片 12

DEMO3

当心,这里运用了 transform-origin 去改变 transform: scale() 的原点完成线条运动的取向,而还没依赖诸如 position 位移,transform: translate(),或然margin 等地方属性去更动线条所在的岗位。

从而,风趣的是,线条其实未有发出过别的位移,这里实在也是障眼法,让它看上去,它好像在活动。

 

左移左出,右移右出

OK,以为离成功近了一步。现在还剩下贰个最难的难题:

怎么让线条跟随光标的活动动作,完成当从导航的左侧 li 移向侧边 li,下划线从左往右移动。同理,当从导航的左边 li 移向左边 li,下划线从右往左移动。

我们精心看看,以后的法力:

图片 13

当从第二个 li 切换来第叁个 li 的时候,第一个 li 下划线收回的来头不得法。所以,能够能我们要求将下划线的起头地方位移一下,设置为 left: 100%,那样每便下划线收回的时候,第一个 li 就不错了:

li::before { content: ""; position: absolute; top: 0; left: 100%; width: 0; height: 100%; border-bottom: 2px solid #000; } li:hover::before { left: 0; width: 100%; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
li::before {
    content: "";
    position: absolute;
    top: 0;
    left: 100%;
    width: 0;
    height: 100%;
    border-bottom: 2px solid #000;
}
 
li:hover::before {
    left: 0;
    width: 100%;
}

拜望效果:
图片 14

额,留心相比较两张图,第三种效应其实是捡了芝麻丢了夏瓜。第2个 li 的样子是不容置疑了,不过第三个 li下划线的运动方向又八花九裂了。图片 15

 

是还是不是异常的粗略,学习的最终指标是利用,切图网潜心于实战培养练习。

六边形

会见上边的梯形,要是多个反方向且底边形似大小的梯形,叠加在一同,是否就会获得叁个六边形呢?

.pentagon { position: relative; width: 60px; border-bottom: 60px solid yellowgreen; border-left: 40px solid transparent; border-right: 40px solid transparent; } .pentagon::before { content: ""; position: absolute; width: 60px; height: 0px; top: 60px; left: -40px; border-top: 60px solid yellowgreen; border-left: 40px solid transparent; border-right: 40px solid transparent; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.pentagon {
    position: relative;
    width: 60px;
    border-bottom: 60px solid yellowgreen;
    border-left: 40px solid transparent;
    border-right: 40px solid transparent;
}
.pentagon::before {
    content: "";
    position: absolute;
    width: 60px;
    height: 0px;
    top: 60px;
    left: -40px;
    border-top: 60px solid yellowgreen;
    border-left: 40px solid transparent;
    border-right: 40px solid transparent;
}

图片 16

扩充缓延长伸

哦,有了上述方法,也便是 transform: scale() 配合 transform-origin ,我们得以开头随机变改造画的上马与结束状态了。把她们接受到其它职能之上,轻便的多少个暗示效果:

图片 17

 

DEMO4

神奇的 ~ 选择符

故而,大家急切要求生机勃勃种办法,能够不转移近期 hover 的 li 的下划线移动格局却能校正它下一个 li 的下划线的位移方式(好绕口卡塔 尔(阿拉伯语:قطر‎。

没有错了,这里大家得以依据 ~ 采用符,达成那个辛劳的任务,也是以此例子中,最最注重的一环。

对于当前 hover 的 li ,其对应伪成分的下划线的永远是 left: 100%,而对于 li:hover ~ li::before,它们的牢固是 left: 0。CSS 代码大概如下:

li::before { content: ""; position: absolute; top: 0; left: 100%; width: 0; height: 100%; border-bottom: 2px solid #000; transition: 0.2s all linear; } li:hover::before { width: 100%; left: 0; } li:hover ~ li::before { left: 0; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
li::before {
    content: "";
    position: absolute;
    top: 0;
    left: 100%;
    width: 0;
    height: 100%;
    border-bottom: 2px solid #000;
    transition: 0.2s all linear;
}
 
li:hover::before {
    width: 100%;
    left: 0;
}
 
li:hover ~ li::before {
    left: 0;
}

到现在,大家想要的效果与利益就完成拉!撒花。看看:

图片 18

功效不错,正是有一点僵硬,大家得以相符改动缓动函数以致丰硕多个动漫片延迟,就能够完结上述带头里的至极效果了。当然,这个都是为虎添翼的点缀。

意气风发体化的DEMO能够戳这里: CodePen 德姆o — 难以置信的CSS光标下划线跟随效果

八边形

六边形都消除了,八边形也不言而谕,一个矩形加上三个梯形,能够合成二个八边形。

.octagon { position: relative; width: 40px; height: 100px; background: yellowgreen; } .octagon::before { content: ""; height: 60px; position: absolute; top: 0; left: 40px; border-left: 30px solid yellowgreen; border-top: 20px solid transparent; border-bottom: 20px solid transparent; } .octagon::after { content: ""; height: 60px; position: absolute; top: 0; left: -30px; border-right: 30px solid yellowgreen; border-top: 20px solid transparent; border-bottom: 20px solid transparent; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
.octagon {
    position: relative;
    width: 40px;
    height: 100px;
    background: yellowgreen;
}
.octagon::before {
    content: "";
    height: 60px;
    position: absolute;
    top: 0;
    left: 40px;
    border-left: 30px solid yellowgreen;
    border-top: 20px solid transparent;
    border-bottom: 20px solid transparent;
}
.octagon::after {
    content: "";
    height: 60px;
    position: absolute;
    top: 0;
    left: -30px;
    border-right: 30px solid yellowgreen;
    border-top: 20px solid transparent;
    border-bottom: 20px solid transparent;
}

图片 19

值得注意的点

再有多少个点是相比有意思的,大家能够品尝尝试,构思思忖:

  • 品尝更改三种意况的 transition-timing-function 缓动函数,能够让动漫片尤其通畅具备美感;
  • 瞩目一下,线条的 transition 设置的是 transition: transform .5s 而不是 transition: all .5s,体验一下二种写法所发出的两样成效。

 

最后

本方法最大的后天不良介于生龙活虎早先步向第三个 li 的时候,线条只可以是从右往左,除此而外,都能很好的兑现跟随效果。

悠长没更新了,最近痴迷学习区块链相关手艺,举个例子以太坊编制程序,智能合约的编写制定巴拉巴拉的。前面照旧会把越来越多精力放在本行,多出有个别前端文章,CSS 的魔力依旧不能够对抗的。

越来越多精粹 CSS 手艺作品汇总在本人的 Github — iCSS ,持续立异,款待点个 star 订阅收藏。

好了,本文到此结束,希望对您有帮扶 :)

倘诺还恐怕有啥疑点照旧建议,能够多多调换,原创作品,文笔有限,不学无术,文中若有不正之处,万望告知。

打赏扶植小编写出更加的多好文章,感激!

打赏作者

五角星

好的,研究完多边形,大家后续追究X角星。

先来寻访五角星,要怎么落到实处呢?当然是平素打出去啦 — ★☆

图片 20

开个噱头,这里运用 3 个三角形形叠合旋转在一块儿落到实处。

.star { margin: 50px 0; position: relative; width: 0; border-right: 100px solid transparent; border-bottom: 70px solid yellowgreen; border-left: 100px solid transparent; transform: rotate(35deg) scale(.6); } .star:before { content: ''; position: absolute; border-bottom: 80px solid yellowgreen; border-left: 30px solid transparent; border-right: 30px solid transparent; top: -45px; left: -65px; transform: rotate(-35deg); } .star:after { content: ''; position: absolute; top: 3px; left: -105px; border-right: 100px solid transparent; border-bottom: 70px solid yellowgreen; border-left: 100px solid transparent; transform: rotate(-70deg); }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.star {
   margin: 50px 0;
   position: relative;
   width: 0;
   border-right: 100px solid transparent;
   border-bottom: 70px  solid yellowgreen;
   border-left: 100px solid transparent;
   transform: rotate(35deg) scale(.6);
}
.star:before {
    content: '';
    position: absolute;
    border-bottom: 80px solid yellowgreen;
    border-left: 30px solid transparent;
    border-right: 30px solid transparent;
    top: -45px;
    left: -65px;
    transform: rotate(-35deg);
}
.star:after {
    content: '';
    position: absolute;
    top: 3px;
    left: -105px;
    border-right: 100px solid transparent;
    border-bottom: 70px solid yellowgreen;
    border-left: 100px solid transparent;
    transform: rotate(-70deg);
}

图片 21

最后

本办法自身个人最初见于 Css菜单悬停功效。假诺你有越来越好的秘诀招待建议联合斟酌。

更加的多美丽 CSS 技术小说汇总在本身的 Github — iCSS ,持续改进,迎接点个 star 订阅收藏。

好了,本文到此结束,希望对你有救助 :)

假使还应该有何难题依旧提出,能够多多交换,原创作品,文笔有限,不学无术,文中若有不正之处,万望告知。

打赏协助笔者写出越来越多好作品,谢谢!

打赏作者

打赏支持自个儿写出更多好文章,多谢!

任选风流倜傥种支付方式

图片 22 图片 23

1 赞 6 收藏 评论

六角星

六角星呢?想象一下,三个升高的三角形 ▲,叠合上叁个向下的三角形 ▼,就足以博得多少个六边形:

.sixstar { position: relative; width: 0; border-left: 50px solid transparent; border-right: 50px solid transparent; border-bottom: 100px solid yellowgreen; } .sixstar:after { content: ""; position: absolute; border-left: 50px solid transparent; border-right: 50px solid transparent; border-top: 100px solid yellowgreen; top: 30px; left: -50px; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.sixstar {
    position: relative;
    width: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-bottom: 100px solid yellowgreen;
}
.sixstar:after {
    content: "";
    position: absolute;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-top: 100px solid yellowgreen;
top: 30px;
left: -50px;
}

图片 24

打赏支持本身写出更加的多好小说,多谢!

任选大器晚成种支付方式

图片 25 图片 26

1 赞 3 收藏 1 评论

关于小编:chokcoco

图片 27

经不住似水年华,逃可是此间少年。 个人主页 · 小编的作品 · 63 ·    

图片 28

八角星

八角星呢?两个角那么多呢。其实选拔三个矩形进行旋转拼接即可了。

.eightstar { position: relative; width: 100px; height: 100px; background-color: yellowgreen; transform: rotate(30deg); } .eightstar::before { content: ""; position: absolute; top: 0; left: 0; width: 100px; height: 100px; transform: rotate(45deg); background-color: yellowgreen; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.eightstar {
    position: relative;
    width: 100px;
    height: 100px;
    background-color: yellowgreen;
    transform: rotate(30deg);
}
 
.eightstar::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 100px;
    height: 100px;
    transform: rotate(45deg);
    background-color: yellowgreen;
}

图片 29

有关作者:chokcoco

图片 30

经不住光阴似箭,逃但是此间少年。 个人主页 · 笔者的篇章 · 63 ·    

图片 31

十五角星

好。最终多角星再来三个十六级角星。在八角星的底蕴上,再充实多少个矩形,就会赢得十四角啦。也正是要过第二个伪成分。

.twelvestar { position: relative; width: 100px; height: 100px; margin-bottom: 100px!important; background-color: yellowgreen; transform: rotate(30deg); } .twelvestar::before { content: ""; position: absolute; top: 0; left: 0; width: 100px; height: 100px; transform: rotate(30deg); background-color: yellowgreen; } .twelvestar::after { content: ""; position: absolute; top: 0; left: 0; width: 100px; height: 100px; transform: rotate(60deg); background-color: yellowgreen; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.twelvestar {
    position: relative;
    width: 100px;
    height: 100px;
    margin-bottom: 100px!important;
    background-color: yellowgreen;
    transform: rotate(30deg);
}
 
.twelvestar::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 100px;
    height: 100px;
    transform: rotate(30deg);
    background-color: yellowgreen;
}
 
.twelvestar::after {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 100px;
    height: 100px;
    transform: rotate(60deg);
    background-color: yellowgreen;
}

图片 32

椭圆

终极,再来使用古板的不二等秘书技画多个椭圆,过去 CSS3 画椭圆,基本上只好依赖border 实现。

此地运用 border 画二个蛋的形象:

.ellipse { width: 120px; height: 160px; background-color: yellowgreen; border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%; }

1
2
3
4
5
6
.ellipse {
   width: 120px;
   height: 160px;
   background-color: yellowgreen;
   border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%;
}

图片 33

CodePen — CSS Shapes(CSS 几何图形)

若是您看看了此间,恭喜您,本文的正文从这里开头。

图片 34

地方所呈报的是采纳古板 CSS3 的办法绘制几何图形,接下去大家就要精通部分越来越高端的绘图几何图形的诀要。

clip-path

CSS 新属性 clip-path,意味裁剪路线的情致,让大家得以很便利的调换各样几何图形。

clip-path 通过定义特殊的门路,完毕我们想要的图纸。而那些路子,正是 SVG 中的 path 。

看看它的 API:

{ /* Keyword values */ clip-path: none; /* Image values */ clip-path: url(resources.svg#c1); /* Box values clip-path: fill-box; clip-path: stroke-box; clip-path: view-box; clip-path: margin-box clip-path: border-box clip-path: padding-box clip-path: content-box /* Geometry values */ clip-path: inset(100px 50px); clip-path: circle(50px at 0 100px); clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%); /* Box and geometry values combined */ clip-path: padding-box circle(50px at 0 100px); /* Global values */ clip-path: inherit; clip-path: initial; clip-path: unset; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
/* Keyword values */
clip-path: none;
 
/* Image values */
clip-path: url(resources.svg#c1);
 
/* Box values
clip-path: fill-box;
clip-path: stroke-box;
clip-path: view-box;
clip-path: margin-box
clip-path: border-box
clip-path: padding-box
clip-path: content-box
 
/* Geometry values */
clip-path: inset(100px 50px);
clip-path: circle(50px at 0 100px);
clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
 
/* Box and geometry values combined */
clip-path: padding-box circle(50px at 0 100px);
 
/* Global values */
clip-path: inherit;
clip-path: initial;
clip-path: unset;
}

看上去非常多,其实很好明白,假如接触过 SVG 的 path,其实正是照搬 SVG 的 path 的生龙活虎部分概念。换言之,若无接触过 SVG,看完本文后再去学学 SVG 路线,也会特别轻巧上手。

听他们说分裂的语法,大家能够转移差别的图样。

例如 clip-path: circle(50px at 50px 50px) 表示在要素的 (50px, 50px卡塔尔处,裁剪生成二个半径为 50px 的圆。

以成分的左上角为坐标起源

而整个 clip-path 属性,最为根本的当属 polygon,能够使用 polygon 生成自由多边形。

clip-path 示例

上边分别点数使用 clip-path 生成八个圆形和三个十边形。

/* 圆形 */ .circle { width: 100px; height: 100px; background-color: yellowgreen; clip-path: circle(50px at 50px 50px); } /* 十边形 */ .polygon { width: 100px; height: 100px; background-color: yellowgreen; clip-path: polygon(50% 0%, 80% 10%, 100% 35%, 100% 70%, 80% 90%, 50% 100%, 20% 90%, 0% 70%, 0% 35%, 20% 10%); }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* 圆形 */
.circle {
  width: 100px;
  height: 100px;
  background-color: yellowgreen;
  clip-path: circle(50px at 50px 50px);
}
 
/* 十边形 */
.polygon {
  width: 100px;
  height: 100px;
  background-color: yellowgreen;
  clip-path: polygon(50% 0%, 80% 10%, 100% 35%, 100% 70%, 80% 90%, 50% 100%, 20% 90%, 0% 70%, 0% 35%, 20% 10%);
}

图片 35

clip-path: circle(50px at 50px 50px) 上文也讲了,表示在要素的 (50px, 50px卡塔尔处,裁剪生成三个半径为 50px 的圆。

而在 clip-path: polygon(50% 0%, 80% 10%, 100% 35%, 100% 70%, 80% 90%, 50% 100%, 20% 90%, 0% 70%, 0% 35%, 20% 10%) 中,依次列出了 10 个坐标点。大家的图纸就是各样连接这 10 个坐标点产生多少个裁切图形。

不得不承认,这里运用的是比例,也能够运用具体的数值。

clip-path 动画

clip-path 别的四个强大之处在于可以实行 CSS transtion 与 CSS animation,也正是连着和卡通。

看二个多边形的连结切换动漫。

图片 36

CodePen 德姆o — Clip-path 多边形过渡动漫

图片调换动画

而外,大家仍可以够品尝,将贰个安然无恙的图样,分割成四个小图形,这也是 clip-path 的魔力所在,纯 CSS 的图样转换:

图片 37

CodePen Demo — Clip-path triangle2rect

clip-path 动漫的受制

clip-path 动漫纵然美好,不过存在一定的局限性,那就是举行对接的五个状态,坐标极点的数额必得少年老成致。

也等于借使本人期待从三角形过渡到矩形。若是三角形和矩形的 clip-path 分别为:

  • 三角形:clip-path: polygon(50% 0, 0 100%, 100% 0)
  • 矩形: clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%)

张开连接动漫时候,直接从 polygon(50% 0, 0 100%, 100% 0) –> polygon(0 0, 100% 0, 100% 100%, 0 100%) 是不行的,因为是从 3 个坐标点调换来 4 个坐标点。

据此这里必要那用一个得益的措施,在三角的意味方法中,使用五个坐标点表示,当中多少个坐标点举行重合就能够。也正是:

  • 三角形:clip-path: polygon(50% 0, 0 100%, 100% 0) -> clip-path: polygon(50% 0, 50% 0, 0 100%, 100% 0)

N边形过渡动画

要是脑洞够大,随机生成 N(N>=1000卡塔 尔(英语:State of Qatar)边形,进行调换,会是怎么意义啊?

see one see:

图片 38

CodePen 德姆o — 二零零三边形过渡动漫

调换的顿时很有爆炸的感到。然而这里有个相当的大的主题素材,只是随便生成了 2001个坐标点,然后利用 clip-path 将那个坐标点连接起来,并非契合供给的多边形。

在 VUE官网,有上面那样一个例证,一个准绳的四头形举行持续的接入动漫,超级帅炫:

图片 39

VUE官方网址使用的是 SVG 达成的,这里我有个别改动了下,使用 CSS clip-path 实现:

CodePen Demo — clip-path N polygon ,感兴趣能够看看。

shape-outside

末段再来看看 shape-outside,其余一个有趣的有力量转移几何图形的本性。

shape-outside 是甚?它也是有创建各个几何图形的技艺,不过它只好和浮动 float 一齐使用。

虽说应用上有着节制,可是它付与了咱们后生可畏种越发自由的图像和文字混排的力量。

先看看它的 API,看上去貌似很复杂:

{ /* Keyword values */ shape-outside: none; shape-outside: margin-box; shape-outside: content-box; shape-outside: border-box; shape-outside: padding-box; /* Function values */ shape-outside: circle(); shape-outside: ellipse(); shape-outside: inset(10px 10px 10px 10px); shape-outside: polygon(10px 10px, 20px 20px, 30px 30px); /* value */ shape-outside: url(image.png); /* Gradient value */ shape-outside: linear-gradient(45deg, rgba(255, 255, 255, 0) 150px, red 150px); /* Global values */ shape-outside: initial; shape-outside: inherit; shape-outside: unset; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
    /* Keyword values */
    shape-outside: none;
    shape-outside: margin-box;
    shape-outside: content-box;
    shape-outside: border-box;
    shape-outside: padding-box;
    
    /* Function values */
    shape-outside: circle();
    shape-outside: ellipse();
    shape-outside: inset(10px 10px 10px 10px);
    shape-outside: polygon(10px 10px, 20px 20px, 30px 30px);
    
    /*  value */
    shape-outside: url(image.png);
    
    /* Gradient value */
    shape-outside: linear-gradient(45deg, rgba(255, 255, 255, 0) 150px, red 150px);
    
    /* Global values */
    shape-outside: initial;
    shape-outside: inherit;
    shape-outside: unset;
}

唯独,其实它和 clip-path 的语法极度附近,比较轻巧触类旁通。看看实例,更易通晓:

世家自行去熟谙下 API,接着假使我们有下边那样的结构存在:

JavaScript

<div class="container"> <div class="shape-outside"> <img src="image.png"> </div> xxxxxxxxxxx,文字描述,xxxxxxxxx </div>

1
2
3
4
5
6
<div class="container">
    <div class="shape-outside">
      <img src="image.png">
    </div>
    xxxxxxxxxxx,文字描述,xxxxxxxxx
</div>

概念如下 CSS:

.shape-outside { width: 160px; height: 160px; shape-outside: circle(80px at 80px 80px); float: left; }

1
2
3
4
5
6
.shape-outside {
    width: 160px;
    height: 160px;
    shape-outside: circle(80px at 80px 80px);
    float: left;
}

注意,上面 .shape-outside 使用了变动,并且定义了 shape-outside: circle(80px at 80px 80px) ,表示在要素的 (80px, 80px) 坐标处,生成叁个 80px 半径的圆。

那般,将会生出生机勃勃种图像和文字混排的效用:

图片 40

CodePen 德姆o — 图像和文字混排 shape-outside

啊?好像没什么了不起啊?那不正是 float 的功能啊?

不,不是的,看看 float 和 加上shape-outside 后的比较:

图片 41

观看分裂了呢?使用了 shape-outside ,真正的完毕了文字依据图片的概貌,在其相近排列。

图片 42

上海体育场合是使用开采者工具接纳了效果了 shape-outside 的因素,能够看来,使用了奇特的藤黄去标识几何图形的概貌。在这里个茶褐区域之外,文字都将能够展开排列。

shape-outside 的本质

划重点,划重点,划重点。

所以,shape-outside 的本质实际上是生成几何图形,何况裁剪掉其几何图形之外周围的区域,让文字能排列在这里些被裁剪区域之内。

由此,明白了那一个本质之后,大家再看看一些更头眼昏花的图像和文字混排。

平行四边形

图片 43

CodePen 德姆o — 图像和文字混排 shape-outside

心形、菱形

图片 44

CodePen 德姆o — 图像和文字混排 shape-outside

clip-path 与 shape-outside 的包容性

额,相比可惜,这两个属性的包容性方今依然处于于相比较窘迫的程度。感兴趣的能够看看 CANIUSE 。周密协作使用仍需努力。

为此本文所出示的 德姆o 都以在 -webkit- 内核浏览器下做到的。

最后

数不完 CSS 小说汇总在自己的 Github 。

到此本文甘休,如若还会有啥样疑点依旧提议,能够多多沟通,原创小说,文笔有限,四六不通,文中若有不正之处,万望告知。

打赏协理笔者写出越多好文章,多谢!

打赏小编

打赏支持本身写出更加多好文章,谢谢!

任选意气风发种支付形式

图片 45 图片 46

1 赞 7 收藏 1 评论

至于我:chokcoco

图片 47

经不住光阴似箭,逃可是此间少年。 个人主页 · 作者的稿子 · 63 ·    

图片 48

本文由pc28.am发布于前端技术,转载请注明出处:光标小下划线跟随,导航栏下划线跟随效果

上一篇:表格行与列边框样式管理的规律深入分析及实战 下一篇:一些一蹴而就的Less总计,LessCss学习笔记
猜你喜欢
热门排行
精彩图文
  • 遇见未知的,web开采连忙入门
    遇见未知的,web开采连忙入门
    CSS 框架 Bulma 教程 2017/10/26 · CSS ·Bulma 原文出处:阮一峰    网页样式需要大量时间开发,最省事的方法就是使用 CSS 框架。 Bootstrap 是最著名的 CSS框架,
  • 追踪客户,读书笔记
    追踪客户,读书笔记
    使用 CSS 追踪用户 2018/01/20 · CSS · 1评论 ·追踪 原文出处:jbtronics   译文出处:枫上雾棋    除了使用 JS 追踪用户,现在有人提出了还可以使用 CSS 进行
  • pusle雷达动漫完结,推荐8款CSS3兑现的动态特效
    pusle雷达动漫完结,推荐8款CSS3兑现的动态特效
    CSS技巧:逐帧动漫抖动实施方案 2017/08/16 · CSS ·动画 原来的书文出处:坑坑洼洼实验室    我所在的前端共青团和少先队首要从事活动端的H5页面开荒,而
  • 跟随我在oracle学习php,HTML中form表单的用法
    跟随我在oracle学习php,HTML中form表单的用法
    表单元素之搭车系 2016/01/28 · HTML5 ·表单 原文出处:司徒正美(@司徒正美)    对于表单元素, 除了reset元素,只要有name与value都能提交 因为在我们印象
  • Codecademy为编程初学者新增HTML和CSS两门课程,可以
    Codecademy为编程初学者新增HTML和CSS两门课程,可以
    Codecademy为编制程序初读书人新添HTML和CSS两门学科 2012/04/03 · CSS · 来源:伯乐在线     ·CSS 葡萄牙语原来的文章:Mashable  编译:伯乐在线– 黄利民 乐