我知道你们刚刚在心里想: 哇,我希望 Chris 今天发布一些超级书呆子的文章,里面有一些几乎无用的技巧,如果我在公共场合谈论这些技巧,就会证明我很快就要孤独终老了。别担心,我帮你想到了!查看一下 CSS 秘密信息生成器。
使用它(我希望)非常简单。您点击一些字母,然后这些字母在选中文本时秘密显示出来。
有一些有趣的事情值得一提,所以我们将在本文中进行讨论。
主要思想
这里赋能的概念是,您可以在现代浏览器中更改文本选择颜色(和背景颜色)。 WebKit 和 Chrome 使用::selection { }而 Mozilla 使用::-moz-selection { }.
在我们的示例中,我们将一大块文本的每个字母都包装在一个<span>中。然后我们有一个用于标记单个字母的小型 UI 系统。所有这些操作都会在这些 span 上切换特定的类名。未标记的 span 具有白色颜色和背景颜色,这意味着它们在选中时会有效消失。标记的 span 会更改颜色。因此,当整个块突出显示时,秘密标记的字母就会显示出来。
需要说明的是,它实际上没有理由以网格形式布局,只是点击字母更容易一些,而且看起来更像秘密信息。
jQuery
就像我们在这里做的所有花哨的事情一样,它使用了 jQuery。我不会进行代码转储。如果您想查看整个内容,它只有 85 行带完整注释的代码。
我过去做过一些其他的网格点击式操作,我一直想弄清楚(但从未成功)的是一种点击并拖动的方式来切换单元格。我终于想出了一个办法……
我将“mousedown”事件绑定到网格本身。当事件触发时,设置一些数据以指示鼠标当前已按下。相反,在“mouseup”上,设置数据以指示鼠标现在已松开。本身没用,但我们可以将“mouseenter”事件附加到所有单元格。如果鼠标在悬停事件发生时处于“按下”状态,则执行与点击相同的切换操作。目前,这仅适用于打开单元格(而不是批量擦除),但它可能也能够进行调整以实现此目的。
$("#grid")
// clicking on a cell toggles the selected state in the grid and the demo
.delegate("span", "click", function() {
// get the first class only (the position), otherwise would fail when it has that plus "selected"
attrTest = $(this).attr("class").split(" ")[0];
$(this).toggleClass("selected");
$("#secret-message ." + attrTest).toggleClass("selected");
})
// if the mouse is currently pressed, set some data so we can check for that
.bind("mousedown", function() {
$(this).data("mouseIsDown", true)
})
// when the mouse comes back up, change data to say so
.bind("mouseup", function() {
$(this).data("mouseIsDown", false)
})
// allows the "drawing by dragging"...
.delegate("span", "mouseenter", function() {
// which is only allowed while the mouse is pressed down
if ($("#grid").data("mouseIsDown")) {
attrTest = $(this).attr("class");
$(this).addClass("selected");
$("#secret-message ." + attrTest).toggleClass("selected");
}
});
WebKit 不允许文本选择使用“none”背景?
对于网格,由于点击并拖动功能,我想完全关闭该区域的突出显示(在您尝试“绘制”时,它只会让人感到恼火)。我以标准方式为两个渲染引擎设置了文本选择颜色。Firefox 尊重它,Opera 尊重它,但这两个主要的 WebKit 浏览器都不会尊重它。
#grid-area ::-moz-selection { background: none; } /* Works */
#grid-area ::selection { background: none; } /* Doesn't Work */
这可能是 WebKit 方面某种不良可用性预防措施,但我认为它更像是错误。如果我专门编写 CSS 来消除文本选择的背景颜色,那就是我想要的。
这真的很酷!也许可以简化它以用于验证码?揭示忘记的密码?
当我看到这个并感到兴奋时,我意识到我的极客程度有多深……
我也是 -.-
我也是!!你并不孤单。
我的天哪……是的……我百分百是极客。
http://geeksuite.net 也看看这个!
很棒的工作,伙计 :)
在我看来,它完全没用,尽管有人可能会发现它有用……
有趣。我真的想不出任何实际的用例,但无论如何都很有趣。
至于 WebKit 选择背景,**background:transparent;** 应该可以正常工作。对我来说确实可以。
我的想法也是如此。我从未想过将背景设置为“none”
已验证
background: transparent; 工作正常!
如果您检查mousedown时所处单元格的状态,则可以设置一个切换“direction”;这样您就可以更改是在拖动时设置单元格还是在拖动时取消设置单元格。几周前我刚做了与您的切换非常相似的事情(用于矮人要塞)。如果您需要,我可以提供一些代码。:)(我的代码进一步发展,可以提供带有橡皮筋的线和矩形绘制功能,这适合我的目的。)
太棒了!
我假设它可以用于(不使用选择部分)隐藏电子邮件地址免遭机器人/蜘蛛/爬虫的侵害。
background: transparent 在 Safari 和 Firefox 中适用于文本选择……不确定 Opera 或 Chrome 是否适用。
哇,太棒了,哥们。非常棒的 CSS 生成器 :)
不要让任何人告诉你你是个书呆子!我高兴得尖叫起来。见鬼,我刚刚和我的伴侣吵了一架,并用它写了一条道歉信息。
……我可能是个书呆子。也许吧。
我不太明白它在做什么。我点击右侧的字母,它们变成黑色,但没有其他事情发生……
它正在工作。哈哈哈哈哈。
这对于隐藏的 ASCII 艺术来说真的很酷。
我一开始不明白……
但我要承认,我对这个很感兴趣。
超级代码
这太可怕了 :)
Chris,我认为你刚刚给了全世界数千名极客一种向他们的女朋友求婚的方式!
哦,等等——他们没有女朋友……没关系。:)
我有一个女朋友……真的!
它看起来很酷……
绝对有点疯狂,但喜欢那些突破界限的人,即使有时只是为了突破而突破。
很棒的想法,伙计!
@Louis:我甚至结婚了 :-P
类似的概念也在
http://blog.ph-creative.com/demos/hidden-message.html
http://blog.ph-creative.com/post/CSS-Trick-Hidden-Messages.aspx
该死,我想我今晚不会有艳遇了……
看看这个在电影的仿造网站上的实际应用。
http://www.naturebirthgracemovie.com/
在第一段中将鼠标悬停在“mother”上,变红的字母拼出了标语“Love undying”。
天啊,这太神奇了 :)
这真的很酷,我已经想到了一些非常酷的应用场景了。
不过我在演示中发现了一个小错误。在“点击并拖动”的方块中,如果拖动鼠标,离开方块,释放鼠标,然后回到方块中,字母会一直高亮显示,即使你没有按住鼠标按钮。
这可能是 Webkit 处理 mousedown 事件的方式,或者是你禁用选择模式的方式导致的。