溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

CSS怎么實現(xiàn)側(cè)滑顯示留言面板的網(wǎng)頁組件功能

發(fā)布時間:2021-03-20 09:45:06 來源:億速云 閱讀:174 作者:小新 欄目:web開發(fā)

這篇文章給大家分享的是有關(guān)CSS怎么實現(xiàn)側(cè)滑顯示留言面板的網(wǎng)頁組件功能的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

效果如下圖所示:

CSS怎么實現(xiàn)側(cè)滑顯示留言面板的網(wǎng)頁組件功能

一、創(chuàng)建 HTML 結(jié)構(gòu)

基于上面的效果圖,我們要創(chuàng)建三個元素,一個 checkbox 元素以及對應(yīng)的 label 標(biāo)記,和一個表單面板元素。

這里用到了一個 CSS 特性值得大家關(guān)注下:<label> 標(biāo)簽的 for 屬性用于指定與哪個表單元素進行關(guān)聯(lián),擴大表單元素的點擊區(qū)域,我們點擊 label 元素標(biāo)記,其對應(yīng)的表單元素將會被聚焦選中。

這個特性是我們實現(xiàn)這個案例的技巧之一,再結(jié)合 CSS checkbox 的偽類選擇器進行留言面板的顯示與隱藏,這樣我們就可以擺脫 JS 來實現(xiàn)這個案例。

基于以上思路 ,我們開始動手吧,首先我們先放置 checkbox,和其對應(yīng)的 label,最后添加表單面板和相關(guān)的表單元素。

我們將通過表單的 id 屬性與表單中l(wèi)abel元素的 for 值與其關(guān)聯(lián),最終我們完成了 HTML 結(jié)構(gòu)如下段代碼所示:

<input type="checkbox" id="mycheckbox">
<label for="mycheckbox" class="feedback-label">FEEDBACK</label>
<form class="form">
  <div>
    <label for="fullname">Full Name</label>
    <input type="text" id="fullname">
  </div>
  <div>
    <label for="email">Email</label>
    <input type="email" id="email">
  </div>
  <div>
    <label for="comment">Comment</label>
    <textarea id="comment"></textarea>
  </div>
  <div>
    <button type="submit">Send</button>
  </div>
</form>

完成后的效果圖如下:

CSS怎么實現(xiàn)側(cè)滑顯示留言面板的網(wǎng)頁組件功能

二、定義基礎(chǔ)的樣式

現(xiàn)在我們開始添加一些基礎(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 這個元素在案例中無需顯示,我們只是用其的偽類特性結(jié)合 label 控制留言面板的顯示與隱藏,因此我們需要將其移出可視區(qū)域,記住這里不能用隱藏屬性(display:none)。示例代碼如下:

[type="checkbox"] {
  position: absolute;
  left: -9999px;
}

2、接下來,我們需要添加這些CSS操作:

  • 使用 fix 屬性將 checkbox 對應(yīng)的 label 標(biāo)簽元素固定在右側(cè)的中央。

  • 垂直先顯示”FEEDBACK“文本。

  • 隱藏表單面板,我們這里將其往右移動其寬度的 100% 的距離,并垂直居中。

對應(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、這里需要強調(diào)的是 feedback-label 樣式,在其垂直變換時,我們先逆時針進行了旋轉(zhuǎn),其 x ,y 軸的方向也是隨著旋轉(zhuǎn)的,所以是translate(50%, -100%),將其垂直居中。

2、在 form 樣式里,我們使用 transform 方法,translate(100%, -50%) 將其移出頁面顯示區(qū)域

3、我們繼續(xù),大家不要著急,馬上就快完成了,我們需要將頁面弄的漂亮些,添加一些樣式,示例代碼如下:

/*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() 線性漸變,實現(xiàn)了一個漂亮的顏色漸變背景。還有一個 CSS3 語法需要關(guān)注下:hue-rotate,色調(diào)旋轉(zhuǎn)濾鏡,方便我們改變當(dāng)前的顏色。

四、使用CSS選擇器,實現(xiàn)表單面板的切換和隱藏

我們通過點擊 checkbox 對應(yīng)的 label 標(biāo)簽進行切換和顯示留言面板,這里我們用到了 :checked 偽類,以及 ~(后續(xù)同胞選擇器)和 +(緊鄰?fù)x擇器),輔助元素的選擇進行樣式變換,示例代碼如下:

[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;
}

這里有幾個樣式規(guī)則我們需要聊一下:

  • translate(50%, calc((var(--form-width) + 100%) * -1)); 這個樣式是不是有些復(fù)雜,其實也不難,就是多加了一個表單面板的寬度,由于旋轉(zhuǎn)后,y軸變成了水平軸,向左移動相當(dāng)Y軸往上移動,因此是負值,需要乘-1。

  • 第二個選擇器,我們之所以加個選中后的 outline 輪廓屬性,主要是為了方便那些習(xí)慣鍵盤操作的用戶,當(dāng)其使用 Tab 鍵選擇 feedback label元素時,然后再使用 Space 空格鍵就能很方便的打開留言面板進行切換。

  • 第三個選擇器,我們使用 transform: translate(0, -50%); 將 X 軸更改成0,恢復(fù)成最開始的位置,這樣我們的留言面板內(nèi)容就能顯示出來。

五、處理響應(yīng)式問題

最后,特別重點提示下我們做頁面要考慮頁面響應(yīng)式適配的問題,這里我們需要針對手機設(shè)備做一些樣式的調(diào)整,比如更改表單面板的寬度由原來的 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怎么實現(xiàn)側(cè)滑顯示留言面板的網(wǎng)頁組件功能”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

css
AI