在網頁底部分頁看到這樣的效果是不是看上去還不錯?下面就來看看這是如何實現的吧~
一個矩形拼接兩個三角形最終制造出一個平行四邊形。為什么使用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小時內與您取得聯系。