整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

用 CSS 实现平行四边形分页导航

在网页底部分页看到这样的效果是不是看上去还不错?下面就来看看这是如何实现的吧~

第一种方法:利用border

一个矩形拼接两个三角形最终制造出一个平行四边形。为什么使用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来实现平行四边形的方法效果大概是这个样子

原来还可以只有平行四边形的外轮廓。(因为方法一只能创造填充效果的平行四边形)实现起来非常简单,主要是借助了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 都是层叠覆盖写法。