【发布时间】:2018-03-18 14:01:16
【问题描述】:
这个问题的某些部分已经被覆盖here。
我正在尝试创建一个位于所有元素之上的导航栏,如下所示:
<div class="navbar">
...links...
</div>
<div class="hero-with-image">
<h1>Hello</h1>
</div>
然后如果我的英雄是黑暗的或背景上有图像,则反转导航链接。当您滚动幻灯片时,Squarespace 在他们的主页上有一个很好的示例。
我在后端使用 Ruby On Rails,我发现的解决方案之一是为我的导航栏创建一个辅助方法,在其中定义我的 controller.controller_name && controller.action_name,然后在我的 html 标记中添加一个额外的类 .has-dark-background .但是,如果我有多个深色背景的页面和多个浅色背景的页面,有没有办法使用 jQuery 来根据 hero 对象反转文本颜色?
这是我发现的一个很好的 jquery 解决方案:
var rgb = [255, 0, 0];
// randomly change to showcase updates
setInterval(setContrast, 1000);
function setContrast() {
// randomly update
rgb[0] = Math.round(Math.random() * 255);
rgb[1] = Math.round(Math.random() * 255);
rgb[2] = Math.round(Math.random() * 255);
// http://www.w3.org/TR/AERT#color-contrast
var o = Math.round(((parseInt(rgb[0]) * 299) +
(parseInt(rgb[1]) * 587) +
(parseInt(rgb[2]) * 114)) / 1000);
var fore = (o > 125) ? 'black' : 'white';
var back = 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')';
$('#bg').css('color', fore);
$('#bg').css('background-color', back);
}
上面的代码工作正常,但它只能根据当前对象背景反转文本颜色。
换句话说,我不想创建多个导航栏,我只想根据内容(英雄)背景颜色反转颜色。
还有其他基于 Jquery 或 Ruby on Rails 的解决方案吗?
对不起,我的英语不好。感谢您的帮助和时间。
【问题讨论】:
-
只用 CSS 就可以做到
-
@DanielH 你能解释一下吗?
-
我不认为你可以单独使用 css。您链接的问题是在将文本设置为黑色或白色之前使用 JS 确定颜色的亮度。 squarespace 使用的公式基本相同,但很难准确说出他们是如何确定背景颜色的开始的。
-
@worc 那么,我将创建一个 Rails 辅助方法并列出所有控制器和操作......无论如何,谢谢你的想法
标签: jquery html css ruby-on-rails squarespace