最近限量蠻喜歡玩CSS的,所以就開始玩一些有的沒的主題。這是是用CSS來做出像Linux Command Line,可以輸入Command的簡單樣板,因為看很多介紹IDE或一些Coding高手的網站上都會放一個Command Line游標跳動的樣式就想說來玩玩看。
限量主要將樣式著重在模仿Command Line的幾個部分:
限量寫了三個主要的 class:
接下來有幾個實作要點要注意:
以下是實作的範例程式碼:
- 背景
- 字型
- 輸入游標
限量寫了三個主要的 class:
- console 表示 Command Line背景樣式
- keyin 表示輸入區樣式
- pointer 表示輸入游標樣式
接下來有幾個實作要點要注意:
- 因為字型要像Ubuntu,所以在 font-family 設定為 Monaco, Menlo, 'Ubuntu Mono', Consolas, source-code-pro, monospace。
- 為了製造出游標閃爍的功能,限量定義了一個動畫 flash 並由 pointer 使用,動畫內容很簡單只要在每個階段設定 opacity 的值變化就好了,這裡記得要將 animation設置為 infinite 不然呈現出來只會閃一次。
- 將Html的輸入控制項的 border 設為0就不會有邊框出來。另外輸入控制項在 focus 時會跑出 highlight的邊框,這要在 focus 的時候將 outline 設為 none。在 focus 的時候會跑出閃爍的游標,啊因為我們游標已經自己做了,所以要把原本的游標拿掉,將 color 設為透明再透過設定 text-shadow 就可達到我們要的效果。
- 因為Html的輸入控制項的寬度是固定的,所以這裡必須要讓寬度根據輸入內容動態調整,所以限量在keyup的事件中實作動態寬度調整。
以下是實作的範例程式碼:
CSS:
.console {
background-color: #000;
font-family: Monaco, Menlo, 'Ubuntu Mono', Consolas, source-code-pro, monospace;
font-size: 16px;
color: #fff;
width: 500px;
height: 250px;
padding: 5px 10px;
-ms-word-break: break-all;
word-break: keep-all;
}
.console p {
white-space: pre-line;
margin: 0;
}
.keyin {
background-color: inherit;
border: 0;
color: transparent;
text-shadow: 0 0 0 #fff;
font: inherit;
width: 0;
}
.keyin:focus {
outline: none;
}
.pointer {
background-color: #fff;
-moz-animation: flash 1s infinite;
-o-animation: flash 1s infinite;
-webkit-animation: flash 1s infinite;
animation: flash 1s infinite;
}
.pointer:after {
content: '_';
}
@-moz-keyframes flash {
0% {
opacity: 0;
}
20% {
opacity: 1;
}
40% {
opacity: 1;
}
60% {
opacity: 1;
}
80% {
opacity: 0;
}
100% {
opacity: 0;
}
}
@-webkit-keyframes flash {
0% {
opacity: 0;
}
20% {
opacity: 1;
}
40% {
opacity: 1;
}
60% {
opacity: 1;
}
80% {
opacity: 0;
}
100% {
opacity: 0;
}
}
@keyframes flash {
0% {
opacity: 0;
}
20% {
opacity: 1;
}
40% {
opacity: 1;
}
60% {
opacity: 1;
}
80% {
opacity: 0;
}
100% {
opacity: 0;
}
}
Javascript:
function changeWidth(ele) {
if(ele.value.length > 0) {
ele.size = ele.value.length + 1;
ele.style.width = 'auto';
} else {
ele.style.width = 0;
ele.size = 1;
}
}
Html:
<div class="console"> <div> <p>Download package ... Done. Install package ... Done. Read package ... Done. Complete!</p> </div> <div> <span>root@limited: </span> <span> <input type="text" id="keyin_field" class="keyin" onkeyup="changeWidth(this)" autofocus /> <label class="pointer" for="keyin_field"></label> </span> </div> </div>
執行結果:
Download package ... Done.
Install package ... Done.
Read package ... Done.
Complete!
root@limited:
大概就這樣,當然這只是簡單的,有不太像的部分請鞭小力一點。
留言
張貼留言