1. 程式人生 > >CSS border製作小三角形狀及應用(相容IE6)

CSS border製作小三角形狀及應用(相容IE6)

http://caibaojian.com/css-border-triangle.html

原理

css盒模型

css border製作小三角形狀及應用(相容IE6)

一個盒子包括: margin+border+padding+content
– 上下左右邊框交界處出呈現平滑的斜線. 利用這個特點, 通過設定不同的上下左右邊框寬度或者顏色可以得到小三角, 小梯形等.
– 調整寬度大小可以調節三角形形狀.

示例1

一般情況下, 我們設定盒子的寬高度, 及上下左右邊框, 會呈現如下圖

css border製作小三角形狀及應用(相容IE6)
#test1 {
    height:20px;
    width:20px;
    border-color:#FF9600 #3366ff #12ad2a #f0eb7a;
    border-style:solid;
    border-width:20px;
}

示例2

在上面基礎上, 我們把寬高度都設為0時, 會呈現上述的邊界斜線.

css border製作小三角形狀及應用(相容IE6)
#test2 {
    height:0;
    width:0;
    overflow: hidden; /* 這裡設定overflow, font-size, line-height */
    font-size: 0;     /*是因為, 雖然寬高度為0, 但在IE6下會具有預設的 */
    line-height: 0;  /* 字型大小和行高, 導致盒子呈現被撐開的長矩形 */
    border-color:#FF9600 #3366ff #12ad2a #f0eb7a;
    border-style:solid;
    border-width:20px;
}

這時, 其實我們已經看到有上下左右四個三角形了..如果, 我們把4種顏色, 只保留一種顏色, 餘下3種顏色設定為透明(或者設定為和背景色相同的顏色), 那不就出現一個小三角了麼

示例3

只保留上面的橙色, 看看

css border製作小三角形狀及應用(相容IE6)
#test3 {
    height:0;
    width:0;
    overflow: hidden;
    font-size: 0;
    line-height: 0;
    border-color:#FF9600 transparent transparent transparent;
    border-style:solid;
    border-width:20px;
}

可是, IE6下不支援透明啊~~~, 會出現下圖的樣子

css border製作小三角形狀及應用(相容IE6)

找到一個在IE6下邊框透明的文章中找到解決辦法, 如下例

示例4

IE6下, 設定餘下三條邊的border-style為dashed,,,即可達到透明的效果~ 具體原因可以見參考資料3

css border製作小三角形狀及應用(相容IE6)
#test4 {
    height:0;
    width:0;
    overflow: hidden;
    font-size: 0;
    line-height: 0;
    border-color:#FF9600 transparent transparent transparent;
    border-style:solid dashed dashed dashed;
    border-width:20px;
}

當然, 在IE6下, 不設定透明, 將其顏色設定為背景色, 使其看不出來也是可以的.

示例5

上面我們畫的小三角的斜邊都是依靠原來盒子的邊, 還有另外一種形式的小三角, 就是斜邊在盒子的對角線上

css border製作小三角形狀及應用(相容IE6)
#test5 {
    height:0;
    width:0;
    overflow: hidden;
    font-size: 0;
    line-height: 0;
    border-color:#FF9600 #3366ff transparent transparent;
    border-style:solid solid dashed dashed;
    border-width:40px 40px 0 0 ;
}

保留其中一種顏色, 就可以得到斜邊在對角線上的三角形了…多個這樣的三角形, 通過設定邊框大小, 顏色, 拼湊起來可以形成任意形狀的三角形.

css border製作小三角形狀及應用(相容IE6)

像這種不規則的三角形, 延伸一下, 放在氣泡框上, 就可以省去拼背景圖片的麻煩了.

css border製作小三角形狀及應用(相容IE6)

另外, 關於氣泡框, 可以使用稜形字元(◆)來實現, 設定其font-size, 顏色和背景色一致, 定位可以使用margin負值和absolute絕對定位來實現, 見示例.

應用之圓角生成

應該說是近似圓角,,其實由一個高度非常小的梯形展示出來
- 上梯形(無上邊框,下左右3px寬度, 左右顏色去掉)+矩形+下梯形

css border製作小三角形狀及應用(相容IE6)

自適應圓角1:
- 整個rc設定為float: left 或 display: inline-block 分為top,bd,bottom, top中又有兩個層rc1和rc2, rc1只設置border-top, 高度為0, 並設定左右margin呈短小的一橫線, rc2只設置左右border並且左右margin小於rc1, height為1px, 中間bd設定左右border,不設定左右margin;
- 不過 IE 6&7 出現 bug:rc在IE6中依然顯示為dispaly:block,而IE7中top 和 bottom縮成一坨,不肯擴充套件開來,而在rc1/rc2/rc3 中插入文字xxx後只能擴充套件到文字寬度,不能與bd對齊.
自適應圓角2
- 自 Google 系產品的 1px 圓角按鈕,,,三層div, 最外層div1正常設定邊框寬度1px, 呈現出上下邊框線, 中間div2只設置左右邊框, 且把左右margin設定成負值, 呈現出圓角處的4個圓點 內層div3同樣只設置左右邊框, 同時margin上下空出div2的高度, margin左右也設定與div2相同的負值.

其他小問題

- 透明:
IE6瀏覽器不支援transparent透明屬性,就border生成三角技術而言,直接設定對應的透明邊框的border-style屬性為 dotted或是dashed即可解決這一問題,原因是在IE6下, 點線與虛線均以邊框寬度為基準,點線長度必須是其寬度的3倍以上(height>=border-width*3),虛線寬長度必須是其寬度的5倍 以上(height>=border-width*5),否則點線和虛線都不會出現.
- IE6的奇偶bug:
如果定位外框高度或是寬度為奇數,則IE6下,絕對定位元素的低定位和右定位會有1畫素的誤差.所以,儘量保證外框的高度或寬度為偶數值.
- IE6的空div高度bug:
IE6下,空div會有莫名的高度,也就是說height:0;不頂用,此時形成的尖角的實際佔高於其他瀏覽器是有差異的.可使用font-size:0; + overflow:hidden;修復此問題.
- filter: chroma濾鏡
該屬性屬性可以設定一個物件中指定的顏色為透明色, 如:
border-color: pink;
filter: chroma(color=pink);

擴充套件學習(酷劍原創)

通過上面給力的文章,我們瞭解到使用css製作相容的小三角。
但是日常的小三角哪有這麼簡單呢?例如我們的一個下拉選單,裡面有一個小三角行的,小三角行有藍色邊框,底色為白色。這就需要運用兩個小三角來製作定位了。
導航小三角

通常設定上面的ul相對於上面的li為position:absolute;

這兩個的小三角行則是通過偽元素來製作,同時通過一些標籤來相容IE6和IE7的。如:

.header .menu ul:before,.header .menu ul .before {
display:inline-block;
width:0;
height:0;
overflow:hidden;
line-height:0;
font-size:0;
vertical-align:middle;
border-bottom:7px solid #0088CC;
border-top:0 none;
border-left:7px dashed transparent;
border-right:7px dashed transparent;
_color:#FF3FFF;
_filter:chroma(color=#FF3FFF);
content:"";
left:37px;
position:absolute;
top:-7px
}
.header .menu ul:after,.header .menu ul .after {
display:inline-block;
width:0;
height:0;
overflow:hidden;
line-height:0;
font-size:0;
vertical-align:middle;
border-bottom:6px solid #ffffff;
border-top:0 none;
border-left:6px dashed transparent;
border-right:6px dashed transparent;
_color:#FF3FFF;
_filter:chroma(color=#FF3FFF);
content:"";
left:38px;
position:absolute;
top:-6px
}

同時我還發現了一個bug,那就是在IE6下面當隱藏UL,然後滑鼠經過LI時顯示時小三角不顯示了,不知道是什麼原因,我通過給UL直接設定為visibility:hidden而不是display:none,如果你也遇到同樣的情況,希望這個發現能夠對你有用,如果你無視IE6、IE7,那麼就直接用偽元素吧。什麼hack都不用。

相關推薦

CSS border製作三角形狀應用相容IE6

http://caibaojian.com/css-border-triangle.html 原理 css盒模型 一個盒子包括: margin+border+padding+content – 上下左右邊框交界處出呈現平滑的斜線. 利用這個特點, 通過設定不同的

CSS三角的寫法相容IE6

目錄 簡介 優點 原理 1. 先建立一個div 2. 然後給div設定邊框。 3. 給div的四個邊框都設定不同的顏色 4. 把寬度和高度都變成0 5. 其餘角為透明 6. 相容IE6瀏覽器 造成這樣的原因是:

JSON與XML動態轉換研究應用十六

一、基本資訊  標題:JSON與XML動態轉換研究及應用  時間:2018  出版源:軟體導刊期刊  檔案分類:文獻筆記 二、研究背景  在相關 AJAX應用中,XML和JSON是主要資料交換格式。JSON具有規則簡單、便於學習的特點,且配有多種語言開發包,在專案中易於使用。無論是使用JavaScript還

LINUX下NFS的配置應用3.0

客戶端配置1.linux客戶端的使用(1)建立共享目錄為了更好地說明客戶端的配置使用,先重新建立兩個共享目錄。修改/etc/exports如下vi /etc/exports/media * (ro)/file * (rw)(2)重新啟動伺服器service nfs resta

css寫帶三角對話框

height 代碼 有一個 right 元素 src ive after image 在實際樣式中經常會遇到要寫類似對話框的樣式,而這種樣式往往會有一個小三角,如下所示: 那麽如何用css寫出來呢,其實很簡單,先讓父元素相對定位,然後運用css的偽類before或afte

判斷點是否在多邊形內的Python實現應用射線法

判斷點是否在多邊形內的Python實現及小應用(射線法) 轉 https://www.jianshu.com/p/ba03c600a557 判斷一個點是否在多邊形內是處理空間資料時經常面對的需求,例如GIS中的點選功能、根據多邊形邊界篩選出位於多邊形內的點、求交集、篩選不在多邊形內

CSS實現帶三角的提示框

最終效果大概如下: 主要實現的思路: 將提示框分為兩個部分,一個是方形的主題,一個是鏤空的三角形。所以html大體的結構應該如下: <div class="tips"> &

如何使用CSS畫一個三角圖示

如何用css寫前端開發中常用的專案符號小三角呢?其實很簡單 HTML程式碼: <div class="sanjiao"></div> CSS程式碼: .sanjiao { width: 0; height: 0; overflow: hidde

css 實現邊框三角

帶有邊框的三角形如何實現呢 這種就相當於兩個絕對定位的無邊框三角形疊加在一起 為了程式碼簡潔在非ie6下采用:before和after偽類,ie6下用樣式名來實現,程式碼 1.dom元素 <div class="box sanjiao_border"&g

Echarts tooltip 自定義 css 樣式 帶三角的背景樣式

var geoCoordMap = {     '上海': [121.4648,31.2891],     '東莞': [113.8953,22.901],     '東營': [118.7073,37.5513],     '中山': [113.4229,22.478],

ELK部署logstash安裝部署應用

日誌 elk elkstack Logstash 安裝部署註意事項: Logstash基本概念:logstash收集日誌基本流程: input-->codec-->filter-->codec-->outputinput:從哪裏收集日誌。filter:發出去前進行過濾out

Qt容器類的對象模型應用線性結構篇:對於QList來說,sharable默認是false的,但對於接下來講的QVector來說,sharable默認是true

連續 ble begin 當我 保存 img article net 內容 用Qt做過項目開發的人,肯定使用過諸如QList、QVector、QLinkList這樣的模板容器類,它們雖然名字長的不同,但使用方法都大致相同, 因為其使用方法都大體相同,很多人可能隨便拿一個容器

Spring MVC 配置應用1

一,分析 目的:通過控制器呼叫hello.jsp  /hello.do -->DispatcherServlet(配置) -->HanlderMapping(配置) -->HelloController(編寫+配置) -->ViewResolver -

關於libfacedetection解析應用

#include<opencv2\opencv.hpp> using namespace std; using namespace cv; using namespace cv::ml; int main() { //訓練需要用到的資料 i

ml課程:最大熵與EM演算法應用含程式碼實現

以下是我的學習筆記,以及總結,如有錯誤之處請不吝賜教。 本文主要介紹最大熵模型與EM演算法相關內容及相關程式碼案例。 關於熵之前的文章中已經學習過,具體可以檢視:ml課程:決策樹、隨機森林、GBDT、XGBoost相關(含程式碼實現),補充一些 基本概念: 資訊量:資訊的度量,即

初夏談:判斷運動員名次,楊輝三角,日本謀殺案斷案大師

今天給大家帶來三道經典題型。 5位運動員參加了10米臺跳水比賽,有人讓他們預測比賽結果 A選手說:B第二,我第三; B選手說:我第二,E第四; C選手說:我第一,D第二; D選手說:C最後,我第三; E選手說:我第四,A第一; 比賽結束後,每位選手都說對了一半,請程式設計確定比賽的名次。 #

卡爾曼濾波原理應用

出於科研需要,打算開始學習卡爾曼濾波(Kalmam Filter)。很早之前就聽說過卡爾曼濾波,但一直沒能深入學習,這次終於有機會了,哈哈。 1.卡爾曼濾波的發展過程 卡爾曼濾波的本質屬於"估計"範疇.先介紹下估計,所謂“估計”問題,就是對收到隨機干擾和隨機測量誤差作用的物理系統,按照某種效

Java IO流應用

IO流 IO流概述及FileWriter類的使用 FileReader類使用 緩衝流介紹和使用 IO流相關案例 NO.one IO流概述及FileWriter類使用   1.1 IO流概述及分類    IO流用來處理裝置之間的資料傳輸  

g2o原理應用

g2o是一個通用的圖優化框架。 本文結合論文g2o: A general framework fo graph optimizaiton說明g2o的理論,然後編寫一個示例程式,說明g2o的使用方法。 g2o理論: 許多問題可以建模為最小二乘優化的狀態估計問題。問題形式如圖 F(x)

C++的一些操作、常用庫函式持續更新

  1. 強制保留n位小數(位數不足則強制補零)    標頭檔案:    #include <iomanip>    在輸出前:    cout<<setprecision(n);    也有不用標頭檔案的方式,在輸出前:    cout.setf(ios::fixed);