如何写:悬停在内联CSS?

Amr*_*rhy 961 html css inline-styles

我有一个案例,我必须编写内联CSS代码,我想在锚点上应用悬停样式.

如何a:hover在HTML样式属性中使用内联CSS?

例如,您无法在HTML电子邮件中可靠地使用CSS类.

Jon*_*and 538

简短的回答:你做不到.

答案很长:你不应该.

给它一个类名或id,并使用样式表来应用样式.

:hover是一个伪选择器,对于CSS,它只在样式表中有意义.没有任何内联样式的等价物(因为它没有定义选择标准).

回应OP的评论:

有关动态添加CSS规则的好脚本,请参阅使用Javascript的Totally Pwn CSS.另请参阅更改样式表以了解有关该主题的一些理论.

此外,不要忘记,如果可以选择,您可以添加外部样式表的链接.例如,

<script type="text/javascript">
  var link = document.createElement("link");
  link.setAttribute("rel","stylesheet");
  link.setAttribute("href","http://wherever.com/yourstylesheet.css");
  var head = document.getElementsByTagName("head")[0];
  head.appendChild(link);
</script>
Run Code Online (Sandbox Code Playgroud)

注意:上面假设有一个头部.

  • 在其他情况下,内联CSS是*唯一*选项 - 例如HTML电子邮件(例如,Gmail忽略CSS,除非它是内联的).不幸的是,在大多数电子邮件客户端中剥离了Javascript,我还没有找到添加方法:悬停效果. (192认同)
  • @Kato虽然这是一个很好的链接,我真的希望它有效,遗憾的是它没有.为了确认,我使用语法`style ="{color:green;}来测试:hover {color:red;}"`和firefox设法为链接设置了绿色,但忽略了悬停.Chrome忽略了两者.继续测试将毫无意义. (24认同)
  • 我没有说它是一个有效的解决方案.我说没有"完全"正确的说没有内联等价物并且伪选择器在样式表之外没有意义.这怎么不合适? (9认同)
  • 你可以在javascript中添加css类 (4认同)
  • 为什么长的答案是*你不应该*......你...你不应该概括.我试图用html发送电子邮件,但猜猜是什么... gmail删除所有样式标签,所有外部样式引用和所有脚本.所以...有没有办法在发送到Gmail的电子邮件中设置链接的悬停颜色?希望它确实...希望是最后的死!=) (4认同)
  • "答案很长:你不应该"不要忘记我们中的一些人是黑客,内联样式标签可能是我们利用系统的唯一方式(; (4认同)
  • “你不应该”是一个很好的想法,但有时它是唯一的选择。这个问题特别要求解决这个问题,而不是意见。我经常遇到这种情况,其中选定的样式(例如字体颜色)需要由用户动态设置,而外部样式表不可行。 (4认同)
  • 没错,似乎没有浏览器开始支持这种语法._使用W3C工作草案作为参考资料或者引用它们不是"正在进行中的工作"是不合适的."_ :-)我很乐意看到它已经实施,因为我现在也在处理新闻信件. (3认同)
  • 我同意西蒙的观点,对于极端情况总是需要内联解决方法,并且阻止研究它们不一定是好事。 (3认同)
  • RE:**答案很长:你不应该**:如果我需要使用不同的悬停颜色生成许多不同的标签并且所有这些数据都是从DB中提取的,那么生成整个样式表只是为了渲染一个页面不是好的解决方案 如果生成后的内容必须在后期内容的某个地方存储在DB中,那么对于每个单独的其他块,它总是需要<style> </ style>块.我觉得看起来很糟糕. (3认同)
  • 虽然通常(99.999%的情况下)不使用内联样式是个好主意,但有些情况下这很重要.我之所以提到这个问题是因为用户将从颜色选择器中选择自己的颜色,颜色选择器将绘制颜色的表格单元格的背景,但仅限于悬停在父行上方.由于我们使用的是MVC框架,因此我们希望直接在HTML中生成它.为此使用类真的会更容易/更好吗? (2认同)
  • @MiguelAngelo很抱歉听到您的麻烦,但是HTML电子邮件众所周知是挑剔的。在Thunderbird中看起来不错的东西在Yahoo的网络电子邮件客户端中会很糟糕。Gmail可以,但Outlook可以禁止使用。电子邮件可能是“您不应该”的最大原因。最好的选择是对待所有类似HTML 3的东西,并且不要太喜欢特殊效果。 (2认同)
  • @Kato:当你发表评论时,该草案已经差不多十年了,并且已被[更新版本]取代(http://www.w3.org/TR/2010/CR-css-style- attr-20101012)该信息已明确删除.虽然工作组可能已经玩弄了在遥远的过去将选择器引入内联样式的想法,但这个想法显然已经失宠了.最重要的是,不仅将不稳定的草稿称为经典是不恰当的,更重要的是引用旧草案作为已经存在较新修订的经典.这似乎是人们常犯的错误. (2认同)
  • 他说他必须(和我一样)。“你不应该”的评论没有帮助。 (2认同)

Ale*_*x S 405

您可以通过在onMouseOveronMouseOut参数中使用JavaScript更改样式来获得相同的效果,但如果您需要更改多个元素,则效率非常低:

<a href="abc.html"
   onMouseOver="this.style.color='#0F0'"
   onMouseOut="this.style.color='#00F'" >Text</a>
Run Code Online (Sandbox Code Playgroud)

此外,我不记得是否this可以在这种情况下工作.您可能需要切换它document.getElementById('idForLink').

  • 不得不嘲笑这被视为"聪明":)很难想象有些人不在身边,这是你能达到这种效果的突出/唯一方式.或者更糟糕的是,要有一个"图像"并且必须换掉图像,只是为了给出"悬停"效果.让我觉得老了!但足以说,它确实回答了OP的问题:) (43认同)
  • 那太聪明了!适用于背景颜色悬停效果以及`<div onMouseOver ="this.style.backgroundColor ='#F8F8F8'"onMouseOut ="this.style.backgroundColor ='#FFFFFF'"> ... (11认同)
  • 旧的,新的,古老的或前方的.它回答了这个问题并帮助了我.谢谢,@ peter. (7认同)
  • 我不得不同意Manachi的观点.这就像是对90年代geocities的回忆javascript; P. (5认同)
  • 我需要为电子邮件执行此操作并且它有效.谢谢!这实际上解决了这个问题,不像接受的答案. (3认同)

fud*_*din 51

你可以在过去的某个时候做到这一点.但是现在(根据同一标准的最新修订,即候选推荐)你不能.

  • 更确切地说,你*可以*在过去的某个时刻做到这一点.但是现在(根据同一标准的最新修订版,即候选推荐书)[你不能](http://www.w3.org/TR/css-style-attr/#syntax). (9认同)
  • 如果有人遇到这个答案,回答者在这里发布了一个关于此功能的问题:http://stackoverflow.com/questions/9884182/why-dont-we-import-css-in-a-div (5认同)
  • 所有其他答案都表示这是不可能的,但是你的答案显示它是可能的,你的答案是不同的,我正在测试它. (3认同)
  • 对不起,我刚刚查看了文章的日期.它10岁.所以不能保证它应该有效.如果有,请告诉我. (2认同)
  • 我测试了这个:`<a href ="http://www.w3.org/"style ="{color:#900}:link {background:#ff0}:visited {background:#fff}:hover {outline :薄红色固体}:活跃{background:#00f}"> ...... </a>但它没有用 (2认同)

luk*_*srw 33

我为此做出了很晚的贡献,但是我很难过看到没有人建议这一点,如果你真的需要内联代码,这是可能的.我需要它用于一些悬停按钮,方法是这样的:

.hover-item {
	background-color: #FFF;
}

.hover-item:hover {
	background-color: inherit;
}
Run Code Online (Sandbox Code Playgroud)
<a style="background-color: red;">
	<div class="hover-item">
		Content
	</div>
</a
Run Code Online (Sandbox Code Playgroud)

在这种情况下,内联代码:"background-color:red;" 是悬停时的开关颜色,把你需要的颜色放到那里,然后这个解决方案工作.我意识到这可能不是兼容性方面的完美解决方案,但如果绝对需要,这可行.

  • 不,OP表示他们希望在HTML样式属性*中的内联CSS中使用*. (53认同)
  • 这只是做到这一点的“正常”方式,每个人都说这是正确的方式。然而,这不是内联方式,这是 OP 的原始请求。 (8认同)
  • 谢谢.这是一个很好的答案,我认为这个答案必须是解决方案. (3认同)
  • 出于某种原因询问内联样式的问题,您没有使用内联样式。 (3认同)
  • 我知道,jj_-但是这个方法允许你只在CSS中放几行并在很多地方反复使用它,很多人(包括我自己)都认为这是一个有用的选择. (2认同)
  • 这应该是实际的答案,并稍作修改:不要设置样式中的任何颜色,而只需设置将鼠标悬停时从父级继承的规则,然后内联设置这两种颜色即可。 (2认同)
  • @flash 如果您有动态背景颜色属性(例如,如果颜色来自数据库),或者目标是在不更新 CSS 的情况下允许 HTML 具有更大的灵活性,那么这非常有用。您允许 HTML 定义颜色,同时将过渡留给 CSS。 (2认同)

T.T*_*dua 29

使用Javascript:

a)添加内联样式

document.head.insertAdjacentHTML('beforeend', '<style>#mydiv:hover{color:red;}</style>');
Run Code Online (Sandbox Code Playgroud)

b)或更难的方法 - 添加"鼠标悬停"

document.getElementById("mydiv").onmouseover= function(e){this.className += ' my-special-class'; };
document.getElementById("mydiv").onmouseleave= function(e){this.className = this.className.replace('my-special-class',''); };
Run Code Online (Sandbox Code Playgroud)

注意:font-sizeJavascript中的多字样式(即)一起写入:

element.style.fontSize="12px"

  • 由于这个答案已被删减,现在似乎与原始问题完全无关...... (3认同)

Rex*_*x M 28

你不能完全按照你所描述的那样做,因为它a:hover是选择器的一部分,而不是CSS规则.样式表有两个组件:

selector {rules}
Run Code Online (Sandbox Code Playgroud)

内联样式只有规则; 选择器隐式为当前元素.

选择器是一种富有表现力的语言,它描述了一组匹配XML类文档中元素的标准.

但是,您可以近距离接触,因为style技术上可以在任何地方使用:

<html>
    <style>
    #uniqueid:hover {do:something;}
    </style>
    <a id="uniqueid">hello</a>
 </html>
Run Code Online (Sandbox Code Playgroud)

  • 在我的机器上工作。谢谢! (4认同)
  • 实际上你不能:"HTML允许在文档的HEAD部分中有任意数量的STYLE元素."(http://www.w3.org/TR/html4/present/styles.html#edef-STYLE) (3认同)

小智 11

这是最好的代码示例:

<a
 style="color:blue;text-decoration: underline;background: white;"
 href="http://aashwin.com/index.php/education/library/"
 onmouseover="this.style.color='#0F0'"
 onmouseout="this.style.color='#00F'">
   Library
</a>
Run Code Online (Sandbox Code Playgroud)

主持人建议:保持关注点分离.

HTML

<a
 style="color:blue;text-decoration: underline;background: white;"
 href="http://aashwin.com/index.php/education/library/"
 class="lib-link">
   Library
</a>
Run Code Online (Sandbox Code Playgroud)

JS

const libLink = document.getElementsByClassName("lib-link")[0];
// The array 0 assumes there is only one of these links,
// you would have to loop or use event delegation for multiples
// but we won't go into that here
libLink.onmouseover = function () {
  this.style.color='#0F0'
}
libLink.onmouseout = function () {
  this.style.color='#00F'
}
Run Code Online (Sandbox Code Playgroud)


ink*_*dmn 10

CSS的当前迭代不支持内联伪类声明(但据我所知,它可能会出现在未来的版本中).

现在,您最好的选择可能只是在要设置样式的链接上方定义样式块:

<style type="text/css">
    .myLinkClass:hover {text-decoration:underline;}
</style>
<a href="/foo" class="myLinkClass">Foo!</a>
Run Code Online (Sandbox Code Playgroud)

  • 幸运的是,这个想法将被取消.(参见http://lists.w3.org/Archives/Public/www-style/2009Jun/0341.html,在"废弃的工作草案"下.) (4认同)
  • 有一个.在这个答案中遗漏了 (3认同)

Joe*_*oel 8

<style>a:hover { }</style>
<a href="/">Go Home</a>
Run Code Online (Sandbox Code Playgroud)

Hover 是一个伪类,因此不能与 style 属性一起应用。它是选择器的一部分。

  • @Derek 以防万一/其他人阅读:“〜/”(波浪号正斜杠)是对asp.net Web应用程序中应用程序根目录的服务器端引用。(应用程序根当然可能是一个子文件夹)。它在这里的使用是不正确的,因此自从你问这个问题以来答案已经被编辑(我怀疑)。 (2认同)

rut*_*ord 8

正如所指出的,您不能为悬停设置任意内联样式,但您可以使用相应标记中的以下内容在CSS中更改悬停光标的样式:

style="cursor: pointer;"
Run Code Online (Sandbox Code Playgroud)

  • 这应该是最好的答案 (2认同)

小智 8

你可以这样做。但不是内联样式。您可以使用onmouseoveronmouseout事件:

<div style="background: #333; padding: 10px; cursor: pointer"
   onmouseover="this.style.backgroundColor='#555';" onmouseout="this.style.backgroundColor='#333';">
      Hover on me!
</div>
Run Code Online (Sandbox Code Playgroud)


S. *_*sen 8

虽然内联定义悬停规则似乎是不可能的,但您可以使用 CSS 变量和代理类或属性来定义内联样式的

[hover-color]:hover {
  color: var(--hover-color);
}
Run Code Online (Sandbox Code Playgroud)
<a
  style="--hover-color: green"
  hover-color>
    Library
</a>
Run Code Online (Sandbox Code Playgroud)

请注意,属性的使用是可选的(可以用 a 替换*),但为了避免对页面产生副作用,建议使用所提供的解决方案。


小智 7

它不完全是内联 CSS,但它是内联的。

<a href="abc.html" onMouseOver="this.style.color='#0F0'" 
onMouseOut="this.style.color='#00F'">Text</a>
Run Code Online (Sandbox Code Playgroud)


m_v*_*aly 5

没有办法做到这一点。您可以选择使用 JavaScript 或 CSS 块。

也许有一些 JavaScript 库可以将专有样式属性转换为样式块。但是代码将不符合标准。


Vin*_*hah 5

根据您的评论,您无论如何都要发送一个 JavaScript 文件。在 JavaScript 中进行翻转。jQuery$.hover()方法使它变得简单,就像所有其他 JavaScript 包装器一样。直接使用 JavaScript 也不太难。