邊界是眾所周知的,有什麼新的東西嗎?好吧,我敢打賭,在這篇文章中,有很多你不看永遠不知道的東西!
不只可以用CSS3來建立圓角,使用原CSS一樣可以顯示自訂圖形。這是正確的(有待考究);在過去,沒發現這種技術之前,我們可能會使用背景影像定位來顯示一個園或箭頭。幸運的是,我們能放下PS圖象處理軟體了。
你可能很熟悉邊的最基本用法。
border: 1px solid black;
上面的程式碼將給元素套用1px的邊。即簡潔又簡單;但我們也可以稍作修改。
border-width: thick; border-style: solid; border-color: black;
除了指定特定的邊框寬度值,也可以使用這三個關鍵字:thin,
medium
和 thick
。
雖然乍看起來單一屬性的方式沒必要,但有極少數的情況下,當它是有利的,例如當你需要在特定的事件發生時更新邊的部分屬性。
也許你需要在使用者將滑鼠停留在特定的元素上時改變這個元素的邊框顏色。使用複合屬性需要重複像素值和邊的樣式。
box { border: 1px solid red; } .box:hover { border: 1px solid green; }
一個更優雅的和簡潔(DRY,don't repeat yourself)的做法是只更新邊的顏色屬性。
.box { border: 1px solid red; } .box:hover { border-color: green; }
此外,一會兒你會發現,這種單一屬性的方式有助於透過CSS創建自訂的形狀。
border-radius CSS3中的代表-第一個在社群中廣泛使用新屬性。 這意味著,除去Internet Explorer 8及更低版本,所有的瀏覽器可以顯示圓角。
為了讓樣式能正確應用,需要為Webkit和Mozilla核心添加前綴。
-webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;
然而,今天我們不關心前綴,只簡單堅持官方形式:border-radius。
如你所料,我們可以為每個角落指定不同的值。
border-top-left-radius: 20px; border-top-right-radius: 0; border-bottom-right-radius: 30px; border-bottom-left-radius: 0;
在上面的程式碼中,設定border-top-right-radius和border-bottom-left-radius為零是多餘的,除非該元素有繼承的值。
就像margin和padding一樣,如果需要的話,這些設定可以合併為單一的屬性。
/* 左上角, 右上角, 右下角, 左下角 */border-radius: 20px 0 30px 0;
舉例(網頁設計師常這樣做),可以用CSS的border - radius屬性模擬檸檬的形狀,如下:
.lemon { width: 200px; height: 200px; background: #F5F240; border: 1px solid #F0D900; border-radius: 10px 150px 30px 150px; }
許多設計師一直使用的是目前為止在本章列出的知識,然而,有一些方法我們可以進一步擴展!
當給一個元素應用多個邊的時候,有各種各樣的技術可以參考。
solid,dashed和dotted是最常用的border-style屬性值,還有其他幾個我們可以使用的值,包括groove和ridge。
border: 20px groove #e3e3e3;
或寫成單一屬性形式:
border-color: #e3e3e3; border-width: 20px; border-style: groove;
#雖然這看起來不錯,但ridge或groove效果並不是真正的多個邊。
創建兩邊的最流行的方式是利用outline屬性。
.box { border: 5px solid #292929; outline: 5px solid #e3e3e3; }
#這個方法表現的非常棒,然而,最多兩個邊界。 您應該需要建立一個層,實現漸變梯度效果,需要不同的方法。
当轮廓技术无法满足要求时,另一种方法是利用::before和:after伪元素,并利用生成内容产生额外的边。
.box { width: 200px; height: 200px; background: #e3e3e3; position: relative; border: 10px solid green; } /* 创建和容器宽度相同的两个容器 */.box:after, .box:before { content: ''; position: absolute; top: 0; left: 0; bottom: 0; right: 0; } .box:after { border: 5px solid red; outline: 5px solid yellow; } .box:before { border: 10px solid blue; }
这也许不是最优雅的方法,但它确实起作用了。需要注意的地方是很容易混淆边界颜色的顺序。确保正确的序列。
创建无限数量的边界更酷的方法是利用CSS3的box-shadow属性。
.box { border: 5px solid red; box-shadow: 0 0 0 5px green, 0 0 0 10px yellow, 0 0 0 15px orange; }
在这种情况下,我们灵活使用box-shadow属性,这种方法,并不是css规范的本意。
通过设置x,y,和模糊属性为0,我们可以使用多个值在需要的位置创建实线边界。因为box-shadow属性可以叠加,通过逗号分割,可以使用无限的值。
这种技术能很好的运行。在不能识别box-shadow属性的老式浏览器中,这只会呈现单一红色5 px边界。
谨记:在所有浏览器里实现相同的设计是不必要的。为大部分现代浏览器书写你的CSS,然后为老式浏览器提供可行的回退版本。
除了给border-radius传递一个值外,我们也可以提供两个——由/分隔——为水平和垂直半径指定不同的值。
例如……
border-radius: 50px / 100px; /* 水平半径, 垂直半径 */
……相当于:
border-top-left-radius: 50px 100px; border-top-right-radius: 50px 100px; border-bottom-right-radius: 50px 100px; border-bottom-left-radius: 50px 100px;
这种技术是特别有用,当你需要模拟一个平缓的,冗长的曲线,而不是一个通用的圆角。例如,下面的代码允许我们稍微变形一个正方形形状,模拟出更多卷纸一样的效果。
.box { width: 200px; height: 200px; background: #666; border-top-left-radius: 15em 1em; border-bottom-right-radius: 15em 1em; }
也许最干脆的是直接使用边界,给宽和高为零的元素巧妙的应用边界。令人困惑,是吗?让我们看看一个演示。
在接下来的几个例子,假设以下标记……
<p class="box"></p>
……和基本样式如下:
.box { width: 200px; height: 200px; background: black; }
最常用的例子是如何使用CSS形状创建一个箭头。
关键是了解如何用CSS生成箭头,通过为每个边设置不同的颜色,并且将容器的宽和高都减为零。
假设一个有arrow类的p作为容器:
.arrow { width: 0; height: 0; border-top: 100px solid red; border-right: 100px solid green; border-bottom: 100px solid blue; border-left: 100px solid yellow; }
在本章的开始,更清洁的语法是不使用复合语法:
.arrow { width: 0; height: 0; border: 100px solid; border-top-color: red; border-right-color: green; border-bottom-color: blue; border-left-color: yellow; }
我们甚至可以进一步精简,通过合并颜色值。
.arrow { width: 0; height: 0; border: 100px solid; border-color: red green blue yellow; }
很有趣,不是吗?不过,当我们后退一步时更有趣。现在,如果我们将除了蓝边之外的所有的border-colors设置为透明的将会怎样?
.arrow { width: 0; height: 0; border: 100px solid; border-bottom-color: blue; }
太棒了!但用p创建一个箭头似乎不太符合语义化。然而,通过after或before等相关伪元素可以用来创建箭头。
创建一个100%CSS的气泡,我们从下面的标记考试。
<p class="speech-bubble">Hi there!</p>
接下来,应用一些基本样式。
.speech-bubble { position: relative; background-color: #292929; width: 200px; height: 150px; line-height: 150px; /* 垂直居中 */ color: white; text-align: center; }
箭头将通过after伪元素实现。
.speech-bubble:after { content: ''; }
:before和:after伪元素可以用来在元素内容之前或之后插入生成内容。
接下来,只是简单复制箭头,并定位到适当的位置。我们开始通过绝对定位的内容,重置宽度和高度,并应用边界颜色。
.speech-bubble:after { content: ''; position: absolute; width: 0; height: 0; border: 10px solid; border-color: red green blue yellow; }
因为我们知道我们想要向下的箭头,上面的图片表明,除了红色(或上)边境其他的都应该被省略,或者设置为透明。
.speech-bubble:after { content: ''; position: absolute; width: 0; height: 0; border: 10px solid; border-top-color: red; }
当创建CSS形状是,因为我们不能使用width属性来指定箭头的宽度,而是应该使用border-width属性。在这种情况下,箭头应该更大点;所以border-width可以增加到15 px。我们将箭头定位到容器的底部居中,通过利用top和left属性。
.speech-bubble:after { content: ''; position: absolute; width: 0; height: 0; border: 15px solid; border-top-color: red; top: 100%; left: 50%; }
到这里就差不多了;最后一个步骤是更新箭头的颜色和容器的背景颜色相同。定位也需要修改,根据边界的宽度(15 px)。当我们在这里,我们还将应用一个微妙border-radius属性来使容器更像气泡。
.speech-bubble { /* … 其他样式 */ border-radius: 10px; } .speech-bubble:after { content: ''; position: absolute; width: 0; height: 0; border: 15px solid; border-top-color: #292929; top: 100%; left: 50%; margin-left: -15px; /* 调整边框宽度 */}
不错,不是吗?将这代码抽象为几个可重用的类,好应用到你将来的项目。
{:;:;:;:;:; :;:;:;:; }{:;:;:;:;:; } {:;:;:;:; }{:;:;:;:; }{:;:;:;:; }{:;:;:;:; }
使用line-height实现垂直居中的一个缺点是仅限于一行。当文本需要两行或两行以上时,每一行的高度将会太大。一个聪明的解决办法是设置气泡的display属性为table,和包装段落文本的display为table-cell。这就允许我们将文本设为垂直居中。
<p class="speech-bubble speech-bubble-top"> <p>Text goes here.</p></p>
接下来,修改CSS。
.speech-bubble { /* 其他样式 */ display: table; } .speech-bubble p { display: table-cell; vertical-align: middle; }
如果引用display: table 带来可怕的表格布局的老式回忆,别担心。这些属性是指显示一个元素的样式。
我们不局限于三角形;CSS能产生各种各样的形状,甚至心和生物危害标志!
.biohazard { width: 0; height: 0; border: 60px solid; border-radius: 50%; border-top-color: black; border-bottom-color: black; border-left-color: yellow; border-right-color: yellow; }
虽然最简单的border:1px solid black语法很有帮助,如果我们聪明,我们可以创建各种有益的效果,图标和形状。谁会想到边界可以如此强大?关键是要记住常见的形状或对话框的样式应该只被创建一次,然后抽象出来实用的类为将来使用。
更多CSS:Border属性 相关文章请关注PHP中文网!