CSS中的背景和邊框

1.半透明邊框

問題原因:背景會擴(kuò)展到邊框border下
解決方案:把背景限制在padding-box中
background-clip: padding-box;

Paste_Image.png

2.多重邊框

box-shadow方案
Paste_Image.png
div {
    width: 100px;
    height: 60px;
    margin: 25px;
    background: yellowgreen;
    box-shadow: 0 0 0 10px #655,
            0 0 0 15px deeppink,
            0 2px 5px 15px rgba(0,0,0,.6);
}

注意:這里的邊框是向外擴(kuò)展的外邊框灿意,不會響應(yīng)鼠標(biāo)事件,加入屬性insert可以解決這個問題

Paste_Image.png
outline 方案
background: yellow;
border: 10px solid #655;
outline: 5px solid deeppink;

注意:只適用于雙層邊框的效果缤剧;不一定能產(chǎn)生適應(yīng)border-radius屬性的圓角。

3.背景的靈活定位

background-position 方案
div {
    background: url(http://csssecrets.io/images/code-pirate.svg)
                no-repeat bottom right #58a;
    background-position: right 20px bottom 10px;
    
    /* Styling */
    max-width: 10em;
    min-height: 5em;
    padding: 10px;
    color: white;
    font: 100%/1 sans-serif;
}

注意:提供回退方案汗销,使得在不支持background-position的瀏覽器中圖像在右下角抵窒。

background: url(http://csssecrets.io/images/code-pirate.svg)
                no-repeat bottom right #58a;
background-origin 方案

正常的background-position是以padding-box為準(zhǔn)的,要排除padding-box 的影響可以使用background-origin 屬性李皇。

background-origin: content-box;
div {
    background: url(http://csssecrets.io/images/code-pirate.svg)
                no-repeat bottom right #58a;
    background-origin: content-box;
    
    /* Styling */
    max-width: 10em;
    min-height: 5em;
    padding: 10px; //改變padding的值,背景的位置隨之變化掉房,固定在content-box內(nèi)
    color: white;
    font: 100%/1 sans-serif;
}
calc() 方案

采用左上角思維,用calc()函數(shù)來確定位置卓囚,100%偏移量就靠右,100%-20px就是距離右側(cè)邊界20px;

div {
    background: url(http://csssecrets.io/images/code-pirate.svg)
                no-repeat bottom right #58a;
    background-position: calc(100% - 20px) calc(100% - 10px);
    
    /* Styling */
    max-width: 10em;
    min-height: 5em;
    padding: 10px;
    color: white;
    font: 100%/1 sans-serif;
}

注意:這個方案不會隨padding的變化而變化粥烁,背景固定在padding box 內(nèi)蝇棉。

4.邊框內(nèi)圓角

效果:邊框內(nèi)顯示圓角讨阻,邊框外部仍然是直角
解決方案:box-shadow和outline配合使用篡殷。
注意:box-shadow的寬度最小值,可以直接取border-radius的一半

div {
    outline: .6em solid #655;
    box-shadow: 0 0 0 .4em #655; /* todo calculate max of this */
    
    max-width: 10em;
    border-radius: .8em;
    padding: 1em;
    margin: 1em;
    background: tan;
    font: 100%/1.5 sans-serif;
}
Paste_Image.png

5.條紋背景

問題:用css直接創(chuàng)建條紋背景
解決方案:利用漸變色的色標(biāo)位置搀绣,當(dāng)兩色色標(biāo)位置重合時,漸變效果消失链患,變成實色條紋

水平條紋

兩色條紋

background: linear-gradient(#fb3 50%, #58a 0); 
background-size: 100% 30px;

注意:第二個色標(biāo)位置本來應(yīng)該是50%瓶您,為了避免每次都修改兩個參數(shù)麻捻,用到規(guī)范:當(dāng)?shù)诙€色標(biāo)位置設(shè)置為0呀袱,那么它的位置就會調(diào)整為前一個色標(biāo)的位置值

Paste_Image.png

三色條紋

background: linear-gradient(#fb3 33.3%, #58a 0,#58a 66.6%, yellowgreen 0); 
background-size: 100% 45px;
垂直條紋
background: linear-gradient(to right, #fb3 50%, #58a 0); //添加to right 屬性
background-size: 30px 100%; //顛倒值夜赵,左右,上下
Paste_Image.png
兩色斜向條紋
background: linear-gradient(45deg
#fb3 25%, #58a 0, 
#58a 50%, #fb3 0,
#fb3 75%, #58a 0);
backgtound-size: 42.4px 42.4px 
更加簡潔的斜向條紋方案
background: repeating-linear-gradient(60deg, 
              #fb3, #fb3 15px,
              #58a 0, #58a 30px);//repeating-linear-gradient屬性
height: 100%;
設(shè)置同色系條紋

方法:設(shè)置最深的顏色為背景色摊腋,疊加半透明白色條紋來產(chǎn)生淺色條紋

background: #58a;
background-image: repeating-linear-gradient(30deg, 
              hsla(0,0%,100%,.1), hsla(0,0%,100%,.1) 15px,
              transparent 0, transparent 30px);

height: 100vh;
Paste_Image.png

6.復(fù)雜的背景圖案

CSS3 圖案庫lea.verou.me/css3patterns
SVG 圖案庫philbit.com/svgpatterns
網(wǎng)格
思路:把水平和垂直的條紋進(jìn)行疊加

方格條紋:
background: white;
background-image: linear-gradient(90deg, rgba(200,0,0,.5) 50%,transparent 0),
                linear-gradient(rgba(200,0,0,.5) 50%, transparent 0);
background-size: 30px 30px;
可維護(hù)嘁傀、合理的方案,可多種網(wǎng)格疊加
background: #58a;
background-image: linear-gradient(white 2px, transparent 0),
                  linear-gradient(90deg, white 2px, transparent 0),
                  linear-gradient(hsla(0,0%,100%,.3) 1px, transparent 0),
                  linear-gradient(90deg, hsla(0,0%,100%,.3) 1px, transparent 0);
background-size: 50px 50px, 50px 50px,
                 10px 10px, 10px 10px;
波點
background: #655;
background-image: radial-gradient(tan 20%, transparent 0),
                  radial-gradient(tan 20%, transparent 0);
background-size: 30px 30px;
background-position: 0 0, 15px 15px;
棋盤
background: #eee;
background-image: 
linear-gradient(45deg, #bbb 25%, transparent 0),
linear-gradient(45deg, transparent 75%, #bbb 0),
linear-gradient(45deg, #bbb 25%, transparent 0),
linear-gradient(45deg, transparent 75%, #bbb 0);
background-position:0 0,15px 15px,15px 15px,30px 30px;
background-size: 30px 30px;
優(yōu)化
background: #eee;
background-image: 
linear-gradient(45deg, rgba(0,0,0,.5) 25%, transparent 0,transparent 75%,rgba(0,0,0,.5) 0),
linear-gradient(45deg, rgba(0,0,0,.5) 25%, transparent 0,transparent 75%,rgba(0,0,0,.5) 0);
background-position:0 0,15px 15px;
background-size: 30px 30px;

7.隨機(jī)背景

解決方法:通過質(zhì)數(shù)來增加隨機(jī)性橙凳。又稱為“蟬原則”笑撞,可用在需要生成隨機(jī)情況的場合岛啸。

background: hsl(20, 40%, 90%);
background-image: 
    linear-gradient(90deg, #fb3 11px, transparent 0),
    linear-gradient(90deg, #ab4 23px, transparent 0),
    linear-gradient(90deg, #655 41px, transparent 0);
background-size: 83px 100%, 61px 100%, 41px 100%;
Paste_Image.png

8.連續(xù)的圖像邊框

border-image:工作原理娃殖,九宮格伸縮法,不適合
思路:在背景圖片上再加上一層純白色的實色背景

圖片邊框背景
padding: 1em;
border: 1em solid transparent;
background: linear-gradient(white,white),
            url(stone-art.jpg);//這里是邊框背景圖片地址
background-size: cover;
background-clip: padding-box, border-box;
background-origin: border-box;

簡化代碼

border: 1em solid transparent;
background: linear-gradient(white, white) padding-box,
       url(http://csssecrets.io/images/stone-art.jpg) border-box  0 / cover;
信封邊框
用background疊加
div {
    padding: 1em;
    border: 1em solid transparent;
    background: linear-gradient(white, white) padding-box,
                repeating-linear-gradient(-45deg, red 0, red 12.5%, transparent 0, transparent 25%, 
                  #58a 0, #58a 37.5%, transparent 0, transparent 50%) 0 / 6em 6em;
    
    max-width: 20em;
    font: 100%/1.6 Baskerville, Palatino, serif;
}
用border-image屬性
div {
    padding: 1em;
    border: 1em solid transparent;
    border-image:16 
                repeating-linear-gradient(-45deg, red 0, red 1em, transparent 0, transparent 2em, 
                  #58a 0, #58a 3em, transparent 0, transparent 4em);
    
    max-width: 20em;
    font: 100%/1.6 Baskerville, Palatino, serif;
}
Paste_Image.png
螞蟻行軍效果
@keyframes ants{to{background-position:100%}}

div {
    padding: 1em;
    border: 1px solid transparent;
    background: linear-gradient(white, white) padding-box,
                repeating-linear-gradient(-45deg, black 0, black 25%, 
                 white 0, white 50%) 0 / .6em .6em;
    max-width: 20em;
    animation: ants 12s linear infinite;
}

Paste_Image.png
Paste_Image.png
用border-image做一個頂部邊框被裁減的效果

思路:運(yùn)用border-image加上一條由漸變生成的垂直條紋,而邊框的粗細(xì)有border中的width來控制芬首。

div {
    max-width:20em;
    border-top: .2em solid transparent;
    border-image: 100% 0 0 linear-gradient(90deg, currentColor 8em, transparent 0);
    padding-top: 1em;
}
Paste_Image.png

本文整理自《CSS揭秘》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赦政,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恢着,老刑警劉巖桐愉,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掰派,死亡現(xiàn)場離奇詭異,居然都是意外死亡靡羡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門描扯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绽诚,你說我怎么就攤上這事°竟海” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵玫鸟,是天一觀的道長犀勒。 經(jīng)常有香客問我屎飘,道長贾费,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任褂萧,我火速辦了婚禮,結(jié)果婚禮上导犹,老公的妹妹穿的比我還像新娘。我一直安慰自己谎痢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布节猿。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浸间。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天发框,我揣著相機(jī)與錄音煤墙,去河邊找鬼。 笑死仿野,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脚作。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼球涛,長吁一口氣:“原來是場噩夢啊……” “哼校镐!你這毒婦竟也來了亿扁?” 一聲冷哼從身側(cè)響起鸟廓,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎引谜,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體员咽,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年契讲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怀泊。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡误趴,死狀恐怖霹琼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情枣申,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布忠藤,位于F島的核電站,受9級特大地震影響模孩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜榨咐,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望块茁。 院中可真熱鬧,春花似錦数焊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚕愤。三九已至,卻和暖如春萍诱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背裕坊。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留籍凝,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓声诸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親退盯。 傳聞我的和親對象是個殘疾皇子泻肯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1慰照、垂直對齊 如果你用CSS,則你會有困惑:我該怎么垂直對齊容器中的元素毒租?現(xiàn)在,利用CSS3的Transform墅垮,...
    kiddings閱讀 3,150評論 0 11
  • body{ background:#f5faff; } .demo_con{ width:960px; margi...
    小憶123閱讀 1,081評論 0 0
  • shkdsnks 一、背景與邊 1算色、半途明邊框 當(dāng)頁面中有div,css樣式如下時: width: 100px;h...
    LittlehorseX閱讀 514評論 0 0
  • 1.多重邊框 我們可以通過使用border-image來寫一個多重邊框,或使用多個元素來模擬多重邊框齐鲤,不過我們有更...
    FlyingWWS閱讀 2,411評論 2 5
  • 最近,隨著期末的到來淆九,各種各樣的事便接踵而至统锤。然而炭庙,昨天一個莫名的電話便將我的思緒拉到很遠(yuǎn)很遠(yuǎn)。 打電話來的是大學(xué)...
    留爾于此閱讀 800評論 0 0