CSS Focus无法影响其他元素

时间:2012-07-19 23:10:24

标签: html css focus pseudo-class

我环顾四周,当表单聚焦时,我无法找到制作标题的解决方案。我可能错过了一些明显的东西(可能是这个选择器无法完成)。

理想情况下,我想避免使用jQuery并坚持使用CSS(更高级的CSS很好),因为我没有计划支持IE - 我喜欢学习,但IE对我来说太痛苦了。

这是我目前的CSS:

#search-title {
    color: rgba(0, 0, 0, 0);
    font-size: 20px;
    font-weight: 300;
    margin-left: -30px;
    -webkit-transition: all 200ms;
    -moz-transition: all 200ms;
    -ms-transition: all 200ms;
    -o-transition: all 200ms;
    transition: all 200ms;
}

input[type="text"]:focus #search-title {
    color: #F70;
    margin-left: 35px;
}

提前致谢,

萨姆

4 个答案:

答案 0 :(得分:6)

好的,我有一个纯粹使用CSS的解决方案,但是你必须稍微摇晃你的html元素。

选择另一个不是参考元素后代的元素(我知道)的唯一方法是使用sibling selector(一般或相邻)。但是,该解决方案依赖于参考元素(输入)和目标(标题)作为dom层次结构中的兄弟。

以下是一个简单示例:http://jsfiddle.net/7AaDc/1/

对于记录,该示例使用通用兄弟选择器(〜),但在这种情况下,相邻(+)也可以正常工作。

以下是兄弟(和孩子)选择器的更好解释:http://css-tricks.com/child-and-sibling-selectors/

以下是与兄弟选择器相关的兼容性问题的概述:http://caniuse.com/#search=sibling(tl; dr,这些天得到了广泛的支持)

答案 1 :(得分:1)

您已经使用了后代选择器,这意味着“#search-title”必须在输入元素中出现才能与规则相匹配 - 这显然不会发生。

当您的输入是给定文档结构的任何特定状态时,实际上没有一个CSS选择器与#search-title匹配。

答案 2 :(得分:0)

也许在表单中尝试div可能会成功

或尝试One of these

答案 3 :(得分:0)

问题在我看来,就像你试图设计一个非嵌套的项目,即

input[type="text"]:focus #search-title

表示要设置ID为“search-title”的元素,当它是匹配“input[type="text"]:focus”的元素的子元素时,但是从您发布的代码片段开始,我猜它实际上不是孩子在DOM意义上。

你可以看一下兄弟风格选择器(例如“A + B”匹配项目B,但只有当它有一个前面的兄弟是A)时,特别是“〜”可能有帮助,但是如果这些元素完全不同于那么你可能不得不在重组你的DOM时做一些棘手的事情,或者回到javascript。