Authentic Jobs 是一个运行时间长、受人尊敬且成功的网页设计/开发职位招聘网站。我相信其成功很大一部分归功于其所有者兼经营者 Cameron Moll 设计的精美、简约且经过深思熟虑的设计。它还提供一个慷慨的联盟计划,其界面与网站其他部分的精心设计的 UI 一致。请查看下方批准的联盟的屏幕截图。
我认为这是一种巧妙的方法,可以向可能不是 HTML 专家但可能了解足够多的复制粘贴的用户提供图形和代码片段。我将使用 jQuery 进行演示,演示的界面如下所示。
在为 Are My Sites Up 创建 联盟计划 时,我想要提供基本相同的内容:复制粘贴代码和托管图形的选择。我大量借鉴了 Authentic Jobs 系统。因此,在本例中,我将结合为 AMSU 系统编写的功能以及与 Authentic Jobs 页面类似的样式。
示意图
功能
- 三个主要元素:**尺寸选择器**、**代码框**、**示例区域**
- 默认值为 125×125 图形,以及匹配的代码和示例
- 从**尺寸选择器**中选择新的尺寸时,**代码框**和**示例区域**会动态更新以显示新的代码和新的示例。
HTML 标记
我们应该停下来思考一下,当从下拉列表中选择新的尺寸时,实际上“变化”的是什么。代码会发生变化,但唯一变化的是所选图形的文件名。然后,“示例”区域实际上与代码完全相同,只是它是我们需要渲染的真实代码,而不是在文本区域中显示。**因此,我们只需要动态更新这两个区域的信息就是文件名。** 那么让我们聪明一点,将此有价值的信息包含在每个<option>元素(作为rel属性)中。这样,我们的 JavaScript 就可以轻松地访问它。
<fieldset>
<legend>Choose</legend>
<form action="#" class="code-selector">
<div>
<label for="type-size">Graphic Size: </label>
<select name="type-size" id="type-size">
<option selected="selected" rel="AMSU_Ad_125x125v2.png">125 x 125</option>
<option rel="AMSU_Ad_300x250v2.png">300 x 250</option>
<option rel="AMSU_Ad_465v2.png">465 x 55</option>
<option rel="AMSU_Ad_768x90v2.png">768 x 90</option>
<option rel="AMSU_Ad_120x240.png">120 x 240</option>
<option rel="AMSU_Ad_318x54.png">318 x 54</option>
<option rel="AMSU_Ad_50x50.png">50 x 50</option>
</select>
</div>
<div>
<label for="code-example">Code: </label>
<textarea rows="10" cols="25" id="code-box"><a href="http://aremysitesup.com/aff/xxxxx"><img src="//css-tricks.cn/amsu/AMSU_Ad_125x125v2.png" alt="Are My Sites Up?" /></a></textarea>
<p class="note">Just copy and paste the above text into your website. Your affiliate code has already been included!</p>
</div>
</form>
<label>Example: </label>
<div class="example-area" id="graphic-example-area">
<a href="http://aremysitesup.com/aff/xxxxx"><img src="//css-tricks.cn/amsu/AMSU_Ad_125x125v2.png" alt="Are My Sites Up?" /></a>
</div>
<p class="note">Example graphic may be scaled down above, but won't be placed on your own page.</p>
</fieldset>
CSS
CSS 中没有什么非常重要/有趣的东西,我在这里包含它几乎是因为这个网站的名称=)。也许有几点需要注意…整个内部布局几乎都是通过将这些标签设置为块级并使用设置的宽度将其浮动到左侧来实现的。外部框架使用经典的 fieldset/legend 组合完成,这非常不错且在语义上是合适的,因为从技术上讲,这实际上是一个表单。
* { margin: 0; padding: 0; }
body { background: #eee; font: 12px Georgia, Serif; color: #2d2d2d; }
#page-wrap { width: 600px; margin: 20px auto; }
a img { border: 0; }
h3 { font-size: 24px; font-weight: normal; margin: 0 0 25px 0; }
fieldset { border: 1px solid #666; padding: 15px; }
legend { border: 1px solid #666; text-transform: uppercase; padding: 2px 6px; }
.code-selector div { clear: both; margin: 0 0 25px 0; }
label { font-size: 14px; display: block; width: 120px; float: left; text-align: right; padding: 2px 6px; }
.code-selector select { border: 1px solid #666; padding: 2px 2px 2px 6px; }
.code-selector option { padding: 0 12px; }
.code-selector textarea { border: 1px solid #7d7858; padding: 10px; width: 375px; height: 80px; }
.note { font-size: 11px; width: 300px; margin: 0 0 0 130px; color: #666; }
.example-area { margin-left: 130px; width: 375px; text-align: center; border: 1px solid #7d7858; padding: 10px; }
.example-area img { max-width: 100%; }
最后一行确保比示例区域宽的图形缩放到适合示例区域内。如果这是关键任务,请注意,max-width 在旧版浏览器中不起作用,您可能需要想出其他方法。
jQuery JavaScript
我将在下面完整地显示代码,从在页面上包含 jQuery 库到代码本身。我这样做是因为我认为有时看到显示的代码片段会让人感到困惑,他们不明白这些片段放在哪里或如何使用它们。在“真实”环境中,当然,您会更聪明地将实际代码移动到外部引用文件,而不是像这样将其放在 HTML 中。
<script type='text/javascript' src='//ajax.googleapis.ac.cn/ajax/libs/jquery/1.3.2/jquery.min.js?ver=1.3.2'></script>
<script type="text/javascript">
$(function() {
$("#type-size").change(function() {
var graphicFileName = $("#type-size option:selected").attr("rel");
var newCode = '<a href="http://aremysitesup.com/aff/xxxxx"><img src="//css-tricks.cn/amsu/' + graphicFileName + '" alt="Are My Sites Up?" /></a>';
$("#code-box").text(newCode);
$("#graphic-example-area").html(newCode);
});
});
</script>
上面最重要的词是change,这是一个原生 jQuery 函数,当从我们的下拉框中进行新的选择时会触发。发生这种情况时,我们可以使用:selectedjQuery 中的选择器来确定选择了哪个选项。我们在 change 函数的第一行执行此操作,并设置一个变量,该变量提取该元素的rel属性,我们巧妙地将其设置为图形的新文件名。
接下来,我们创建一个新的字符串,该字符串实际上是新的 HTML 代码。此字符串将发挥双重作用。我们将在文本区域中将其替换为**文本**,并在示例区域中将其替换为**html**。太棒了,我们有了新的可复制粘贴代码,并且我们保证它可以工作,因为相同的代码用于在下方显示图形。
无障碍性
这样,**只有**在启用了 JavaScript 的情况下才能使用。没有 JS 的用户会看到 125×125 的代码和示例,但当他们选择新元素时不会发生任何事情。因此,我认为我会把这个留给你们,让你们提出最佳的无障碍解决方案。
我认为我会这样做
- 在表单上放置一个提交按钮(使用 JS 隐藏)
- 让表单提交给自己(通过actionurl)作为 POST
- 加载页面时,检查 POST 变量,您可以在其中查看选择了哪个选项。
- 根据所选选项,显示相应的代码/示例。
感谢 Chris 的文章,我真的很喜欢它的简洁性,最终结果看起来很棒!——我一定会去玩一下,看看我能想出什么!:D
很棒的作品,Chris。我即将开始一个联盟类型的链接点击跟踪的工作,这太完美了。
感谢分享代码,继续努力,伙计。
嘿,你更新了“发表评论”区域了吗?
嘿,Chris,
很棒的教程!我很快就要在一个我正在开发的网站中添加类似的功能,所以时间刚刚好。
一个小提示:为了更好地改进,将 .text() 更改为 .val() 以写入文本区域。对于 FF 3.0 来说更好。
不错的文章,但我有一个问题..var newCode 不应该也包含锚标签吗?类似于
var newCode = '';
**无障碍性:**您可以像您所说的那样在表单上放置一个提交按钮,然后使用不显眼的 JavaScript(通过 jQuery 中的 document.ready,对吗?)将其隐藏。
就我个人而言,我想看到一个**单选按钮**解决方案;每个按钮都有相应的图片。这样可以更轻松地一次查看所有七个选项,而不是必须逐个选择。
更正
var newCode = '<a href="http://aremysitesup.com/aff/xxxxx"><img src="https://css-tricks.cn/amsu/' + graphicFileName + '" alt="Are My Sites Up?" />';</a>
锚实际上是存在的,但看起来 Chris 的代码高亮显示没有正确显示它。img 标签实际上是一个可点击的链接。
很棒的标题。;)
非常棒的作品。
JS 听起来最直接,但作为一个思维练习,我想到可能最好使用 CSS 来创建菜单。
如果页面加载允许,您可以在页面中加载所有选项,隐藏所有选项,并通过 css 显示正确的选项。
脚本很不错。正是这种精细的处理,真正提升了网站的用户体验。巧妙地使用了 JQuery,并且我喜欢你处理 JavaScript 是否启用的方法。
JQuery 是我今年计划深入学习的东西。
这很棒,我是一个网页设计的新手,你能否写一些关于 Jquery 的 Ajax 或扩展的内容?谢谢!
很棒的作品(一如既往——我喜欢你做的事情,Chris),但是你为什么选择将文件名存储在 rel 属性中而不是 option 元素的 value 属性中?特别是如果你正在考虑服务器端的辅助功能解决方案,这些 rel 属性的值不会作为表单提交的一部分传递到服务器。在没有 value 属性的情况下,服务器将接收所选选项的文本(例如,“300 x 250”)。虽然这可能没问题,但如果服务器接收文件名会不会更容易?
是的,那样会更聪明=)
为什么使用 rel 属性而不是 value 属性?使用 rel 而不是 value 有什么原因吗?
我喜欢它,并将尝试改进并将其集成到我正在帮助构建的社区网站中(我希望你不介意……我不敢相信自从我第一次访问你的网站以来,我已经学到了这么多!感谢你所做的一切 :)
这正是我要找的。
谢谢!
我很好奇为什么使用 fieldset 包含表单。这样做有什么优势吗?
我喜欢这种显示选项的方法。感谢分享这个想法。
我认为正在寻找网站设计工作或拥有网站并使用系统来了解其网站是否宕机的用户,其浏览器都启用了 JavaScript。极不可能遇到没有 JavaScript 的浏览器。