纯CSS调整select选择框高度,兼容IE/Firefox/Opera/Safair/Chrome

在IE下直接用height、border定义select没有效果,目前大部分情况都是用js进行模拟,其实css也是可以做得到的,原理很简单,隐藏select选择框的原生边框,再用其他元素模拟内边距及边框就OK了。

首先看一下默认的select在各个浏览器的表现情况。

如下图所示:演示demo

从上图中我们可以看各个浏览器对select的渲染不对高度不一致,连长度也不尽相同,唯一相同的就是边框宽度一致(废话)。下面我们对select进度高宽度行高及字体样式等进行定义,看看有什么情况发生,CSS代码:

.city{width:200px;height:20px;font:normal 12px/20px Tahoma,Geneva,sans-serif;overflow:hidden;}

显示效果:演示demo

在浏览器下select宽度表现相同,高度大部分表现相同,除了Safair,Safair对select渲染的高度为其内部高度,即内部高度(20px)+上下边框高度(4px)=24px,这个如果有需要,可单独对safair设css hack。

@media screen and (-webkit-min-device-pixel-ratio:0){.city{line-height:16px;}}

言归正传,既然统一了select在各个浏览器下的高宽度(200px*20px),那么接下来的事情就好办了,除去select上下左右各2px的边框,剩下的就是文字部分和下拉箭头部分了,在select外部加一个标签

,设置.select-wrap宽度为196px高度为16px的,多余部分溢出隐藏,此时如果再给select设置margin:-2px 0 0 -2px;,那么select中间部分正好与.city这个div重合,即正好隐藏掉了select的边框。

CSS如下:

.select-wrap{width:196px;height:16px;line-height:16px;overflow:hidden;}
.city{margin:-2px 0 0 -2px;width:200px;height:20px;font:normal 12px/20px Tahoma,Geneva,sans-serif;overflow:hidden;}
@media screen and (-webkit-min-device-pixel-ratio:0){.city{line-height:16px;}} /*for safair*/

显示效果:演示demo

如上图所示,在IE6\IE7下select还有1px的顶部边框,再给select加上float:left;或者display:block;问题就解决了;

隐藏select边框做好了,接下来就是在.select-wrap再加一个标签用来模拟select边框

.select-box{padding:10px;width:196px;border:1px solid #ccc;background:#fff;}
.select-wrap{width:196px;height:16px;line-height:16px;overflow:hidden;}
.city{margin:-2px 0 0 -2px;width:200px;height:20px;font:normal 12px/20px Tahoma,Geneva,sans-serif;overflow:hidden;display:block;}
@media screen and (-webkit-min-device-pixel-ratio:0){.city{line-height:16px;}} /*for safair*/

显示效果:演示demo

至结,全部完成,转载http://www.ghj.name/246.html

要实现在Safari浏览器中将网站添加至手机主屏时内容全屏展示,可以通过以下步骤进行: 1. 在 `public/index.html` 文件中添加以下 meta 标签,用于设置网站在添加至主屏时的显示模式: ```html <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> ``` `apple-mobile-web-app-capable` 用于设置网站是否可以以全屏模式在主屏上打开,`content="yes"` 表示可以。 `apple-mobile-web-app-status-bar-style` 表示状态栏样式,设置为 `black-translucent` 可以使内容不被状态栏遮挡。 2. 在 `main.js` 文件中添加以下代码,用于在路由切换时判断是否为主屏打开,并设置页面全屏展示: ```javascript import router from './router' router.beforeEach((to, from, next) => { const isFromHome = from.path === '/' const isToAddHome = to.path === '/' const isAddToHome = window.navigator.standalone === true if (isFromHome && isToAddHome && isAddToHome) { // 从主屏打开,并且是进入主页,则全屏展示 document.documentElement.style.height = '100%' document.documentElement.style.overflow = 'hidden' next(false) } else { next() } }) ``` 在判断条件中,`from.path === '/'` 表示从主页进入,`to.path === '/'` 表示进入主页,`window.navigator.standalone === true` 表示是从主屏打开。 如果以上三个条件都满足,则表示是从主屏打开并进入主页,此时设置 `html` 元素的高度为 `100%`,并隐藏溢出内容,实现全屏展示。 3. 最后,在 `App.vue` 文件中添加以下样式,用于设置内容高度为全屏高度: ```css body { margin: 0; padding: 0; height: 100%; } ``` 以上是实现在 Safari 浏览器中将网站添加至手机主屏时内容全屏展示的步骤,如果在其他浏览器中有类似需求,可以根据不同浏览器的特性进行相应的调整
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值