Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 基于Div的按钮菜单在不同的浏览器中有不同的行为_Html_Css - Fatal编程技术网

Html 基于Div的按钮菜单在不同的浏览器中有不同的行为

Html 基于Div的按钮菜单在不同的浏览器中有不同的行为,html,css,Html,Css,我正在为一个网络开发课程的项目制作一个按钮菜单。我用s创建了一个可点击的菜单,当鼠标悬停时可以改变阴影。我想要它,这样用户就不能选择文本,因为它是一个按钮。我使用的是flex布局方案,至少我认为我做得对。我有以下代码,但在不同的浏览器中表现不同。我在下面添加了一个screen cap链接,从左到右依次是Chrome、Firefox和Safari 以下是菜单栏的代码: <style type="text/css"> .button { margin: 0;

我正在为一个网络开发课程的项目制作一个按钮菜单。我用s创建了一个可点击的菜单,当鼠标悬停时可以改变阴影。我想要它,这样用户就不能选择文本,因为它是一个按钮。我使用的是flex布局方案,至少我认为我做得对。我有以下代码,但在不同的浏览器中表现不同。我在下面添加了一个screen cap链接,从左到右依次是Chrome、Firefox和Safari

以下是菜单栏的代码:

<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标记,它是不被接受的。