在网页底部分页看到这样的效果是不是看上去还不错?下面就来看看这是如何实现的吧~
一个矩形拼接两个三角形最终制造出一个平行四边形。为什么使用border可以产生三角形呢?先来看看一张图片:
看了图中的三个小图形的变化过程,你应该已经清楚了一半。其实 hack 出三角形只需要两个条件,第一,元素本身的长宽为0;其次,将不需要的部分通过 border-color 来设置隐藏。通过类似的方法,你还可以创造出梯形,上图中的三个图形的代码如下
CSS
#first {
width:20px;
height:20px;
border-width:10px;
border-style:solid;
border-color:red green blue brown;
}
#second {
width:0;
height:0;
border-width:10px;
border-style:solid;
border-color:red green blue brown;
}
#third {
width:0;
height:0;
border-width:10px;
border-style:solid;
border-color:red transparent transparent transparent;
}
接下来就要考虑如何拼接出一个平行四边形了。在border法中,它由三部分组成,分别是左三角形、矩形、右三角形。如果每次绘制平行四边形都要创建三个元素显然过于麻烦了,所以在这里:before和:after伪元素是个不错的选择。下面我们实现一下这样的效果:
为了将三角形与矩形无缝拼接到一起,多处属性要保持一致,所以使用类似 Less, Sass, Stylus 等 CSS 预处理器来写这段代码会更容易维护,下面给出 Scss 版本的代码,其他预处理代码类似
//三角形的宽高
$height:24px;
$width:12px;
//对平行四边形三部分的颜色进行赋值
@mixin parallelogram-color($color){
background:$color;
&:before {border-color:transparent $color $color transparent;}
&:after {border-color:$color transparent transparent $color;}
}
//单个三角形的样式
@mixin triangle(){
content:'';
display:block;
width:0;
height:0;
position:absolute;
border-style:solid;
border-width:$height / 2 $width / 2;
top:0;
}
//平行四边形的样式
.para {
display:inline-block;
position:relative;
padding:0 10px;
height:$height;
line-height:$height;
margin-left:$width;
color:#fff;
&:after {
@includetriangle();
right:-$width;
}
&:before {
@include triangle();
left:-$width;
}
@include parallelogram-color(red);
}
需要注意的是,如果通过 $height、$width 设置的三角形斜率太小或太大都有可能造成渲染出锯齿,所以使用起来要多多测试一下不同的宽高所得到的视觉效果如何。
使用transform来实现平行四边形的方法效果大概是这个样子
原来还可以只有平行四边形的外轮廓。(因为方法一只能创造填充效果的平行四边形)实现起来非常简单,主要是借助了transform: skew(...),下面就来看看源码吧
<style>
.city {
display:inline-block;
padding:5px 20px;
border:1px solid #44a5fc;
color:#333;
transform:skew(-20deg);
}
</style>
<div class="city">上海</div>
于是我们得到了这样的效果:
看到图片的你一定是这样想的:
别着急嘛,我们的确是把整个 div 进行了歪曲,导致中间的文字也是倾斜的,而这显然不是我们所要的效果。所以我们需要加一个内层元素,并对内层元素做一次逆向的歪曲,从而得到我们想要的效果:
实现代码如下
<style>
.city {
display:inline-block;
padding:5px 20px;
border:1px solid #44a5fc;
color:#333;
transform:skew(-20deg);
}
.city div {
transform:skew(20deg);
}
</style>
<div class="city">
<div>上海</div>
</div>
第一种方法使用 border 属性 hack 出三角形,并通过对三个元素进行拼接最终实现了平行四边形;而第二种方法则通过 transform: skew 来得到平行四边形。总体来说,第二种方法相对于第一种代码量小得多,而且也很好理解。唯一的不足是无法构造像本站的分页中所使用的梯形。希望本文对各位有所帮助。
天带大家做的是垂直导航栏和水平导航栏。
垂直导航栏
水平导航栏
导航栏=链接列表
作为标准的HTML基础,一个导航栏是必须的,在我们的例子中我们将建立一个标准的HTML列表导航栏。
导航条基本上是一个链接列表,所以使用 <ul> 和 <li>元素非常有意义:
参考代码
<ul>
<li><a href="#home">主页</a></li>
<li><a href="#news">新闻</a></li>
<li><a href="#contact">联系</a></li>
<li><a href="#about">关于</a></li>
</ul>
现在,让我们从列表中删除边距和填充
参考代码
ul {
list-style-type: none;
margin: 0;
padding: 0;
}
例子解析:
list-style-type:none - 移除列表前小标志。一个导航栏并不需要列表标记,移除浏览器的默认设置将边距和填充设置为0~
上面的例子中的代码是垂直和水平导航栏使用的标准代码。
垂直导航栏
上面的代码,我们只需要 <a>元素的样式,建立一个垂直的导航栏。
(潭州教育官网导航栏)
参考代码
a
{
display:block;
width:60px;
}
示例说明:
display:block - 显示块元素的链接,让整体变为可点击链接区域(不只是文本),它允许我们指定宽度。
width:60px - 块元素默认情况下是最大宽度。我们要指定一个60像素的宽度。
注意:请务必指定 <a>元素在垂直导航栏的的宽度。如果省略宽度,IE6可能产生意想不到的效果
1.垂直导航条实例
创建一个简单的垂直导航条实例,在鼠标移动到选项时,修改背景颜色。
(效果图)
参考代码
ul {
list-style-type: none;
margin: 0;
padding: 0;
width: 200px;
background-color: #f1f1f1;
}
li a {
display: block;
color: #000;
padding: 8px 16px;
text-decoration: none;
}
/* 鼠标移动到选项上修改背景颜色 */
li a:hover {
background-color: #555;
color: white;
}
2.激活/当前导航条实例
在点击了选项后,我们可以添加 "active" 类来标准哪个选项被选中~
参考代码
.active {
background-color: #4CAF50;
color: white;
}
3.创建链接并添加边框
可以在 <li> or <a> 上添加text-align:center 样式来让链接居中。
可以在 border <ul> 上添加 border 属性来让导航栏有边框。如果要在每个选项上添加边框,可以在每个 <li> 元素上添加border-bottom 。
参考代码
ul {
border: 1px solid #555;
}
li {
text-align: center;
border-bottom: 1px solid #555;
}
li:last-child {
border-bottom: none;
}
4.全屏高度的固定导航条
接下来我们创建一个左边是全屏高度的固定导航条,右边是可滚动的内容。
参考代码
ul {
list-style-type: none;
margin: 0;
padding: 0;
width: 25%;
background-color: #f1f1f1;
height: 100%; /* 全屏高度 */
position: fixed;
overflow: auto;
/* 如果导航栏选项多,允许滚动 */
}
(注意: 该实例可以在移动设备上使用。)
水平导航栏
有两种方法创建横向导航栏。使用内联(inline)或浮动(float)的列表项,这两种方法都很好,但如果你想链接到具有相同的大小,你必须使用浮动的方法。
(Apple 官网导航栏)
1.内联列表项
建立一个横向导航栏的方法之一是指定元素, 上述代码是标准的内联。
参考代码
li
{
display:inline;
}
实例解析:
display:inline; -默认情况下,<li>元素是块元素。在这里,我们删除换行符之前和之后每个列表项,以显示一行。
2.浮动列表项
在上面的例子中链接有不同的宽度。对于所有的链接宽度相等,浮动 <li>元素,并指定为 <a>元素的宽度。
参考代码
li
{
float:left;
}
a
{
display:block;
width:60px;
}
实例解析:
float:left - 使用浮动块元素的幻灯片彼此相邻
display:block - 显示块元素的链接,让整体变为可点击链接区域(不只是文本),它允许我们指定宽度
width:60px - 块元素默认情况下是最大宽度。我们要指定一个60像素的宽度
3.水平导航条实例
创建一个水平导航条,在鼠标移动到选项后修改背景颜色。
参考代码
ul {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
background-color: #333;
}
li {
float: left;
}
li a {
display: block;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
/*鼠标移动到选项上修改背景颜色 */
li a:hover {
background-color: #111;
}
4.激活/当前导航条实例
在点击了选项后,我们可以添加 "active" 类来标准哪个选项被选中。
参考代码
.active {
background-color: #4CAF50;
}
5.链接右对齐
将导航条最右边的选项设置右对齐 (float:right;)。
参考代码
<ul>
<li><a href="#home">主页</a></li>
<li><a href="#news">新闻</a></li>
<li><a href="#contact">联系</a></li>
<li style="float:right"><a class="active" href="#about">关于</a></li>
</ul>
6.添加分割线
<li> 通过 border-right 样式来添加分割线。
参考代码
/* 除了最后一个选项(last-child) 其他的都添加分割线 */
li {
border-right: 1px solid #bbb;
}
li:last-child {
border-right: none;
}
7.固定导航条
可以设置页面的导航条固定在头部或者底部。
固定在头部参考代码
ul {
position: fixed;
top: 0;
width: 100%;
}
固定在底部参考代码
ul {
position: fixed;
bottom: 0;
width: 100%;
}
(该实例可以在移动设备上使用。)
8.灰色水平导航条
参考代码
ul {
border: 1px solid #e7e7e7;
background-color: #f3f3f3;
}
li a {
color: #666;
}
小伙伴们别被这一大段文字给吓到了,看完的小伙伴应该可以发现,垂直导航栏和水平导航栏其实很多地方是相似的,相信大家能很快就学会的~
有问题私信小编:"web"
时制作网站导航时,经常用到鼠标悬停展现下拉菜单的效果。在此记录一下实现过程,需支持CSS3浏览器运行。
首先看下实现的效果:
鼠标悬停效果
html部分:
<ul class="navbar-nav ml-auto">
<li class="nav-item hvr-underline-from-left nav-item1"><a class="nav-link hvr-icon-spin fa-caret-down" href="/solutions/">建站推广方案</a>
<div class="list-group shadow-sm ">
<a class="list-group-item list-group-item-action" href="/solutions/diagnosis/">分析 - 诊断分析/营销定位</a><a class="list-group-item list-group-item-action" href="/solutions/customize/">网站 - 定制品牌营销网站</a><a class="list-group-item list-group-item-action" href="/solutions/sem/">流量 - Google SEM 广告引流</a><a class="list-group-item list-group-item-action" href="/solutions/seo/">转化 - SEO优化+网站运维</a><a class="list-group-item list-group-item-action" href="/solutions/social/">社交 - Facebook/Youtube 运营推广</a><a class="list-group-item list-group-item-action" href="/solutions/training/">培训 - 线上线下课程免费送</a>
</div>
</li>
<li class="nav-item hvr-underline-from-left nav-item2"><a class="nav-link " href="/cases/">成功案例</a>
</li>
</ul>
重点CSS部分:
.nav-menu .navbar-collapse>.navbar-nav>li>.list-group {
position: absolute;
z-index: 1070;
width: auto;
left: 0;
overflow: hidden;
height: auto;
max-height: 0;// 最大高度初始为0
transition: all .3s ease; //效果时间 0.3s
visibility: hidden;
}
.nav-menu .navbar-collapse>.navbar-nav>li:hover>.list-group,.nav-menu .navbar-collapse>.navbar-nav>li>a:hover +.list-group {
max-height: 100vh; // 鼠标悬停时最大高度尽量大点,就有向下展开的动画效果
visibility: visible;
height: auto;
}
我的代码引用了 bootstrap v4 所以有些class 都是层叠覆盖写法。
*请认真填写需求信息,我们会在24小时内与您取得联系。