单击图像,然后弹出一个框以复制相关代码?
Wolfram 的参考网站有这个功能,我怎样才能在我的 Github 页面中实现它?或一些类似的东西?(一个JS代码?)
任何现在的人的页面,主题?
单击图像,然后弹出一个框以复制相关代码?
Wolfram 的参考网站有这个功能,我怎样才能在我的 Github 页面中实现它?或一些类似的东西?(一个JS代码?)
任何现在的人的页面,主题?
你可以在这里看到我描述的结果
这个效果我完全不用javascript就可以实现,保持代码非常简单。
我们必须将图像和代码包装在一个容器中,以便我们知道哪个去哪里。我建议一个<figure>
元素,因为正是出于这个原因。然后我们可以将我们的代码示例、解释和诸如此类的东西包装在一个不错的<figcaption>
元素中。
我想说一个代码示例应该在 a 中<textarea>
,因为它已经预先格式化,具有等宽字体,最重要的是可以完全选择用于复制strg
+a
所以我们有以下结构:
<figure>
<img />
<figcaption>
<textarea />
</figcaption>
</figure>
然后我们可以用 CSS 隐藏<figcaption>
, 所以默认情况下它是不可见的
figure figcaption {
display: none;
}
现在,我们如何让它可见?有一个简洁但未被充分利用的特性tabindex
,它允许我们通过键盘或鼠标使单个 html 元素“可聚焦”。通过将 tabindex 设置为 0,元素将插入到页面的正常选项卡流中。通过将 tabindex 设置为 -1,该项目是可点击的,但不能通过键盘聚焦。
所以我们在所有图形元素上设置了一个 -1 的 tabindex:
<figure tabindex="-1">
</figure>
现在,通过单击图像,您可以为整个图形元素提供焦点。我们可以使用它来显示带有 CSS 的框:
figure:focus figcaption {
display: block;
}
这已经几乎是我们想要的了,只有当我们单击 时<textarea>
,它才会获得焦点,然后再次消失,因为一次只能将一个项目集中在页面上。
因此,我们可以添加以下 CSS 片段,当我们将鼠标悬停时,它会继续向我们显示 figcaption:
figure figcaption:hover {
display: block;
}
默认情况下,焦点元素在某些浏览器中会显示轮廓。这在你的情况下有点难看,所以我们可以用 CSS 全局关闭它:
*:focus {
outline: none;
}
然后,您只需按照您希望的样式设置项目的样式、放置它们,就完成了。
我构建了一个小示例,您可以在其中看到正在运行的代码。只是检查一下。图片只是来自Lorem Pixel的示例图片,代码示例来自 ruby 主页。
这是我的示例的代码(只有一点样式,因此您也可以看到一个示例):
HTML
<figure class="codeImage" tabindex="-1">
<img src="http://lorempixel.com/400/200/" />
<figcaption>
Some sample code, maybe with some explanation:
<textarea>
# The Greeter class
class Greeter
def initialize(name)
@name = name.capitalize
end
def salute
puts "Hello #{@name}!"
end
end
# Create a new object
g = Greeter.new("world")
# Output "Hello World!"
g.salute
</textarea>
</figcaption>
</figure>
<figure class="codeImage" tabindex="-1">
<img src="http://lorempixel.com/400/200/" />
<figcaption>
Some other code smaple, maybe with some explaination:
<textarea>
# Output "I love Ruby"
say = "I love Ruby"
puts say
# Output "I *LOVE* RUBY"
say['love'] = "*love*"
puts say.upcase
# Output "I *love* Ruby"
# five times
5.times { puts say }
# Create a new object
g = Greeter.new("world")
# Output "Hello World!"
g.salute
</textarea>
</figcaption>
</figure>
CSS
/**
* Example for images with copyable code sample on click
*/
*:focus {
outline: none;
}
figure {
box-sizing: border-box;
width: 440px;
height: 250px;
padding: 20px;
display: inline-block;
margin: 20px;
border: 1px solid #333;
color: #333;
background-color: #ccc;
position: relative;
z-index: 1;
}
figure figcaption {
box-sizing: border-box;
border: 1px solid #333;
background-color: white;
position: absolute;
top: 70px;
left: 0;
display: none;
z-index: 2;
width: 440px;
padding: 10px;
}
figure figcaption textarea {
width: 400px;
min-height: 200px;
display: block;
margin-left: auto;
margin-right: auto;
}
figure:focus figcaption {
display: block;
}
figure figcaption:hover {
display: block;
}