区别div和span、relative和absolute、display和visibility

本文详细解释了div与span的区别,relative与absolute的区别,以及display与visibility的区别。通过实例代码演示如何在网页中使用这些元素与属性实现布局与定位。

div和span、relative和absolute、display和visibility是很容易混淆和弄错的HTML标签与CSS属性,今天52CSS.com简单的罗列出它们的区别与使用要点,供大家参考。

一、div和span的区别
  div是一个块级元素,可以包含段落,表格等内容,用于放置不同的内容。一般我们在网页通过div来布局定位网页中的每个区块。
  span是一个内联元素,没有实际意义,它的存在纯粹是为了应用样式,给一段内容加上标记可以通过在span上定义样式来设定其内容的样式。

二、relative和absolute的区别
  relative,CSS中的写法是:position:relative;  他的意思是绝对相对定位,他是参照父级的原始点为原始点,无父级则以BODY的原始点为原始点,配合TRBL进行定位,当父级内有padding等CSS属性时,当前级的原始点则参照父级内容区的原始点进行定位。
  absolute,CSS中的写法是:position:absolute; 他的意思是绝对定位,他是参照浏览器的左上角,配合TOP、RIGHT、BOTTOM、LEFT(下面简称TRBL)进行定位,在没有设定TRBL,默认依据父级的做标原始点为原始点。如果设定TRBL并且父级没有设定position属性,那么当前的absolute则以浏览器左上角为原始点进行定位,位置将由TRBL决定。

三、display和visibility的区别
  display:none和visibility:hidden都可以隐藏一个元素
  但visibility:hidden只是隐藏了元素的内容,但其使用的位置空间仍然被保留。
  而display:none则相当把元素从页面中去除,其占用位置也将被删除。 

 

 

visibility:可以控制div的显示和隐藏,但是隐藏后页面显示空白。

Js代码 复制代码

 

style="visibility: none;"
document.getElementById("typediv1").style.visibility="hidden"; //隐藏
document.getElementById("typediv1").style.visibility="visible"; //显示


display:可以使div隐藏后释放占用的页面空间。

Js代码 复制代码

 

style="display: none;"
document.getElementById("typediv1").style.display="none"; //隐藏
document.getElementById("typediv1").style.display=""; //显示

 

html:<aside> <ul class=“sidebar”> <div class=“out”></div> <li>手机 平板 电话卡<span>></span></li> <li>电视 盒子<span>></span></li> <li>路由器 智能硬件<span>></span></li> <li>移动电源 插线板<span>></span></li> <li>耳机 音箱<span>></span></li> <li>电池 存储卡<span>></span></li> <li>保护套 后盖<span>></span></li> <li>贴膜 其他配件<span>></span></li> <li>米兔 服装<span>></span></li> <li>箱包 其他周边<span>></span></li> <div class=“a”> < img src=“img/phone_img.png” width=“20px” height=“430px”> </div> <div class=“c”> <div> <a href=" “>选购</a > </div> <div> <a href=”#“>选购</a > </div> <div> <a href=”#“>选购</a > </div> <div> <a href=”#“>选购</a > </div> <div> <a href=”#“>选购</a > </div> <div> <a href=”#“>选购</a > </div> </div> <div class=“m”> < img src=“img/phone_img01.png” width=“25px” height=“430px” /> </div> <div class=“n”> <div> <a href=”#“>选购</a > </div> <div> <a href=”#“>选购</a > </div> <div> <a href=”#“>选购</a > </div> <div> <a href=”#“>选购</a > </div> <div> <a href=”#“>选购</a > </div> <div> <a href=”#">选购</a > </div> </div> </ul> </aside> css:aside{ width: 250px; height: 443px; background: #949494; position: relative; left: -460px; margin: 0 auto; } aside ul.sidebar li{ width: 190px; height: 44.3px; position: relative; padding:0 30px; line-height: 44.3px; color: #fff; } aside ul.sidebar li span{ float: right; color: #fff; margin: 10px; } aside ul.sidebar li:hover{ background: #ff6700; } aside ul.sidebar div.out{ width: 500px; height: 442px; border: 1px solid transparent; background: #00ffff; position: absolute; left: 250px; z-index: 1; display: none; } aside div.a img{ position: relative; top: -438px; left: 280px; } aside div.c div a{ position: relative; top: -889px; left: 400px; } aside div.m img{ position: relative; top: -1343px; left: 511px; } aside div.n div a{ position: relative; top: -1794px; left: 667px; }aside{ width: 250px; height: 443px; background: #949494; position: relative; left: -460px; margin: 0 auto; } aside ul.sidebar li{ width: 190px; height: 44.3px; position: relative; padding:0 30px; line-height: 44.3px; color: #fff; } aside ul.sidebar li span{ float: right; color: #fff; margin: 10px; } aside ul.sidebar li:hover{ background: #ff6700; } aside ul.sidebar div.out{ width: 500px; height: 442px; border: 1px solid transparent; background: #00ffff; position: absolute; left: 250px; z-index: 1; display: none; } aside div.a img{ position: relative; top: -438px; left: 280px; } aside div.c div a{ position: relative; top: -889px; left: 400px; } aside div.m img{ position: relative; top: -1343px; left: 511px; } aside div.n div a{ position: relative; top: -1794px; left: 667px; }让重叠文字,回到自己的位置
03-09
<!DOCTYPE html> <html lang="zh-Hant"> <head> <meta charset="UTF-8" /> <title>3D 抽獎卡片展示</title> <style> body { margin: 0; height: 100vh; display: flex; justify-content: center; align-items: center; /* background: linear-gradient(135deg, #1a2a6c, #b21f1f, #fdbb2d); */ background-color: black; font-family: Arial, sans-serif; overflow: hidden; } .stage { perspective: 1200px; width: 400px; height: 500px; position: relative; } .card-stack { width: 100%; height: 100%; position: absolute; transform-style: preserve-3d; } .card { position: absolute; padding: 20px; width: 320px; left: 40px; top: 50%; transform: translateY(-50%); border-radius: 20px; box-shadow: 0 10px 25px rgba(0, 0, 0, 0.35); display: flex; flex-direction: column; backface-visibility: hidden; border: 3px solid black; overflow: hidden; transition: transform 0.8s, opacity 0.8s, z-index 0.8s; } .card-header { font-size: 32px; font-weight: bold; padding: 10px; text-align: center; border-bottom: 2px solid rgba(255, 255, 255, 0.5); } .card-body { padding: 10px; font-size: 18px; display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 5px; } .name { background: rgba(255, 255, 255, 0.25); padding: 3px 8px; border: 2px solid #fff; border-radius: 6px; font-size: 16px; font-weight: 500; } </style> </head> <body> <div class="stage"> <div class="card-stack" id="stack"> <div class="card"> <div class="card-header">頭獎 - iPhone</div> <div class="card-body"> <span class="name">小明</span><span class="name">小華</span ><span class="name">小美</span> </div> </div> <div class="card"> <div class="card-header">二獎 - iPad</div> <div class="card-body"> <span class="name">小強</span><span class="name">阿玲</span ><span class="name">阿杰</span><span class="name">小魚</span ><span class="name">小熊</span> </div> </div> <div class="card"> <div class="card-header">三獎 - AirPods</div> <div class="card-body"> <span class="name">小玉</span><span class="name">小芳</span> </div> </div> <div class="card"> <div class="card-header">四獎 - Starbucks</div> <div class="card-body"> <span class="name">阿文</span><span class="name">阿國</span ><span class="name">小紅</span><span class="name">小綠</span ><span class="name">小藍</span><span class="name">小紫</span ><span class="name">小白</span> </div> </div> <div class="card"> <div class="card-header">五獎 - 全聯禮券</div> <div class="card-body"> <span class="name">小美</span><span class="name">阿東</span> </div> </div> <div class="card"> <div class="card-header">六獎 - 小確幸</div> <div class="card-body"> <span class="name">阿良良</span><span class="name">小黑</span ><span class="name">小黃</span><span class="name">阿秋黑</span ><span class="name">小光</span><span class="name">阿星</span ><span class="name">小藍</span><span class="name">小草</span> <span class="name">阿良</span><span class="name">小黑</span ><span class="name">小黃</span><span class="name">阿秋</span ><span class="name">小光</span><span class="name">阿星</span ><span class="name">小藍</span><span class="name">小草</span> <span class="name">阿良</span><span class="name">小黑</span ><span class="name">小黃</span><span class="name">阿秋</span ><span class="name">小光</span><span class="name">阿星</span ><span class="name">小藍</span><span class="name">小草</span> </div> </div> </div> </div> <script> // 可選配色板 const textColorPalette = [ 0x3498db, 0xe74c3c, 0x2ecc71, 0xf1c40f, 0x9b59b6, 0x1abc9c, ]; const colorPalette = [ "#3498db", "#e74c3c", "#2ecc71", "#f1c40f", "#9b59b6", "#1abc9c", ]; const stack = document.getElementById("stack"); let cards = Array.from(stack.children); // 計算文字顏色對比度 function getTextColor(bgColor) { // Remove '#' and parse hex string to RGB const hex = bgColor.replace("#", ""); const r = parseInt(hex.substring(0, 2), 16); const g = parseInt(hex.substring(2, 4), 16); const b = parseInt(hex.substring(4, 6), 16); // Calculate brightness using the same formula const brightness = 0.299 * r + 0.587 * g + 0.114 * b; // Return hex color string based on brightness return brightness > 186 ? "#000000" : "#ffffff"; } // 套用顏色 cards.forEach((card, i) => { card.style.background = colorPalette[i % colorPalette.length]; // colors[i].bg; card.style.color = getTextColor(colorPalette[i % colorPalette.length]); // colors[i].text; }); function rotateCards() { let first = cards.shift(); cards.push(first); cards.forEach((card, i) => { if (i === 0) { card.style.transform = "translateY(calc(-50% - 180px)) translateZ(-250px) rotateX(55deg) scale(0.8)"; card.style.opacity = 0.5; card.style.zIndex = 1; } else if (i === 1) { card.style.transform = "translateY(-50%) translateZ(0px) rotateX(0deg) scale(1.2)"; card.style.opacity = 1; card.style.zIndex = 10; } else if (i === 2) { card.style.transform = "translateY(calc(-50% + 180px)) translateZ(-250px) rotateX(-55deg) scale(0.8)"; card.style.opacity = 0.5; card.style.zIndex = 1; } else { card.style.transform = "translateY(-50%) translateZ(-600px) scale(0.6)"; card.style.opacity = 0; card.style.zIndex = 0; } }); } rotateCards(); setInterval(rotateCards, 3000); </script> </body> </html> 將上述單一html檔案修改成. vite + vie3 + ts 其他功能一率不變,資料動態傳入,使用 props
最新发布
09-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值