技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營

贊助商

分類目錄

贊助商

最新文章

搜索

強(qiáng)!純CSS實(shí)現(xiàn)彈窗功能,不用JS

作者:admin    時間:2021-7-19 11:8:10    瀏覽:

網(wǎng)頁彈窗功能很常見,但一般是使用Javascript或jQuery來實(shí)現(xiàn),而本文要介紹的是,使用純CSS也能實(shí)現(xiàn)彈窗功能,不用JS。

純CSS實(shí)現(xiàn)彈窗功能,不用JS
純CSS實(shí)現(xiàn)彈窗功能,不用JS

demodownload

CSS代碼

*,
*:after,
*:before {
  box-sizing: border-box;
}

body {
  font-family: "Inter", sans-serif;
  line-height: 1.5;
  min-height: 100vh;
  background-color: #f4f5f7;
  padding-top: 10vh;
  padding-bottom: 10vh;
}

strong {
  font-weight: 600;
}

article {
  width: 90%;
  max-width: 600px;
  margin-left: auto;
  margin-right: auto;
  font-size: 1.125rem;
  padding: 2rem;
  background-color: #fff;
  border-radius: 10px;
  box-shadow: 0 15px 20px -10px rgba(0, 0, 0, 0.1);
}
article > * + * {
  margin-top: 1em;
}
article:is(h1, h2, h3) + * {
  margin-top: 0.5em;
}
article h1 {
  font-weight: 900;
  font-size: 2rem;
  line-height: 1.125;
}
article code {
  background-color: #eee;
  font-weight: 600;
  font-family: monospace;
}
article ol {
  counter-reset: sickstuff;
}
article ol li {
  position: relative;
  padding-left: 32px;
  counter-increment: sickstuff;
}
article ol li + li {
  margin-top: 0.5em;
}
article ol li:before {
  content: counter(sickstuff);
  width: 24px;
  height: 24px;
  position: absolute;
  left: 0;
  top: calc((1.125rem * 1.5) - 24px);
  font-size: 0.75em;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background-color: #185adb;
  color: #fff;
  font-weight: 600;
}

details {
  position: fixed;
  right: 1rem;
  bottom: 1rem;
  margin-top: 2rem;
  color: #6b7280;
  display: flex;
  flex-direction: column;
}
details div {
  background-color: #1e1e27;
  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15);
  padding: 1.25rem;
  border-radius: 8px;
  position: absolute;
  max-height: calc(100vh - 100px);
  width: 400px;
  max-width: calc(100vw - 2rem);
  bottom: calc(100% + 1rem);
  right: 0;
  overflow: auto;
  transform-origin: 100% 100%;
  color: #95a3b9;
}
details div::-webkit-scrollbar {
  width: 15px;
  background-color: #1e1e27;
}
details div::-webkit-scrollbar-thumb {
  width: 5px;
  border-radius: 99em;
  background-color: #95a3b9;
  border: 5px solid #1e1e27;
}
details div > * + * {
  margin-top: 0.75em;
}
details div p > code {
  font-size: 1rem;
  font-family: monospace;
}
details div pre {
  white-space: pre-line;
  border: 1px solid #95a3b9;
  border-radius: 6px;
  font-family: monospace;
  padding: 0.75em;
  font-size: 0.875rem;
  color: #fff;
}
details[open] div {
  -webkit-animation: scale 0.25s ease;
          animation: scale 0.25s ease;
}

summary {
  display: inline-flex;
  margin-left: auto;
  margin-right: auto;
  justify-content: center;
  align-items: center;
  font-weight: 600;
  padding: 0.75em 3em 0.75em 1.25em;
  border-radius: 99em;
  color: #fff;
  background-color: #185adb;
  box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
  list-style: none;
  text-align: center;
  cursor: pointer;
  transition: 0.15s ease;
  position: relative;
}
summary::-webkit-details-marker {
  display: none;
}
summary:hover, summary:focus {
  background-color: #1348af;
}
summary svg {
  position: absolute;
  right: 1.25em;
  top: 50%;
  transform: translateY(-50%);
  width: 1.5em;
  height: 1.5em;
}

@-webkit-keyframes scale {
  0% {
    transform: scale(0);
  }
  100% {
    transform: scale(1);
  }
}

@keyframes scale {
  0% {
    transform: scale(0);
  }
  100% {
    transform: scale(1);
  }
}

HTML代碼

<article>
<h1>純CSS實(shí)現(xiàn)彈窗,無JavaScript</h1>
<p>是否想過在你的網(wǎng)頁上使用純CSS無需Javascript就能實(shí)現(xiàn)彈窗效果? 下面是實(shí)現(xiàn)方法:</p>
<ol>
<li>添加一個 <code><details></code> and <code><summary></code> 到你的HTML代碼里</li> 
<li>插入一個 <code><div></code> 到 <code><details></code> 元素里</li>
<li>添加一個 scaling 動畫到這個 <code><div></code>里</li>
<li>當(dāng) <code><details></code> 元素里的 <code>[open]</code> 屬性打開時,添加這個動畫到這個 <code><div></code> 里</li>
</ol>
<p>點(diǎn)擊 <strong>怎樣實(shí)現(xiàn)</strong> 按鈕獲得更多信息.</p>

</article>

<details>
<summary>怎樣實(shí)現(xiàn)<svg xmlns="http://www.w3.org/2000/svg" width="192" height="192" fill="currentColor" viewBox="0 0 256 256"><rect width="256" height="256" fill="none"></rect><circle cx="128" cy="128" r="96" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"></circle><circle cx="128" cy="180" r="12"></circle><path d="M127.9995,144.0045v-8a28,28,0,1,0-28-28" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"></path></svg></summary>
<div>
<p>當(dāng)你打開這個 <code><details></code> 元素時, scaling效果就通過使用keyframe動畫創(chuàng)建.</p>
<p><pre><code>@keyframes scale { 
 0% {
  transform: scale(0);
 }
 100% {
  transform: scale(1);
 }
}</code></pre> </p>
<p>這個動畫添加到 <code><div></code> 里, 但只有當(dāng)<code><details></code> 的 <code>[open]</code> 屬性開關(guān)被打開時才有效。</p>
<p><pre><code>details[open] div { 
 animation: scale .15s ease;
}</code></pre></p>
</div>
</details>

execcodegetcode

代碼解釋

CSS

1、CSS <details> 元素和 <summary> 元素的 display 屬性設(shè)為 flex 。此元素行為與塊級元素相似,并根據(jù)彈性盒(Flexbox)模型布局其內(nèi)容。單擊即可切換此元素的彈性疊加層。

2、疊加層縮放效果通過使用keyframe動畫創(chuàng)建。

@keyframes scale { 
 0% {
  transform: scale(0);
 }
 100% {
  transform: scale(1);
 }
}

3、縮放動畫添加到 <div> 里, 但只有當(dāng) <details>[open] 屬性開關(guān)被打開時才有效。

details[open] div { 
 animation: scale .15s ease;
}

HTML

1、添加一個 <details> and <summary> 到你的HTML代碼里。

2、插入一個 <div><details> 元素里

3、添加一個縮放動畫到這個 <div>

4、添加這個動畫到這個 <div> 里,但當(dāng) <details> 元素里的 [open] 屬性打開時才有效。

標(biāo)簽: css  css3  彈窗  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */