這篇文章給大家分享的是有關(guān)CSS怎么實(shí)現(xiàn)側(cè)滑顯示留言面板的網(wǎng)頁(yè)組件功能的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了三明免費(fèi)建站歡迎大家使用!
效果如下圖所示:
一、創(chuàng)建 HTML 結(jié)構(gòu)
基于上面的效果圖,我們要?jiǎng)?chuàng)建三個(gè)元素,一個(gè) checkbox 元素以及對(duì)應(yīng)的 label 標(biāo)記,和一個(gè)表單面板元素。
這里用到了一個(gè) CSS 特性值得大家關(guān)注下:
這個(gè)特性是我們實(shí)現(xiàn)這個(gè)案例的技巧之一,再結(jié)合 CSS checkbox 的偽類選擇器進(jìn)行留言面板的顯示與隱藏,這樣我們就可以擺脫 JS 來(lái)實(shí)現(xiàn)這個(gè)案例。
基于以上思路 ,我們開(kāi)始動(dòng)手吧,首先我們先放置 checkbox,和其對(duì)應(yīng)的 label,最后添加表單面板和相關(guān)的表單元素。
我們將通過(guò)表單的 id 屬性與表單中l(wèi)abel元素的 for 值與其關(guān)聯(lián),最終我們完成了 HTML 結(jié)構(gòu)如下段代碼所示:
完成后的效果圖如下:
二、定義基礎(chǔ)的樣式
現(xiàn)在我們開(kāi)始添加一些基礎(chǔ)的CSS的式,這里我們用到了CSS自定義變量,方便我們?nèi)中薷?,還有一些 reset 規(guī)則,和表單的基礎(chǔ)規(guī)則樣式,示例代碼如下:
:root { --white: white; --gradient: linear-gradient(-45deg, #FFA600 0%, #FF5E03 50%); --form: #eeefef; --border-radius: 4px; --form-width: 500px; --form-mob-width: 320px; } * { padding: 0; margin: 0; box-sizing: border-box; } body { font: 20px/1.5 sans-serif; background: var(--white); } h2 { font-size: 2rem; text-align: center; margin-top: 20vh; } button, label { cursor: pointer; } label { display: block; } button, input, textarea { font-family: inherit; font-size: 100%; border: none; } textarea { resize: none; }
三、 定義表單元素相關(guān)樣式
1、由于 checkbox 這個(gè)元素在案例中無(wú)需顯示,我們只是用其的偽類特性結(jié)合 label 控制留言面板的顯示與隱藏,因此我們需要將其移出可視區(qū)域,記住這里不能用隱藏屬性(display:none)。示例代碼如下:
[type="checkbox"] { position: absolute; left: -9999px; }
2、接下來(lái),我們需要添加這些CSS操作:
使用 fix 屬性將 checkbox 對(duì)應(yīng)的 label 標(biāo)簽元素固定在右側(cè)的中央。
垂直先顯示”FEEDBACK“文本。
隱藏表單面板,我們這里將其往右移動(dòng)其寬度的 100% 的距離,并垂直居中。
對(duì)應(yīng)的CSS代碼如下:
/*CUSTOM VARIABLES HERE*/ .feedback-label, .form { position: fixed; top: 50%; right: 0; } .feedback-label { transform-origin: top right; transform: rotate(-90deg) translate(50%, -100%); z-index: 2; } .form { width: var(--form-width); max-height: 90vh; transform: translate(100%, -50%); padding: 30px; overflow: auto; background: var(--form); z-index: 1; }
小提示: 1、這里需要強(qiáng)調(diào)的是 feedback-label 樣式,在其垂直變換時(shí),我們先逆時(shí)針進(jìn)行了旋轉(zhuǎn),其 x ,y 軸的方向也是隨著旋轉(zhuǎn)的,所以是translate(50%, -100%),將其垂直居中。
2、在 form 樣式里,我們使用 transform 方法,translate(100%, -50%) 將其移出頁(yè)面顯示區(qū)域
3、我們繼續(xù),大家不要著急,馬上就快完成了,我們需要將頁(yè)面弄的漂亮些,添加一些樣式,示例代碼如下:
/*CUSTOM VARIABLES HERE*/ .feedback-label, .form input, .form textarea, .form button { border-radius: var(--border-radius); } .feedback-label, .form button { background: var(--gradient); color: var(--white); } .feedback-label:hover, .form button:hover { filter: hue-rotate(-45deg); } .feedback-label { padding: 5px 10px; border-radius: var(--border-radius) var(--border-radius) 0 0; } form div:not(:last-child) { margin-bottom: 20px; } form div:last-child { text-align: right; } .form input, .form textarea { padding: 0 5px; width: 100%; } .form button { padding: 10px 20px; width: 50%; max-width: 120px; } .form input { height: 40px; } .form textarea { height: 220px; }
小提示:這里我們的背景色用到了 linear-gradient() 線性漸變,實(shí)現(xiàn)了一個(gè)漂亮的顏色漸變背景。還有一個(gè) CSS3 語(yǔ)法需要關(guān)注下:hue-rotate,色調(diào)旋轉(zhuǎn)濾鏡,方便我們改變當(dāng)前的顏色。
四、使用CSS選擇器,實(shí)現(xiàn)表單面板的切換和隱藏
我們通過(guò)點(diǎn)擊 checkbox 對(duì)應(yīng)的 label 標(biāo)簽進(jìn)行切換和顯示留言面板,這里我們用到了 :checked 偽類,以及 ~(后續(xù)同胞選擇器)和 +(緊鄰?fù)x擇器),輔助元素的選擇進(jìn)行樣式變換,示例代碼如下:
[type="checkbox"]:checked + .feedback-label { transform: rotate(-90deg) translate(50%, calc((var(--form-width) + 100%) * -1)); } [type="checkbox"]:focus + .feedback-label { outline: 2px solid rgb(77, 144, 254); } [type="checkbox"]:checked ~ .form { transform: translate(0, -50%); } .feedback-label, .form { transition: all 0.35s ease-in-out; }
這里有幾個(gè)樣式規(guī)則我們需要聊一下:
translate(50%, calc((var(--form-width) + 100%) * -1)); 這個(gè)樣式是不是有些復(fù)雜,其實(shí)也不難,就是多加了一個(gè)表單面板的寬度,由于旋轉(zhuǎn)后,y軸變成了水平軸,向左移動(dòng)相當(dāng)Y軸往上移動(dòng),因此是負(fù)值,需要乘-1。
第二個(gè)選擇器,我們之所以加個(gè)選中后的 outline 輪廓屬性,主要是為了方便那些習(xí)慣鍵盤(pán)操作的用戶,當(dāng)其使用 Tab 鍵選擇 feedback label元素時(shí),然后再使用 Space 空格鍵就能很方便的打開(kāi)留言面板進(jìn)行切換。
第三個(gè)選擇器,我們使用 transform: translate(0, -50%); 將 X 軸更改成0,恢復(fù)成最開(kāi)始的位置,這樣我們的留言面板內(nèi)容就能顯示出來(lái)。
五、處理響應(yīng)式問(wèn)題
最后,特別重點(diǎn)提示下我們做頁(yè)面要考慮頁(yè)面響應(yīng)式適配的問(wèn)題,這里我們需要針對(duì)手機(jī)設(shè)備做一些樣式的調(diào)整,比如更改表單面板的寬度由原來(lái)的 500px 調(diào)整到 320px,以及初始字體的大小,調(diào)整成16px。
最終添加的響應(yīng)式代碼如下:
/*CUSTOM VARIABLES HERE*/ @media screen and (max-width: 600px) { body { font-size: 16px; } .form { padding: 15px; width: var(--form-mob-width); } form div:not(:last-child) { margin-bottom: 10px; } [type="checkbox"]:checked + .feedback-label { transform: rotate(-90deg) translate(50%, calc((var(--form-mob-width) + 100%) * -1)); } }
感謝各位的閱讀!關(guān)于“CSS怎么實(shí)現(xiàn)側(cè)滑顯示留言面板的網(wǎng)頁(yè)組件功能”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!