Html 基于Div的按钮菜单在不同的浏览器中有不同的行为
我正在为一个网络开发课程的项目制作一个按钮菜单。我用s创建了一个可点击的菜单,当鼠标悬停时可以改变阴影。我想要它,这样用户就不能选择文本,因为它是一个按钮。我使用的是flex布局方案,至少我认为我做得对。我有以下代码,但在不同的浏览器中表现不同。我在下面添加了一个screen cap链接,从左到右依次是Chrome、Firefox和Safari 以下是菜单栏的代码:Html 基于Div的按钮菜单在不同的浏览器中有不同的行为,html,css,Html,Css,我正在为一个网络开发课程的项目制作一个按钮菜单。我用s创建了一个可点击的菜单,当鼠标悬停时可以改变阴影。我想要它,这样用户就不能选择文本,因为它是一个按钮。我使用的是flex布局方案,至少我认为我做得对。我有以下代码,但在不同的浏览器中表现不同。我在下面添加了一个screen cap链接,从左到右依次是Chrome、Firefox和Safari 以下是菜单栏的代码: <style type="text/css"> .button { margin: 0;
<style type="text/css">
.button {
margin: 0;
padding: 5px;
background-color: #CCCCCC;
height: 100%;
font-family: helvetica, sans-serif;
display: flex;
align-items: center;
user-select: none;
}
.buttonDivider {
border-left: gray 1px solid;
height: 100%;
}
.button:hover{
background-color: gray;
cursor: pointer;
}
#buttonBar {
display: flex;
border: gray 1px solid;
border-radius: 5px;
overflow: hidden;
margin: 0 auto;
align-items: center;
user-select: none;
}
#titleBar {
display: flex;
width: 100%;
height : 40px;
padding: 5px;
background-color: #CCCCCC;
user-select: none;
}
#titleText {
display: flex;
align-items: center;
font-family: helvetica, sans-serif;
font-size: 25px;
font-weight: bold;
}
body{
margin: 0;
padding: 0;
}
div {
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div id="titleBar">
<span id="titleText">CodePlayer</span>
<div id="buttonBar">
<div id="buttonHTML" class="button">HTML</div>
<div class="buttonDivider"></div>
<div id="buttonCSS" class="button" style="user-select:none">CSS</div>
<div class="buttonDivider"></div>
<div id="buttonJS" class="button">JavaScript</div>
<div class="buttonDivider"></div>
<div id="buttonOutput" class="button">Output</div>
</div>
</div>
但正如你从视频中看到的,在3个浏览器中,行为是完全不同的,所有浏览器都更新到了本文发布的最新版本,Chrome56、Firefox51和Safari10.0.3。铬是最接近的。它阻止用户选择文本,悬停时填充整个区域。唯一奇怪的是,当你点击并拖动而它没有选择文本时,光标会变成高亮显示光标。Firefox是下一个最好的选择,因为它在悬停时对整个按钮进行着色,但不遵循用户选择:无。正如您所看到的,Safari既不像其他两个悬停时那样填充整个框,也允许完全选择
屏幕盖:
我在做一些非标准的事情吗?还是这些虫子?如果是这样的话,有没有办法让他们都表现正常?
谢谢 添加前缀-moz、-webkit和-ms,然后用户在单独的行中选择其他浏览器中的功能:
#titleBar {
display: flex;
width: 100%;
height : 40px;
padding: 5px;
background-color: #CCCCCC;
user-select: none;
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
}
当您试图查找错误所在时,似乎在按钮和HTML等多个位置都有user select none的代码。删除多余的代码将有助于项目变得更加复杂,只将其应用于标题栏ID,并使其向下继承
Mozilla在此处解释了用户选择:
下面是我对该更改所做的一个JSFIDLE:
至于Safari和填充元素的完整高度的问题,我无法通过我的Windows机器预览它,但此线程可能会有所帮助:在用户选择其他浏览器的功能之前,添加前缀-moz、-webkit和-ms:
#titleBar {
display: flex;
width: 100%;
height : 40px;
padding: 5px;
background-color: #CCCCCC;
user-select: none;
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
}
当您试图查找错误所在时,似乎在按钮和HTML等多个位置都有user select none的代码。删除多余的代码将有助于项目变得更加复杂,只将其应用于标题栏ID,并使其向下继承
Mozilla在此处解释了用户选择:
下面是我对该更改所做的一个JSFIDLE:
至于Safari和填充元素的完整高度的问题,我无法通过我的Windows机器预览它,但此线程可能会有所帮助:我想我看到了区别。 也许这能帮上忙
border-top-style: none;`
border-bottom-style: none;
我想我看到了区别。 也许这能帮上忙
border-top-style: none;`
border-bottom-style: none;
.按钮{
保证金:0;
填充物:5px;
背景色:中交;
身高:100%;
字体系列:helvetica,无衬线;
显示器:flex;
对齐项目:居中;
-webkit触摸标注:无;/*iOS Safari*/
-webkit用户选择:无;/*Safari*/
-khtml用户选择:无;/*Konquer或HTML*/
-moz用户选择:无;/*Firefox*/
-ms用户选择:无;/*Internet Explorer/Edge*/
用户选择:无;/*无前缀版本,当前
由Chrome和Opera支持*/
}
.钮扣分割器{
左边框:灰色1px实心;
身高:100%;
}
.按钮:悬停{
背景颜色:灰色;
光标:指针;
}
钮扣杆{
显示器:flex;
边框:灰色1px实心;
边界半径:5px;
溢出:隐藏;
保证金:0自动;
对齐项目:居中;
用户选择:无;
}
标题栏{
显示器:flex;
宽度:100%;
高度:40px;
填充物:5px;
背景色:中交;
用户选择:无;
}
标题文本{
显示器:flex;
对齐项目:居中;
字体系列:helvetica,无衬线;
字体大小:25px;
字体大小:粗体;
}
身体{
保证金:0;
填充:0;
}
div{
保证金:0;
填充:0;
}
代码播放器
HTML
CSS
JavaScript
输出
.按钮{
保证金:0;
填充物:5px;
背景色:中交;
身高:100%;
字体系列:helvetica,无衬线;
显示器:flex;
对齐项目:居中;
-webkit触摸标注:无;/*iOS Safari*/
-webkit用户选择:无;/*Safari*/
-khtml用户选择:无;/*Konquer或HTML*/
-moz用户选择:无;/*Firefox*/
-ms用户选择:无;/*Internet Explorer/Edge*/
用户选择:无;/*无前缀版本,当前
由Chrome和Opera支持*/
}
.钮扣分割器{
左边框:灰色1px实心;
身高:100%;
}
.按钮:悬停{
背景颜色:灰色;
光标:指针;
}
钮扣杆{
显示器:flex;
边框:灰色1px实心;
边界半径:5px;
溢出:隐藏;
保证金:0自动;
对齐项目:居中;
用户选择:无;
}
标题栏{
显示器:flex;
宽度:100%;
高度:40px;
填充物:5px;
背景色:中交;
用户选择:无;
}
标题文本{
显示器:flex;
对齐项目:居中;
字体系列:helvetica,无衬线;
字体大小:25px;
字体大小:粗体;
}
身体{
保证金:0;
填充:0;
}
div{
保证金:0;
填充:0;
}
代码播放器
HTML
CSS
JavaScript
输出
作为针对Safari特定问题的后续行动,由于Kylegill的链接,我找到了一个更好的解决方案 答案如下: 四,。嵌套的Flex容器建议去掉百分比高度。去掉表属性。摆脱垂直对齐。避免绝对定位。只要一直坚持使用flexbox即可。将display:flex应用于flex item.item,使其成为flex容器。这会自动设置align items:stretch,它告诉子.item inner扩展父级的完整高度 我去掉了身高:100%;在.button类中,保持对齐项:buttonBar容器的中心和下方更改为对齐项:拉伸;现在它在Safari和其他两种浏览器中工作得很好
.button {
margin: 0;
padding: 5px;
background-color: #CCCCCC;
font-family: helvetica, sans-serif;
display: flex;
align-items: center;
}
.buttonDivider {
border-left: gray 1px solid;
height: 100%;
}
.button:hover{
background-color: gray;
cursor: pointer;
}
#buttonBar {
top: 0;
left: 0;
display: flex;
border: gray 1px solid;
border-radius: 5px;
overflow: hidden;
margin: 0 auto;
align-items: stretch;
}
作为针对Safari特定问题的后续行动,由于Kylegill的链接,我找到了一个更好的解决方案 答案如下: 四,。嵌套的Flex容器建议去掉百分比高度。去掉表属性。摆脱垂直对齐。避免绝对定位。只要一直坚持使用flexbox即可。将display:flex应用于flex item.item,使其成为flex容器。这会自动设置align items:stretch,它告诉子.item inner扩展父级的完整高度 我去掉了身高:100%;在.button类中,保持对齐项:buttonBar容器的中心和下方更改为对齐项:拉伸;现在它在Safari和其他两种浏览器中工作得很好
.button {
margin: 0;
padding: 5px;
background-color: #CCCCCC;
font-family: helvetica, sans-serif;
display: flex;
align-items: center;
}
.buttonDivider {
border-left: gray 1px solid;
height: 100%;
}
.button:hover{
background-color: gray;
cursor: pointer;
}
#buttonBar {
top: 0;
left: 0;
display: flex;
border: gray 1px solid;
border-radius: 5px;
overflow: hidden;
margin: 0 auto;
align-items: stretch;
}
谢谢Kylegill,用户代理技巧成功了。我看到它仍然被认为是实验性的,所以没有引擎特定的标注,还没有人支持它。是的。我试着在每一个可能的地方,看看它是否有区别,但忘记了删除它们。他们现在走了。我看到它是从父元素继承的。谢谢多亏了你的链接,我解决了下面发布的safari问题。多亏了Kylegill,用户代理技巧成功了。我看到它仍然被认为是实验性的,所以没有引擎特定的标注,还没有人支持它。是的。我试着在每一个可能的地方,看看它是否有区别,但忘记了删除它们。他们现在走了。我看到它是从父元素继承的。谢谢感谢你的链接,我发现了我在下面发布的safari问题。谢谢你,这解决了这个问题。我看到它仍然被标记为实验性技术,因此如果没有特定于引擎的css标记,它是不被接受的。谢谢,这解决了这个问题。我看到它仍然被标记为实验性技术,因此如果没有特定于引擎的css标记,它是不被接受的。