【问题标题】:Restore default Firefox <select> styling with inline or scoped CSS使用内联或作用域 CSS 恢复默认的 Firefox <select> 样式
【发布时间】:2015-07-22 13:01:31
【问题描述】:

我正在处理一个在选择元素上有很多(不是很好)样式的网站,我想恢复一个特定页面的 firefox 默认值。似乎主要是 background 和 border 样式破坏了 Firefox 的渲染。

问题是:

a) 我不知道默认浏览器样式应该是什么,才能使它看起来像没有设置样式时的样子。当我在浏览器样式下查看网络检查器时,它是一个很长的设置列表,看起来有点矫枉过正,只是为了覆盖两个样式表设置

b) 我不想应用所有 firefox 特定的浏览器样式并最终破坏其他浏览器的样式。

如何在不搞砸一切的情况下恢复默认设置?

可接受的答案可以是内联或作用域&lt;style&gt; 元素,但不能更改或省略主样式表。

更新: 这是一个快速演示,说明了问题和当前提出的答案的失败结果。这里还有一个 jfiddle:http://jsfiddle.net/pkd3byud/2/

select { margin: 10px 0; }
div select {
    border: 2px solid tomato;
}

.oriol {
    all: unset;
}

.boucher {
    background: initial;
    border: initial;
}
<select>
    <option>Option</option>
</select>
<div>
    <select>
        <option>Option</option>
    </select>
</div>
<div>
    <select class="oriol">
        <option>Option</option>
    </select>
</div>
<div>
    <select class="boucher">
        <option>Option</option>
    </select>
</div>

【问题讨论】:

  • 只需删除与该元素相关的所有 CSS,这将允许所有浏览器使用默认样式。
  • CSS 位于主样式表上,该样式表加载到每个页面上。我不想编辑母版,因为它会影响网站上的每个页面。我只想将这一页上的选择元素恢复为默认样式。
  • 然后向该页面添加一个 unqiue 类,并在主 CSS 中使用 not 选择器来排除该页面上元素的样式。
  • @APAD1 - 我在我的问题中特别指出“无法更改主样式表”。虽然感谢您的意见,但我正在寻找符合我在问题中概述的答案。
  • 我知道你的问题中所说的内容,但是,你给出的理由是你不想影响其他页面上选择框的样式,这是我的建议不这样做。现在,如果您说您正在寻找一个不涉及更改主样式表的解决方案,因为您无权访问它,那将是另一回事。我只是告诉你最简单的解决方案是什么。要么接受,要么离开。

标签: css firefox select


【解决方案1】:

阻止应用某些样式的唯一方法是:

  • 从样式表中删除这些样式
  • 用所需的样式覆盖它们

既然你不想要第一种方式,那一定是第二种。

CSS3 引入了initial 和unset 关键字,以及all 速记属性。因此,要取消设置某些样式,您可以使用

background: unset; /* Unset single property */
all: unset; /* Unset all properties (but unicode-bidi, direction) */

select[data-reset] {
  all: unset;
}
<select data-reset>
  <option>Option</option>
</select>
<select data-original>
  <option>Option</option>
</select>

但是,这会将属性设置为它们的initial value。规范中定义的初始值可能与浏览器使用的默认样式表不同。所以它在实践中是行不通的。

那么,有没有办法从该用户代理样式表中恢复值?不是直接的。但是,您可以只复制默认样式表中的样式。

all: unset; /* Reset */
/* ... */   /* Default styles */

select[data-reset] {
  /* Reset */
  all: unset;

  /* Default styles (on Firefox 41) */
  -moz-appearance: menulist;
  -moz-user-select: none;
  background-color: -moz-combobox;
  border-color: threedface;
  border-style: inset;
  border-width: 2px;
  box-sizing: border-box;
  color: -moz-comboboxtext;
  cursor: default;
  display: inline-block;
  font: ;
  line-height: normal !important;
  margin: 0;
  overflow: -moz-hidden-unscrollable;
  page-break-inside: avoid;
  text-align: start;
  text-indent: 0;
  text-shadow: none;
  white-space: nowrap !important;
  word-wrap: normal !important;
  writing-mode: horizontal-tb !important;
}
<select data-reset>
  <option>Option</option>
</select>
<select data-original>
  <option>Option</option>
</select>

但是还有一个问题:select 元素是被替换的元素,因此它们的表示超出了 CSS 的范围。然后,默认情况下,在 Firefox 上 selects 看起来与内部样式表所说的有点不同。

为了更接近原貌,可以使用

border: 1px solid #7f9db9;
font: initial;
font-family: Tahoma;
font-size: 13.3333px;

所以完整的代码是

all: unset;
-moz-appearance: menulist;
-moz-user-select: none;
background-color: -moz-combobox;
border: 1px solid #7f9db9;
box-sizing: border-box;
color: -moz-comboboxtext;
cursor: default;
display: inline-block;
font: initial;
font-family: Tahoma;
font-size: 13.3333px;
line-height: normal !important;
margin: 0;
overflow: -moz-hidden-unscrollable;
page-break-inside: avoid;
text-align: start;
text-indent: 0;
text-shadow: none;
white-space: nowrap !important;
word-wrap: normal !important;
writing-mode: horizontal-tb !important;

select[data-reset] {
  all: unset;
  -moz-appearance: menulist;
  -moz-user-select: none;
  background-color: -moz-combobox;
  border: 1px solid #7f9db9;
  box-sizing: border-box;
  color: -moz-comboboxtext;
  cursor: default;
  display: inline-block;
  font: initial;
  font-family: Tahoma;
  font-size: 13.3333px;
  line-height: normal !important;
  margin: 0;
  overflow: -moz-hidden-unscrollable;
  page-break-inside: avoid;
  text-align: start;
  text-indent: 0;
  text-shadow: none;
  white-space: nowrap !important;
  word-wrap: normal !important;
  writing-mode: horizontal-tb !important;
}
<select data-reset>
  <option>Option</option>
</select>
<select data-original>
  <option>Option</option>
</select>

【讨论】:

  • 感谢您的详细回复,里面有很多很好的信息。不幸的是,这里没有提供可以满足我要求的实际解决方案,但是您绝对值得为此付出努力。我开始怀疑我所要求的是否实际上是不可能的......
  • @billynoah 我忘了说不,一旦默认样式被覆盖,您就无法恢复它们(不删除覆盖样式,并且不假设默认样式是初始样式) )。所以你必须使用 Firefox 特定的样式。但是,您可以使用@-moz-document 来防止那些浏览器搞砸其他浏览器。
猜你喜欢
  • 2021-07-06
  • 1970-01-01
  • 2010-12-03
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
相关资源
最近更新 更多