html5 鼠标滚轮跳一个页面,解决CSS3 Calc滚动条出现页面不跳动问题

calc是css3的一个新功能,用来指定元素的长度,calc()最大的好处就是用在流体布局上,可以通过calc()计算得到元素的宽度。接下来脚本之家小编给大家分享CSS3 Calc实现滚动条出现页面不跳动问题,需要的朋友参考下吧

什么是calc()?

calc()从字面我们可以把他理解为一个函数function。其实calc是英文单词calculate(计算)的缩写,是css3的一个新增的功能,用来指定元素的长度。比如说,你可以使用calc()给元素的border、margin、pading、font-size和width等属性设置动态值。为何说是动态值呢?因为我们使用的表达式来得到的值。不过calc()最大的好处就是用在流体布局上,可以通过calc()计算得到元素的宽度。

语法

calc() = calc(四则运算)

例如:

.elm {

width: calc(expression);

}

其中"expression"是一个表达式,用来计算长度的表达式

说明

用于动态计算长度值。需要注意的是,运算符前后都需要保留一个空格,例如:width: calc(100% - 10px);

任何长度值都可以使用calc()函数进行计算;

calc()函数支持 "+", "-", "*", "/" 运算;

calc()函数使用标准的数学运算优先级规则;

兼容性

e4b910af2f50e355ef89168aee60e3da.png

简单的例子:

calc()函数_CSS参考手册_web前端开发参考手册系列

.test {

width: calc(100% - 50px);

background: #eee;

}

我的宽度为100% - 50px

下面就来讲解下最常用的这个:实现滚动条出现页面不跳动的应用

当页面内容动态加载,开始没有滚动条,内容增多后出现滚动条,这时使用固定宽度居中对齐布局会向左偏移一个滚动条宽度。解决方法可以给内容全部添加overflow-y:scroll;或者是根据内容用css填充好再补充内容。本文介绍的是calc来计算滚动条宽度,当有滚动条时,内容外部也给它模拟一个滚动条宽度,因而就不会偏移了。·

很简单,只要一行代码就搞定了:

.wrap-outer {

margin-left: calc(100vw - 100%);

}

或者:

.wrap-outer {

padding-left: calc(100vw - 100%);

}

首先,.wrap-outer指的是居中定宽主体的父级,如果没有,创建一个(使用主体也是可以实现类似效果,不过本着宽度分离原则,不推荐);

然后,calc是css3中的计算,IE10+浏览器支持,IE9浏览器基本支持(不能用在background-position上);

最后,100vw相对于浏览器的window.innerWidth,是浏览器的内部宽度,注意,滚动条宽度也计算在内!而100%是可用宽度,是不含滚动条的宽度。

于是,calc(100vw - 100%)就是浏览器滚动条的宽度大小(如果有,如果没有滚动条则是0)!左右都有一个滚动条宽度(或都是0)被占用,主体内容就可以永远居中浏览器啦,从而没有任何跳动!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个HTML5CSS3、JavaScript实现的多页面网站的思路和实现代码: 1. 思路 - 确定网站整体结构和设计,包括导航栏、页面布局、颜色搭配等。 - 使用 HTML5CSS3 创建网站的页面,包括首页、产品列表页、产品详情页和联系我们页。 - 使用 JavaScript 实现网站的一些交互效果,如轮播图、下拉菜单、表单验证等。 - 使用响应式设计,适应不同的屏幕大小和设备类型。 2. 页面结构和代码 (1)首页 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>首页</title> <link rel="stylesheet" href="style.css" /> <script src="script.js"></script> </head> <body> <header> <nav> <ul> <li><a href="index.html">首页</a></li> <li><a href="products.html">产品</a></li> <li><a href="contact.html">联系我们</a></li> </ul> </nav> </header> <main> <div class="slider"> <img src="images/slide1.jpg" alt="Slide 1" /> <img src="images/slide2.jpg" alt="Slide 2" /> <img src="images/slide3.jpg" alt="Slide 3" /> </div> <section> <h2>欢迎光临我们的网站</h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse faucibus, nisl eu convallis faucibus, odio ligula feugiat elit, et pulvinar nisl nisl eget metus. Mauris a neque sit amet mauris consequat luctus. Fusce laoreet, velit quis ultrices dictum, nisl mauris convallis metus, sit amet venenatis nunc turpis sit amet turpis. </p> </section> </main> <footer> <p>© 2021 My Website. All rights reserved.</p> </footer> </body> </html> ``` (2)产品列表页 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>产品列表</title> <link rel="stylesheet" href="style.css" /> <script src="script.js"></script> </head> <body> <header> <nav> <ul> <li><a href="index.html">首页</a></li> <li><a href="products.html">产品</a></li> <li><a href="contact.html">联系我们</a></li> </ul> </nav> </header> <main> <h1>产品列表</h1> <ul class="product-list"> <li> <a href="product.html"> <img src="images/product1.jpg" alt="Product 1" /> <h2>产品 1</h2> <p>这是产品 1 的描述。</p> </a> </li> <li> <a href="product.html"> <img src="images/product2.jpg" alt="Product 2" /> <h2>产品 2</h2> <p>这是产品 2 的描述。</p> </a> </li> <li> <a href="product.html"> <img src="images/product3.jpg" alt="Product 3" /> <h2>产品 3</h2> <p>这是产品 3 的描述。</p> </a> </li> </ul> </main> <footer> <p>© 2021 My Website. All rights reserved.</p> </footer> </body> </html> ``` (3)产品详情页 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>产品详情</title> <link rel="stylesheet" href="style.css" /> <script src="script.js"></script> </head> <body> <header> <nav> <ul> <li><a href="index.html">首页</a></li> <li><a href="products.html">产品</a></li> <li><a href="contact.html">联系我们</a></li> </ul> </nav> </header> <main> <h1>产品 1</h1> <div class="product-detail"> <img src="images/product1.jpg" alt="Product 1" /> <div> <h2>产品 1</h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse faucibus, nisl eu convallis faucibus, odio ligula feugiat elit, et pulvinar nisl nisl eget metus. Mauris a neque sit amet mauris consequat luctus. Fusce laoreet, velit quis ultrices dictum, nisl mauris convallis metus, sit amet venenatis nunc turpis sit amet turpis. </p> <p>价格:$100</p> <form> <label for="quantity">数量:</label> <input type="number" id="quantity" name="quantity" min="1" max="10" /> <button type="submit">加入购物车</button> </form> </div> </div> </main> <footer> <p>© 2021 My Website. All rights reserved.</p> </footer> </body> </html> ``` (4)联系我们页 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>联系我们</title> <link rel="stylesheet" href="style.css" /> <script src="script.js"></script> </head> <body> <header> <nav> <ul> <li><a href="index.html">首页</a></li> <li><a href="products.html">产品</a></li> <li><a href="contact.html">联系我们</a></li> </ul> </nav> </header> <main> <h1>联系我们</h1> <form id="contact-form"> <label for="name">姓名:</label> <input type="text" id="name" name="name" required /> <label for="email">邮箱:</label> <input type="email" id="email" name="email" required /> <label for="message">留言:</label> <textarea id="message" name="message" required></textarea> <button type="submit">发送</button> </form> </main> <footer> <p>© 2021 My Website. All rights reserved.</p> </footer> </body> </html> ``` 3. CSS 代码 ```css * { box-sizing: border-box; } body { font-family: Arial, sans-serif; margin: 0; } header { background-color: #333; color: #fff; padding: 10px; } nav ul { list-style: none; margin: 0; padding: 0; display: flex; } nav li { margin-right: 20px; } nav a { color: #fff; text-decoration: none; } main { padding: 20px; } .slider { display: block; position: relative; height: 400px; overflow: hidden; } .slider img { position: absolute; top: 0; left: 0; height: 100%; width: 100%; opacity: 0; transition: opacity 1s ease-in-out; } .slider img:first-child { opacity: 1; } .section { margin-bottom: 20px; } .product-list { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; } .product-list li { margin-right: 20px; margin-bottom: 20px; flex-basis: calc(33.33% - 20px); } .product-list li:last-child { margin-right: 0; } .product-list a { display: block; text-decoration: none; } .product-list img { width: 100%; height: auto; } .product-detail { display: flex; margin-top: 20px; } .product-detail img { flex-basis: 50%; margin-right: 20px; } .product-detail div { flex-basis: 50%; } form label { display: block; margin-bottom: 5px; } form input[type="text"], form input[type="email"], form textarea { width: 100%; padding: 10px; margin-bottom: 10px; border: 1px solid #ccc; border-radius: 5px; } form button[type="submit"] { display: block; padding: 10px; background-color: #333; color: #fff; border: none; border-radius: 5px; cursor: pointer; } form button[type="submit"]:hover { background-color: #444; } footer { background-color: #333; color: #fff; padding: 10px; text-align: center; } ``` 4. JavaScript 代码 ```javascript // 轮播图 var slideIndex = 0; showSlides(); function showSlides() { var i; var slides = document.getElementsByClassName("slider")[0].getElementsByTagName("img"); for (i = 0; i < slides.length; i++) { slides[i].style.opacity = 0; } slideIndex++; if (slideIndex > slides.length) { slideIndex = 1; } slides[slideIndex - 1].style.opacity = 1; setTimeout(showSlides, 5000); } // 下拉菜单 function toggleMenu() { document.getElementById("menu").classList.toggle("show"); } window.onclick = function (event) { if (!event.target.matches(".menu-button")) { var dropdowns = document.getElementsByClassName("menu"); var i; for (i = 0; i < dropdowns.length; i++) { var openDropdown = dropdowns[i]; if (openDropdown.classList.contains("show")) { openDropdown.classList.remove("show"); } } } }; // 表单验证 var contactForm = document.getElementById("contact-form"); var nameInput = document.getElementById("name"); var emailInput = document.getElementById("email"); var messageInput = document.getElementById("message"); contactForm.addEventListener("submit", function (event) { if (!validateName() || !validateEmail() || !validateMessage()) { event.preventDefault(); } }); function validateName() { if (nameInput.value.trim() === "") { setErrorFor(nameInput, "姓名不能为空"); return false; } else { setSuccessFor(nameInput); return true; } } function validateEmail() { var email = emailInput.value.trim(); if (email === "") { setErrorFor(emailInput, "邮箱不能为空"); return false; } else if (!isEmail(email)) { setErrorFor(emailInput, "请输入有效的邮箱地址"); return false; } else { setSuccess

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值