基线网格为排版带来了跨浏览器的解决方案,改善了可读性,并在文本内部创建了更好的和谐。主要使用的字体是Georgia和Futura,它们可以轻松更改以匹配项目的需求。
FluidBaselineGrid设计为移动优先,为我们的响应式设计实现提供了常见的断点。CSS代码准备从小屏幕开始定制,并根据设备的可用区域在内容显示上建议差异。只要它基于列,FluidBaselineGrid就被分为:移动设备一列,平板电脑两列,桌面及其他设备三列。
类.onecol,.twocol,.threecol,.fourcol,.fivecol,.sixcol,.sevencol,.eightcol,.ninecol,.tencol,.elevencol和.twelvecol可用于每个列。此外,它们将在任何组合中使用,以便在行内添加的列总和为十二列或更少。在最后一个元素中,请记得也添加一个类last;这将去除额外的边距。
与FluidBaselineGrid相比,其中一些少许不同之处是1140Grid已经实现了更多的列(为开发者提供更多的选项),但是FluidBaselineGrid的开发者们可以自由地在那里实现它。
由于下载区域的存在,这个框架是与众不同的,它展示了下面的截图所示的屏幕,因为它给了开发者们以最适合他们的方式开始他们的项目的自由(如果他们已经对网格有一些通用知识):
Foundation4拥有一堆预定义的HTML类,这些类对我们的开发很有帮助,因为所有的代码都已经创建好了,我们只需要通过类名来调用它。在下面的例子中,我们看到一个小类和元素将占据的列数:
...Foundation4Grid允许我们嵌套到任何深度。这个技术通常用于执行相当复杂的设计实现,或者更好地定位表单元素。以下代码是其用法的一个示例:83Nested9Nested4以下图显示结果:
我们可以使用offset在行中的列之间创建额外的间距。通过调整这个参数,我们可以对齐列的位置。记住,所有的offset都位于元素的左侧。同样,数字的和应该等于12。让我们在下面的例子中看一下这个,第一个div标签填充了两列,然后有两列的偏移,然后另一个div标签填充了八列:
28,offset2结果如下所示:
centeredcolumn类是用来将特定列(而不是内部内容)定位在行的中间的。Foundation4提供了两个类:large-centered和small-centered。就像我们之前看到的,小版本将显示为前面没有被大版本覆盖的样子。例如,如果我们想要显示一个占据六列并且居中(适用于小屏幕和大屏幕)的div标签,我们应该在之前使用以下代码:
6centered结果如下:
48,last以下是结果:
为了在创建设计时方便查看列,有一个名为Guideguide的Photoshop插件。
安装Guideguide插件并创建一个空白文件后,当我们在Photoshop中进行访问时,它将打开下面截图中显示的窗口;我建议使用所示的初始值填充,如果您对网格不太熟悉的话:
然后,点击GG按钮,它会在我们的文档中创建参考线,在布局创建中非常有用。
viewport的meta标签通过显示可视区域的一部分来工作。这种配置在我们设计响应式网站时非常重要,因为如果没有它,移动设备浏览器将向用户显示网站的缩小版本。对于它的使用,没有标准的语法,但是所有常见的移动浏览器都支持以下标签:
其他功能,比如initial-scale可以用来定义viewport的meta标签,可以阻止用户在网站中以放大模式打开,并且maximum-scale会限制用户放大内容。以下代码是viewport限制用户体验的一个例子,不允许使用缩放功能:
2a练习-为线框创建布局设计现在,我们已经有了线框并了解如何操作网格的列,我们需要根据列中的主要元素调整线框,如下截图所示:
在那之后,该是时候给它上色,并设想为所有设备提供最佳的用户体验。
根据第一章中练习1的线框,探索响应式网站设计,以下截图显示了布局设计的建议:
下图显示了主要元素如何适应列:
在看到了一些响应式网格系统的使用(从简单解决方案开始,然后进入更完整的解决方案),让我们使用Foundation4Grid来结构化我们的代码,快速创建响应,并且不需要编写一行CSS代码来完成。同时,请记得在
标签中配置视口。使用Foundation4Grid,执行以下推荐步骤:
让我们看看以下HTML是如何完成的:
以下截图显示了在大于768px宽度的设备上没有编写任何CSS代码的结果:
下图显示了在宽度小于768px的设备上相同站点的屏幕截图:
请放心;网站看起来仍然很糟糕,因为这只是项目的第一步。我们需要做一些视觉调整来完成我们的任务。
这是一种很好的方法,可以避免修改解决方案附带的CSS。在这种情况下,我们将创建一个新的CSS文件并将其包含在我们的网站上。在header部分,在ZurbFoundationCSS文件之后,包含您自己的CSS代码:
下面的代码用于从我们的网站开始定制。随意使用它,只要它只是匹配布局的建议。
#bannersdiv{text-align:center;height:100px;line-height:100px;background:#f65050;}#bannersdiv:first-child{background:#7ddda3;}#bannersdiv:last-child{background:#506ff6;}@mediaonlyscreenand(max-width:48em){.subcontent,asidespan{display:none;}aside.img-aside{display:block;margin:0auto;}asidediv{text-align:center;}}@mediaonlyscreenand(min-width:48em){aside.img-aside{float:left;}}摘要在本章中,我们学习了三种使用JavaScript解决方案呈现特定CSS代码的不同方法:Adapt.js、Respond.js和Breakpoints.js。现在,我们也明白了如何通过数学运算将像素转换为百分比,并发现结果。我们还学习了什么是响应式网格系统,以及如何使用每种类型的响应式网格系统。
最后,我们开始使用网格(基于来自第一章的线框图,探索响应式Web设计),编写我们的网站,这与下一章相连接,下一章我们将涵盖不同的方法来实现响应式菜单导航,例如切换菜单、侧栏菜单(如Facebook等)等。
在这一章中,我们将分析一些类型的导航菜单,在何种情况下以一种清晰直观的方式使用每种类型,并避免使用户感到沮丧。这就是为什么我们设计我们的导航菜单的方式,让用户能够轻松清晰地看到其中的主要和子项对我们很重要。
在这一章中,我们将:
在响应式网站上,特别是对于那些使用移动优先概念的网站,内容是用户访问我们网站的主要原因,所以我们必须提供一个合理的空间在屏幕上展示内容之前。
为了提供这个空间,我们需要更好地处理菜单的显示方式,以便根据设备提供另一种视图。
无论如何,目标都是相同的:使用户更容易找到他们正在寻找的内容,而不会对有用的区域产生重大影响。当菜单被组织好时,我们给了用户自由选择通过我们的网站导航到哪里的权利。
事实上,关于这两种界面之间的决斗(顶部和左侧导航菜单)没有一个答案。有时导航在一个上下文中运作良好;然而,在另一个上下文中可能不那么有效。要找出哪种导航最适合我们的站点,了解顶部和左侧导航菜单在哪些不同的上下文中效果最好是很重要的。让我们在五轮比赛中分析这场战斗:
让我们检查每个,看看它们的样子,并了解哪种方法更适合你的项目。
顶部导航模式是因为它需要一点额外的工作而成为互联网上最受欢迎的模式。要实现这个解决方案,我们只需要保持菜单在顶部,正如我们在下面的截图中所看到的那样:
在这种情况下,如前面的截图所示,在智能手机上显示菜单位于标志的上方。因此,让我们编写这个HTML脚本来理解这些变化:
不幸的是,
/*mobile-first*/#site-navul{list-style:none;text-align:center;padding:0;}#site-navli{display:inline-block;margin:05%;line-height:1.5;}#logo{text-align:center;clear:both;}对于大于768像素的屏幕,菜单宽度减小到70%,并向右浮动。此外,标志现在向左浮动,宽度为30%,如下面的代码所示:
这些百分比只是示例的一部分。
/*desktop*/@mediaonlyscreenand(min-width:768px){#site-navul{width:70%;float:right;}#logo{float:left;width:30%;clear:none;}}提示实施起来非常简单,但是当菜单项超过三行时要小心,因为它将耗费大量重要区域。
页脚锚点是一个聪明的解决方案,其主要目标是在不影响移动用户在小区域中看到我们的网站的情况下,为内容保留更多有用的空间。为此,需要将主菜单重新分配到页脚,并只在页眉中保留一个锚点链接,用户点击它时将聚焦于菜单。
以下截图表示了这种导航模式仅应用于智能手机,空间较小:
让我们从第一个导航模式使用相同的HTML代码开始。但是现在我们将菜单移动到DOM的底部,就在标签之前插入下面的链接,因为当用户点击它时,网站将聚焦于导航菜单:
在智能手机的CSS代码中,我们需要:
CSS代码如下所示:
/*mobile-first*/#site-navul{list-style:none;text-align:center;padding:0;}#site-navlia{display:block;border-top:1pxsolid#CCC;padding:3%;}#site-navli:last-childa{border-bottom:1pxsolid#CCC;}#link-to-menu{position:absolute;top:10px;right:10px;}对于平板电脑和桌面(屏幕宽度大于768px的设备),最好的方法是隐藏此页眉按钮。现在,我们需要在页眉上展示菜单,而不对HTML做任何更改(我们只是将其移到页脚区域)。
让我们通过设置菜单位置在顶部并隐藏页眉按钮来实现以下代码:
/*tabletanddesktop*/@mediaonlyscreenand(min-width:768px){#site-nav{position:absolute;top:0;left:30%;width:70%;}#link-to-menu{display:none;}#site-navli{display:inline-block;margin:05%;padding:0;width:18%;border:none;line-height:1.5;}#site-navlia{display:inline;border:none;padding:0;}#site-navlia,#site-navli:last-childa{border:none;}}切换菜单切换导航模式与以前的模式比几乎具有相同的行为。真正的区别在于当用户点击页眉上的链接时,而不是将用户引导到锚定菜单,菜单会在页眉之后滑下来,从而为用户提供令人印象深刻的效果和快速访问主链接。它的实现相对容易,我们很快就会看到。
为了提高动画性能,尝试使用max-height属性
下载此解决方案的文件后,让我们将以下代码插入到我们的HTML的
标签中:现在,让我们从页脚锚点模式中插入相同的菜单样式:
在下面的截图中,我们将看到响应式导航窗口正在使用,它在智能手机上更改菜单样式,并以不显眼的方式显示菜单:
切换按钮的定制和菜单中的橙色默认情况下不显示。这只是插件创建者在其演示中提出的建议之一。
一种显著减少菜单占用空间的方法是使用此模式,其中所有菜单项都包装在
然而,该方法存在影响可用性、可访问性和SEO的问题。乍一看,主导航菜单的选择菜单看起来不正确,因为它与设计不协调。也许用户会觉得这很尴尬,或者可能会与select表单元素混淆。
让我们开始使用第一个导航模式的相同HTML代码。下载TinyNav插件后,我们将在
标签中包含以下代码:并在闭合标签之前包含以下代码:
在我们的CSS文件中添加以下代码,该代码隐藏了此导航模式,并在平板电脑和台式机上设置了常见的菜单样式。此外,它还专门为宽度小于767px的设备显示了解决方案:
/*stylesfordesktop*/.tinynav{display:none;}#site-nav{float:right;width:80%;padding:0;}#site-navli{display:inline-block;margin:02%;padding:0;width:15%;text-align:center;line-height:1.5;}/*stylesformobile*/@mediascreenand(max-width:767px){.tinynav{display:block;}#site-nav{display:none;}}TinyNav还提供了一些选项,例如在
$('#site-navul').tinyNav({active:'selected',label:'Menu',header:'Navigation'});此导航模式可以在所有设备上实现,无需额外工作。在以下截图中显示的示例中,请注意插件仅影响小型设备:
仅页脚导航类似于页脚锚点方法,除了header部分中的link锚点之外。
在使用此导航模式时要小心,因为用户可能找不到页脚上的菜单,每当他们想要访问其他菜单选项时,他们可能必须滚动到末尾。这种导航模式可能适用于内容较少且需要较少用户努力滚动的网站。
简单地将菜单移到DOM的底部。
请记住,如果我们像这样更改代码,它将直接影响所有设备上菜单的视觉定位。在应用此技术之前,请确保您的网站不会太长,因为大多数用户希望它位于网站顶部。
多重切换模式几乎与切换菜单相同,因为它在头部之后也会滑动下来,但它是为复杂菜单而设计的,其中至少有一个嵌套子菜单。当用户点击头部按钮时,菜单就会弹出到内容上。如果用户点击父类别,则子菜单将滑动下来显示其子项。
这是本示例中将使用的HTML代码。我们将使用元素作为菜单的状态控制器(打开或关闭),并且用户不会看到它。稍后我将更详细地解释这个技术。
让我解释一下可能会使您困惑的两段代码。在CSS文件的开头有带有值“\0025Bc”(向下箭头)和“\0025C0”(之前的箭头)的属性,它可能会呈现为箭头字符而不是此代码。此外,#toggle复选框应保留在页面中(我们不能只将其设置为display:none),但不在可见区域内:
.after:after{content:"\0025Bc";font-size:0.5em;}.before:before{content:"\0025C0";font-size:0.5em;}.link-to-menu{display:block;position:absolute;right:0;top:0;z-index:100;}#toggle{left:-9999px;position:absolute;top:-9999px;}#site-navul{left:0;list-style:none;position:absolute;right:0;top:4em;z-index:10;}#site-nava{display:block;height:0;line-height:0;overflow:hidden;text-decoration:none;transition:all0.5sease0s;}在CSS代码中稍微中断一下,因为我想更详细地解释一下子菜单的#toggle复选框的功能。
当单击link-to-menu标签时,标签将其高度设置为3em。此外,我们需要准备样式以增加链接的高度,因为jQuery将在具有submenu的元素中输入open类:
#toggle:checked~nav#site-nava{line-height:3em;height:3em;border-bottom:1pxsolid#999;position:relative;z-index:1;}#toggle:checked~nav#site-nav.submenuli,#toggle:checked~nav#site-nav.submenua{height:0;line-height:0;transition:0.5s;}#toggle:checked~nav#site-nav.submenua{padding-left:7%;background:#555;}#toggle:checked~nav#site-nav.submenu.openli,#toggle:checked~nav#site-nav.submenu.opena{height:3em;line-height:3em;}还要记得在
标签中包含jquery库:几乎在DOM的末尾(结束标记之前),我们将执行以下脚本来管理仅对子菜单插入open类的操作,以控制将显示哪个子菜单:
期望的视觉效果如下截图所示:
这种模式类似于多重切换模式,但不仅仅是切换子菜单,而且在单击顶级链接时,子菜单会从左向右滑动。有一个back链接以便用户导航。我真的很欣赏这种交互效果,它肯定会给用户留下深刻的印象。
让我们使用与多重切换模式相同的HTML代码进行此示例(包括从
标签调用jQuery脚本)。关于CSS代码,我们将使用多重切换模式的相同代码,但在文件末尾插入以下代码。切换模式和滑动模式与多重切换模式的主要区别是子菜单的新箭头字符(右箭头);子菜单显示在但不在可见区域上:
.after:after{content:"\0025B6";font-size:0.5em;}.submenu{position:absolute;left:-100%;top:0;height:100%;overflow:hidden;width:100%;transition:all0.75sease0s;z-index:10;}.submenu.open{left:0;}使用相同的建议,以下屏幕截图显示了在点击Projects链接之前和之后的确切时刻(在这种情况下,仅在智能手机上实现):
在DOM几乎结束时(就在结束标签之前),我们将执行几乎与之前看到的相同的脚本,但现在添加了一个功能。
以下是我们在之前的示例中使用的相同代码,用于菜单显示控制
侧栏菜单如果你使用过iPhone应用或现在遵循侧栏菜单约定的任何其他应用,你就会在原生应用上看到一个侧栏面板。如果你点击菜单按钮,面板将滑动并占用部分有用的设备区域。
所以,下面的屏幕截图是仅针对智能手机实现的侧栏菜单样式建议。像往常一样,我们保留原始的顶部菜单供平板电脑和台式机使用:
让我们从
标签中开始包含以下CSS:对于这种模式,不需要特定的CSS代码,但仍然需要创建我们自己的CSS样式来美观地显示菜单。
在了解了八种响应式菜单及如何实现它们后,让我们选择切换菜单来在我们的网站上实现。
如果您正在建立自己的网站,请随意分析考虑每种菜单导航模式的所有功能,然后选择最佳选项。
在本章中,我们学习了如何根据不同情况使顶部和左侧导航更有效。我们还学习了使用CSS3或JavaScript插件来实现八种不同的导航模式。
在下一章中,我们将介绍处理文本的响应式字体大小的方法。此外,我们将使用CSS3和三个很棒的JavaScript插件来自定义字体系列,为标题添加更多创意。
谈到响应式标题时,我们谈论的是灵活性。因此,在字体大小上使用固定的度量也应该是动态的。过去几年中它是如何实现的与现在的差别在于,早期我们只考虑了两种显示内容的方式:打印和屏幕。尽管时代变化,但对文本适应性的担忧仍然存在。
我们认为排版是我们设计的基础和我们CSS的支柱,因为我们网站的主要目标是通过回答用户的问题来向他们提供信息。避免创建十种不同的副标题样式是一个好的做法,为了做到这一点,我们必须根据我们网站的主题计划几个不同的标题。
使用相对单位的主要优势之一是,当用户修改基本元素(来自浏览器)的字体大小时,所有字体大小都会按比例增加/减小,从而产生级联效应。
这些天,几乎每个浏览器都将基本元素的默认设置设为16px。然而,如果用户想增大浏览器字体大小以便更容易阅读,这个值可以在用户端进行修改。
在谈论最常用的测量单位之前,我们想要强调两个单位,因为它们的流行度令人印象深刻,它们是:vw(视口宽度)和vh(视口高度)。
因此,最近最常用的相对单位在下一节中给出。
百分比是相对于容器元素的,它更多用于创建结构,正如我们在第二章中所学到的设计响应式布局/网格。然而,使用它设置我们的字体大小也没有问题。示例代码如下:
body{font-size:100%;/*base16px/*}p{font-size:87.5%;/*14px÷16*/}一些开发人员更喜欢将正文的字体大小定义为固定的62.5%(10px)以便计算。在这种情况下,我们可以将子元素定义为150%代表15px,190%代表19px,依此类推。虽然这种方法使得识别相应值更容易,但它可能只有在字体大小的第一级级联中有所帮助。
em单位是相对于其父元素的计算字体大小。在下面的示例中,我们想要将子元素的字体大小转换为20px:
因此,请记住,在最终值前(当我们进行转换时)始终包含px值(正如我们在第二章中推荐的那样,设计响应式布局/网格)。我们强调这个提示,因为在处理字体大小时,有很多层叠样式。例如,考虑以下图:
让我们看看如何将前面图中的这些尺寸转换为rem:
尝试在所有主要结构开发之前编写文本排版的文档。我们通过生成包含所有主要HTML元素的模板文档,其中包含基于网站设计的正确样式表,来实现这一点。
所谓的盒子模型,如下面的屏幕截图所示,需要计算以找出包括边框和填充在内的元素的总宽度,现在已经过时了:
下面的示例显示了将有用区域分为两个带有每个容器边距百分比为5%和2px边框的div的概念,这将使宽度计算更加困难:
让我们看看它如何简化整个计算,以便在这个示例上工作:
div.splitted{padding:00.5em;width:50%;border:2pxsolidblack;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}目前,一些浏览器需要上述前缀,但通过这种方式使用它们,我们已经覆盖了它们。此外,同样的填充可能也适用于垂直间距;例如,请考虑以下代码:
div.splitted{padding-top:1em;}为了创建美丽的响应式标题,定制字体系列字体允许您为用户创建更吸引人的网站,并始终保持主题风格,而无需制作大量标题图像,每个标题都有一个。
选择字体非常重要,因为它可能会影响用户对内容的吸收,或者可能无法展示我们工作的一页或两页以上。
@font-face是一个CSS规则,允许设计师使用未安装在用户机器上的非标准网络字体,并帮助快速更改所有标题。@font-face方法的重大好处是它不会用图像替换常规字体,并且还为响应式网页设计提供所需的灵活性。
@font-face只支持使用EOT字体的IE8或更早版本。此外,SafariiOS4.1及更低版本仅支持SVG字体。我们将在下一个主题中看到如何轻松提供此支持。
属性@font-face的基本用法是定义这个规则样式,font-family是以后调用字体的标签,src是字体的位置,以及font-weight(对于普通字体不需要,但对于其他一切,如粗体和细体,都是必需的)。例如,请考虑以下代码:
@font-face{font-family:"KiteOne";src:url(/fonts/KiteOne-Regular.ttf);}然后,只需像其他样式规则中的任何其他字体一样使用它:
p{font-family:"KiteOne",Helvetica,Arial,sans-serif;}然而,还有其他更好的方法。我们将清楚地看到如何使用FontSquirrel、FitText、Slabtext、Lettering和ResponsiveMeasure。
FontSquirrel有一个很棒的工具,允许我们获取桌面字体文件并生成其网络对应物。此外,为我们特定字体生成正确代码和文件的服务是完全免费*。
*只有服务是免费的。请记住,每个字体系列都有自己的许可证。强烈建议用户在使用之前阅读字体许可证。
首先访问FontSquirrel网站,然后点击添加字体以选择您的个人字体或已经拥有正确许可的字体。然后,选择基本选项(暂时),并下载您的工具包。
在解压下载的文件后,我们应该在CSS文件的开头添加以下代码。以下代码将允许CSS文件访问字体文件,并根据情况提供正确的字体:
@font-face{font-family:'kite_oneregular';src:url('kiteone-regular-webfont.eot');src:url('kiteone-regular-webfont.eot#iefix')format('embedded-opentype'),url('kiteone-regular-webfont.woff')format('woff'),url('kiteone-regular-webfont.ttf')format('truetype'),url('kiteone-regular-webfont.svg#kite_oneregular)format('svg');font-weight:normal;font-style:normal;}每当我们想要使用新字体时,只需像使用@font-face规则一样调用它,如下面的代码所示:
基本设置保留字符不变。优化设置将字符减少到大约256个。在某些情况下,KiteOne字体的字符少于这个数字时,不会进行优化。
通过选择专家模式并仅包括基本拉丁设置,然后手动添加我们需要的字符,我们可以看到最大的节省。
让我们尝试一起按照专家FontSquirrel设置的步骤来做:
MytitleusingFitText在HTML的底部(在闭合标签之前),我们需要添加jQuery和Fittext库。然后,您必须执行应用于您的标题的插件:
默认情况下,插件将设置字体大小为元素宽度的1/10。有两种修改此标准字体大小控制的方法:配置压缩器和定义最小和最大尺寸。
通过使用压缩器,您将需要指定压缩值,例如,1.2可以更缓慢地调整文本大小,或者0.8可以更少地调整文本大小,如以下代码所示:
我们还可以通过定义最小和最大字体大小来修改此标准字体大小控制,以便在希望保留层次结构的情况下提供更多控制,如以下代码所示:
SlabText插件SlabText是一个插件,可以让您构建大、美丽且完全响应式的标题,从而使任何人都能够制作大、粗体且响应式的标题变得更容易。该脚本在调整每一行以填充可用的水平空间之前将标题拆分为行。每行设置的理想字符数通过将可用宽度除以像素字体大小来自动计算。
以下是其特点:
首先,我们需要为header标签添加一个ID,以便在JavaScript中选择,然后在HTML代码的闭合标签之前插入但是,与其保持自动化不如将行分解为不同的部分,修改用户感知和我们网站之间的通信:
脚本如下:
以下屏幕截图显示了两种状态,在运行强制手动换行代码之前(左侧)和之后(右侧):
Lettering通过包装每个字符、单词或行,并添加一个类(创建一个可管理的代码)来提供完整的字母控制,以便快速访问CSS文件中的字符。它是一个基于jQuery的插件,可以更轻松地调整字符之间的间距,创建编辑设计等。
PageTitle然后,请记住在标签中包含jQuery库,如下代码所示:
在HTML底部(在关闭标签之前),我们需要调用此脚本以指定此插件将影响哪个类:
之前的代码将产生以下输出。看一下这些span并想象一下你在没有这个插件的情况下是如何构建它的:
PageTitle现在,结构已经准备好接收这样的样式:
h1{font-family:'Impact';font-size:50px;text-transform:uppercase;text-shadow:1px1px2px#666;}.char1,.word1,.line1{color:purple;}.char2,.word2,.line2{color:orange;}.char3,.word3,.line3{color:yellow;}.char4,.line4{color:blue;}.char5{color:green;}.char6{color:indigo;}.char7{color:violet;}.char8{color:gold;}.char9{color:cyan;}.char10{color:lime;}此外,如果标题每个词(而不是字符)都有不同的样式,此插件可以通过定义参数"words"来处理,如下代码所示:
考虑使用
分割每行的不同样式的情况如下:
PageTitle
withlongtext对于前面的场景,在脚本中唯一的区别将是参数"lines":
因此,现在我们认为您想知道为什么要付出如此大的努力来创建一个样式,来测量距离,以及知道为每个元素增加多少字体是必要的。我们强烈建议使用在线工具Kern.js。
Kern.js是一个在线工具,与Lettering.js完美匹配,因为它提供了一个很好的界面,可以通过点击和拖动来调整字母间距、行高和字母位置。当你完成这项任务后,只需复制生成的CSS并在我们的样式表中使用即可。
当通过书签栏中的Kernjs.com链接打开网站时,可能会显示五个选项在页面顶部:
以下截图显示了这些选项:
一旦完成调整,只需点击检查按钮,将此视觉更改转换为准备复制并在站点上执行的代码。
当存在多个自定义元素时要小心,因为此代码可能会覆盖前一个。然而,有一种简单的方法可以避免进一步的问题:为元素规范定义一个类。以下代码是这种情况的一个示例:
PageTitle响应式测量ResponsiveMeasure是一个简单的脚本,允许您传入一个选择器(最好是您的主要内容将放置的容器),该选择器生成生成理想测量所需的理想字体大小,以便您的文本。听起来像是魔法吗?我们将在以下部分中看到如何定制此解决方案及其用法。
在HTML底部(在结束标记之前),我们需要调用ResponsiveMeasure脚本以执行操作。但是,在执行脚本之前,我们将澄清以下两种控制文本大小的方式:
让我们分三步完成这个练习。第二步和第三步只是第一步的补充:
在本章中,我们已经看到了文本的响应式字体大小。此外,我们已经学会了通过使用FontSquirrel、FitText、SlabText、Lettering和ResponsiveMeasure等解决方案来定制字体族的不同方法。这些解决方案为我们构建响应式网站时所需的图像支持和独立性提供了支持。
在下一章中,我们将讨论图片和视频,并学习如何将它们转换为适应不同设备的响应式和自适应媒体。此外,我们将看到如何考虑不同的播放器技术和设备来有效地处理视频。
最近,用于响应式站点的图像准备一直是最受讨论的问题之一,因为W3C尚未批准任何技术。与此同时,社区已经创造了一些各具优势的技术,试图解决这个问题。
我们将从基本图像调整开始本章。这个技术可以轻松地被集成到代码中,但移动用户正在等待更好的体验。
在本章中,我们将学到:
以下代码可用于使图像在其父容器调整大小时具有缩放自由度。最大宽度设置为原始尺寸的100%,其高度可以自动按照相同的图像比例进行调整:
img{max-width:100%;height:auto;}然而,要有效使用这一点,图像必须足够大,以便可以在最大可能的显示器上按比例缩放。然而,为桌面站点优化的图像对于移动互联网速度来说仍然相当沉重。
如果你在DOM中使用max-width或height标记来调整JPG图像,那么你可能只会在IE7或更旧版本的浏览器上看到像素化的图像。然而,有一个简单的代码可以解决这个问题:
img{-ms-interpolation-mode:bicubic;}这个特定的问题在IE8中被解决,在IE9中变得过时。
适应性图片不仅仅是关于缩放图片的问题。它涉及到其他问题,以及在提供最佳用户体验时需要牢记的变量。诸如以下:
尝试确定发送到浏览器的最佳图像可能与每个变量都独立无关。这就是问题所在。例如,仅仅知道屏幕分辨率的值并不意味着用户有足够的带宽接收高清晰度图片。
因此,基于这些事实,我们将如何在我们的Web应用程序中制作一张图片,它需要在许多设备上显示良好的质量,而不会造成巨大的带宽浪费?
当我们处理位图图像(非矢量化图像,如SVG)时,理想的解决方案似乎很简单:为每组分辨率提供不同大小的图片,其中每个图片都适用于某些类型的设备。
通常,我们考虑三种不同的屏幕尺寸来覆盖设备的多样性:
已经有许多技术试图解决这个问题,并提供解决方案来帮助我们为每个场合提供正确的图片。它们都以略有不同的方式工作,根据您的需求,您将选择最符合您项目需求的选择。我们很快就会看到其中一些。
没有这个标准,浏览器开发人员无法准备好他们的浏览器以良好地渲染它。今天,前端社区正在尝试使用CSS和JavaScript来完成相同的任务。
这是W3C对标签的定义:
他们也考虑到了旧版浏览器,这些浏览器将显示一个简单的图片作为备用内容。以下是标签将被使用的示例:
将其缩小到那个尺寸,你几乎认不出这对夫妇。与其简单地调整图片大小,不如裁剪它以摆脱一些背景并集中在它上面更有意义。最终结果是一张在较小尺寸下效果更好的图片。让我们比较左边的图片(艺术方向)和右边的图片如下:
焦点点改善了在缩小图像之前对图像最重要部分的聚焦。这样,它允许用户在智能手机上以较大尺寸看到图像的主要部分。所有这些都不需要使用JavaScript或jQuery。
使用焦点,您可以定义一个代表您不想因较小分辨率而错过的部分的区域。被焦点覆盖的部分在缩放时保持可见,无论你将它们缩放到多远。
以下类名允许您裁剪和调整到图像的一个大致区域。请注意,类名中的X表示介于一和六之间的数字:
焦点的原则很简单:想象一个12x12单位的网格放在图片上:
现在,我们假设这个人的头是图片中最重要的部分,并且我们需要将其定义为焦点。即使这个人的脸在图片的右边,当缩小到较小分辨率时,它仍然会保持焦点。
要在技术上定义焦点,我们只需设置图像的两个类。这些类可以水平和垂直地定位焦点。它将从网格的中心开始,如下图所示:
以下是专注于人脸的代码:
在这个例子中,焦点被定义为从中心向左三个网格单位,然后向上两个单位。focal-point类与图像周围的div一样必不可少。
标签的替代解决方案我们刚刚看到,W3C正在努力制定标准,尽快标记图片,这将使您能够为您用于查看我们网站的设备提供更合适的视觉内容。
由于这种功能的迫切需要,社区创建了两个JavaScript插件,以实现大多数常用浏览器接受的预期结果。它们是Foresight和Picturefill。
Foresight为网页提供了在请求从服务器请求图像之前,通知用户设备是否能够查看高分辨率图像(例如视网膜显示设备)的功能。
此外,Foresight会判断用户设备当前的网络连接速度是否足够快,以处理高分辨率图像。根据设备显示和网络连接性,foresight.js将为网页请求适当的图像。
通过自定义imgsource属性,使用诸如URI模板之类的方法,或者在URI中查找和替换值,可以形成为您图像的分辨率变体构建的请求,并具体使用新的CSSimage-set()函数的混合实现。
基本格式是image-set()函数可能有一个或多个image-set变体,每个变体由逗号分隔。每个图像集变体最多可以有三个参数:
让我们看一个真实的例子,下面的代码中我们正在使用移动优先的概念:
.fs-img{width:100%;font-family:'image-set(url(-small|-small-2x)2xhigh-bandwidth)';display:none;}然后,对于窗口,宽度至少为600px和800px:
@media(min-width:600px){.fs-img{font-family:'image-set(url(-small|-medium),url(-small|-medium-2x)2xhigh-bandwidth)';}}@media(min-width:800px){.fs-img{font-family:'image-set(url(-small|-large),url(-small|-large-2x)2xhigh-bandwidth)';max-width:100%;}}所以,我们用一些词来更好地解释它的工作原理。该代码将查找
标签的源代码中名称的片段,并将其替换为另一个名称。之后,站点将在其文件中搜索更改后的名称,验证所需的代码是否存在:
.jpg">提示该引擎用于更改文件名的后缀,使其具有良好的可扩展性,这非常好,因为在创建新的响应式图像时可以避免对代码的大量干预。
如果我们比较这个例子中的图像,查看KB的差异,我们将得到44KB的大图像,20KB的中图像和12KB的小图像。对于单个图像来说,这不是一个巨大的差异。然而,将其应用到整个站点,可能会大大减少不必要图像的加载。
Picturefill是用于响应式图片的JavaScript插件,类似于未来的picture元素,但现在就可以使用。这个非常轻量级的解决方案使用span标签而不是picture或image,以确保其自身的安全性。
Picturefill本身支持HD(Retina)图像替换。Picturefill还具有良好的性能优势,根据屏幕大小选择正确的图像,而无需下载其他图像。
下载此解决方案的文件后,让我们将此代码插入到您DOM的
标签中:或许有些项目需要将其作为解决方案(在HTML代码中放置整个规范及其图像变体),但如果网站上有很多图像,可能会带来可扩展性问题和网站维护问题。
对于响应式站点来说,定位背景图并不总是一件容易的事情,因为其正确的显示取决于其内容的行为。
为了澄清,让我展示这个问题的一个示例:
问题在于,有时我们会固定内容以保持背景正确,但需要更改。有两个插件对定位此背景非常有帮助:Anystretch和Backstretch。
Anystretch是一个jQuery插件,允许您向任何页面或块级元素添加动态调整大小的背景图像。最初,Anystretch是从Backstretch派生出来的。
图像将拉伸以适应页面/元素,并随着窗口大小的更改而自动调整大小。有一些选项可以配置它,例如水平定位、垂直定位、速度、元素定位和数据名称。
此插件的另一个优点是,如果我们在加载Anystretch后要更改图像,我们只需要再次进行处理,提供新路径即可。
是的,我们可以与Breakpoints.js插件一起使用,就像我们在第二章中所看到的设计响应式布局/网格,这样就可以更改图像路径并再次使用Anystretch,如果需要的话。
maincontent
footercontent
对于这个结构,有两个突出的词语:
在DOM的底部(在结束标记之前),我们需要包含jQuery代码和Anystretch脚本。然后,我们将对所有按照stretchMe类名设置的元素执行插件(只是一个建议的名称)。
这是将插件应用于div元素的视觉结果:
到目前为止,这种方法不错,但是如果使用,将对所有响应式背景应用相同的行为。换句话说,如果我们想要更改特性,我们需要单独调用该函数。
如果我们对同一个元素两次调用anystretch方法,它将替换现有图像并停止先前的处理。
如果我们查看上一个HTML代码,会发现一个名为div-home的类,它可以使用不同的选项执行,例如:
Backstretch是一个jQuery插件,允许用户向任何页面或元素添加动态调整大小的背景图像,它是Anystretch插件的基础。
但是,Backstretch发展了,现在还提供动态调整幻灯片元素的背景图像大小。所有这些背景图像将拉伸以适应页面/元素,并且将随着窗口/元素大小的更改而自动调整大小。
在DOM底部(在结束标记之前),我们将包括jQuery和Backstretch库。然后,我们将执行插件,将Backstrech附加到元素的背景上:
下面是视觉结果:
我们还可以将Backstretch附加到任何块级元素上。默认情况下,
标记将接收此响应式背景。要做到这一点,更好的方法是通过使用以下代码定义一个类来接收此操作,而不是使用上一个代码:屏幕密度指的是物理表面上的设备像素数量。通常以每英寸像素(PPI)进行测量。苹果为其双倍密度显示器创造了市场术语视网膜。根据苹果官方网站的说法:
“视网膜显示屏的像素密度非常高,以至于您的眼睛无法区分单个像素。”
换句话说,视网膜显示器的像素密度足够高,以至于人眼无法注意到像素化。但是,由于这些显示器正在广泛实施和使用,因此更加重要的是创建支持这些显示器的网站和应用程序。
在下图中,我们比较了视网膜和标准定义显示器之间的像素。在视网膜显示器中,与传统显示器相比,相同空间内的像素是双倍的:
单词“double”并非所有支持高密度图像的设备所使用的确切值。目前,市场上还有其他屏幕密度,其密度值为1.5和2.25。
视网膜图像的通常值是普通图像值的两倍。因此,通过使用媒体查询,我们可以测试浏览器是否支持高密度图像。让我们在下面的示例中检查一下:
/*normalspriteimagehasdimensionof100x100pixels*/span.bigicon-success{background:url(sprite.png)no-repeat-50px0;}@mediaonlyscreenand(-webkit-min-device-pixel-ratio:2),onlyscreenand(min-device-pixel-ratio:2){span.bigicon-success{background-image:url(sprite@2x.png);/*retinaspriteimagehasdimensionof200x200pixels*/background-size:200px200px;}}如果浏览器接受,我们会请求另一张图像来显示。然而,这种用法会产生两次图像请求:一次在检查之前,另一次在媒体查询内部。
现在,让我们看看如何使用Foresight只发出一次请求。
该插件具有在向用户显示任何图像之前检测设备显示的屏幕密度的能力。
让我们在下面的示例中看看:
.fs-img{font-family:'image-set(url(-small|-small-2x)2xhigh-bandwidth)';}在此示例中,浏览器会检查哪个图像元素具有类fs-img,并在显示任何图像之前(Foresight的默认行为)检查它是否支持视网膜图像;此外,它还可以检查用户是否处于高带宽状态。
请注意,在请求castle-small.jpg文件之前,例如,它会查找后缀-small并将其替换为-small-2x,然后请求文件castle-small-2x.jpg。
在我们的网站开发中使用HTML5之前,视频的使用受限于设备对AdobeFlashPlayer的接受。然而,由于HTML5中
目前,这个元素
使视频流畅的CSS代码非常简单:
video,iframe{max-width:100%;height:auto;}然而,老旧浏览器和新浏览器之间存在操作差异,并且为了增加内容的可访问性。通常更倾向于使用更安全的方法。这条路就是继续使用嵌入式视频或
现在,让我们专注于当前的技术。好消息是,视频提供商如YouTube或Vimeo已经支持
解决适应性问题的方法是他们创建了FitVids插件。
FitVids是一个轻量级的jQuery插件,通过创建一个包装器来自动调整我们响应式网页设计中视频宽度的工作,以保持其比例,否则被嵌入的视频的比例将会是这样:
目前支持的播放器有YouTube、Vimeo、Blip.tv、Viddler和Kickstarter。但如果需要使用我们自己的播放器,有一个选项可以指定自定义播放器。
在DOM底部(在结束标签之前),我们需要包含jQuery代码和FitVids脚本。然后,我们只需要将其执行附加到元素的类或ID上,如下所示:
之后,让我们使用这段HTML代码只是作为示例来看看它是如何工作的:
以下截图显示了使用FitVids的YouTube、Vimeo和Viddler视频的示例:
正如我们刚刚看到的,为每个设备加载正确的图像对于我们的响应式网站非常重要。因此,让我们在以下断点中的设计中实践这项技术,展示不同的图像:
以下屏幕截图显示了网站以及我正在引用的照片,就像我们在第二章中看到的那样,设计响应式布局/网格。对于这个练习,我指的是盒子内突出显示的图像:
对于这项活动,我建议使用Foresight插件,因为它可以更好地可视化图像源和断点。
不要忘记检查您正在使用的特定设备是否支持显示高密度图像。
在本章中,我们学习了将固定图像转换为灵活图像的简单方法,但仅仅理解这一点并不足以使它们适应不同的设备。此外,我们还学习了通过使用Foresight和Picturefill插件向用户提供正确图像的其他方法。当使用FocalPoint框架调整图像大小时,我们还控制了艺术方向,将焦点放在图片中的主要元素上。此外,我们还学会了使用FitVids插件使视频尺寸变得流动起来而不感到紧张。
在下一章中,我们将了解哪些幻灯片插件适用于响应式网站,学习如何构建它们,更改一些选项和效果,并给用户留下良好的印象。此外,我们还将了解在移动网站上通常使用和实现的手势。
在这一章中我们将学习以下内容:
打开一个网站并在头部区域看到一个图片轮播器是很常见的现象。图片轮播器显示突出内容,在有限的空间内确实非常有用。虽然当通过移动设备查看网站时可用空间更加有限,但轮播器元素仍然能够吸引客户的注意力。
如果与桌面相比,可以用于显示突出内容的区域和用于呈现它的资源的差异真的很大,通常情况下我们不会遇到脚本性能问题,并且每个转换的交互是通过使用箭头标志来切换图片。
当响应式时代开始时,观察了人们通常与图片轮播器互动的方式,并根据渐进增强的概念确定了变化,例如改变每个幻灯片的方式。解决方案是为移动设备的用户提供类似的体验:在支持的设备上对图片轮播器元素进行手势和触摸操作,而不是显示回退。
随着浏览器和技术的不断发展,有许多具有响应特性的图片轮播器插件。我个人最喜欢的插件是Elastislide、FlexSlider2、ResponsiveSlides、Slicebox和Swiper。有很多可用的,找到真正喜欢的一个的唯一方法是尝试它们!
让我们详细了解它们的工作原理。
Elastislide是一个响应式图片轮播器,它会根据jQuery在任何屏幕尺寸上工作的大小和行为进行调整。这个jQuery插件处理了轮播器的结构,包括内部百分比宽度的图片,水平或垂直显示它,以及预定义的最小显示图片数量。
当我们实现一个图片轮播器时,仅仅减小容器的尺寸并显示一个水平滚动条并不能优雅地解决小设备的问题。建议是也要调整内部项目的大小。Elastislide很好地解决了这个调整大小的问题,并定义了我们想要显示的最小元素,而不是仅仅使用CSS隐藏它们。
此外,Elastislide使用了一种名为jQuery++的补充和定制版本的jQuery库。jQuery++是另一个处理DOM和特殊事件非常有用的JavaScript库。在这种情况下,Elastislide使用了一个定制版本的jQuery++,这使得插件能够在触摸设备上处理滑动事件。
由于我们将在同一个轮播图中看到此插件的四个不同应用,我们将使用相同的HTML轮播图结构,只需在执行插件之前修改JavaScript,指定参数即可:
然后,在标签内包含CSS样式表:
在第一个示例中,我们将看到默认的视觉效果和行为,以及是否在其后放置以下代码,包括ElastiSlide插件:
$('#carousel').elastislide();此解决方案提供的默认选项包括:
下面的截图显示了此代码的实现效果。注意在平板电脑和智能手机上显示的版本之间的差异:
有一个选项可以使轮播图以垂直方向呈现,只需更改一个参数。此外,我们可以加快滚动效果。请记得包含与示例1中使用的相同文件,并在DOM中插入以下代码:
$('#carousel').elastislide({orientation:'vertical',speed:250});默认情况下,至少显示三张图片。但是,这个最小值可以根据我们将在下一个示例中看到的情况进行修改:
在此示例中,我们将定义轮播图中可见项目的最小值,当在小屏幕上查看轮播图时,可以注意到差异,并且图片不会缩小太多。此外,我们还可以定义从第三张图片开始显示的图片。
请记得包含与示例1中使用的相同文件,并在包含ElastiSlide插件之后执行脚本,提供以下参数并将其定位:
在第四个示例中,我们可以看到许多JavaScript实现。然而,此示例的主要目标是展示此插件为我们提供的可能性。通过使用插件回调函数和私有函数,我们可以跟踪点击和当前图像,然后通过创建图像画廊按需处理此图像更改:
为此,与其他插件相比,ElastiSlide可能没有太大优势,因为它依赖于我们的额外开发来完成这个画廊。因此,让我们看看下一个插件提供了什么来解决这个问题。
FlexSlider2是一个轻量级的jQuery图像滑块插件,包括淡入淡出和滑动动画、移动设备的触摸手势以及一堆可定制的选项。
自从2011年发布以来,FlexSlider2在开发者社区中一直展示着持续的信心,并且一些已知的CMS(内容管理系统),如Drupal和WordPress,已经导入了此插件以在其系统中使用。
稳定的版本2.0也支持使用旧浏览器的用户,自Safari4、Chrome4、Firefox3.6、Opera10和IE7开始。同时也支持Android和iOS设备。
为了查看此插件提供的各种选项,我们将看到以下三个应用示例中最常用的插件选项。我们将从显示滑块的默认布局开始。然后,我们将看到一个使用导航来支持显示大量图像的情况的滑块,最后一个示例中我们将看到另一种配置FlexSlider2提供的图像轮播的方式。
让我们从在
标签内包含CSS样式表开始:到目前为止,第一个示例从这里开始,我们正在定义一个简单的无序列表来定义轮播结构。对此只有两个要求,即将flexslider类定义为包装在包含FlexSlider2库后,让我们添加以下代码来执行脚本。我们将只显示轮播中普通图像元素的默认外观和行为:
$(document).ready(function(){$('.flexslider').flexslider({animation:"slide"});});此插件附带的样式在智能手机和桌面版本上看起来很漂亮:
初始HTML结构几乎相同,但现在我们必须为轮播复制幻灯片结构。通过执行JavaScript函数,识别这两个元素之间的关系,并连接到期望的行为。
记得包含示例1中使用的相同文件,然后将以下代码插入HTML代码中。
要创建这个图片画廊,我们必须通过使用ID来识别插件将影响的元素,避免任何行为冲突。将此示例与示例1进行比较,在示例1中,FlexSlider2只实例化了一次,我们对插件脚本进行了两次调用。
在以下代码的第一部分中,正在创建图片幻灯片,并补充一些插件提供的其他选项,比如animation、itemWidth、itemMargin和asNavFor。
在此代码的第二部分中,正在创建导航控制器:
$(document).ready(function(){$('#carousel').flexslider({animation:'slide',controlNav:false,animationLoop:false,slideshow:false,itemWidth:210,itemMargin:5,asNavFor:'#slider'});$('#slider').flexslider({animation:"slide",controlNav:false,animationLoop:false,slideshow:false,sync:"#carousel"});});提示asNavFor选项将#slider转换为#carousel的缩略图导航。而sync选项则创建了一个镜像,将在#slider上执行的操作同步到#carousel上。例如,如果用户通过滑块导航,轮播项目将跟随操作,显示相同的活动滑块,反之亦然。
非常简单、专业、且实用!因此,让我们看看这个响应式滑块在小设备和桌面上的带导航控制的视觉效果:
记得包含示例1中使用的相同文件,然后将以下代码插入HTML代码中。请注意,它使用与第一个示例相同的HTML结构:
然而,为了构建它,我们需要更改JavaScript代码,在那里我们会通知不同的参数,如itemWidth、itemMargin、minItems和maxItems,如我们将在以下代码中看到的那样:
$(document).ready(function(){$('.flexslider').flexslider({animation:"slide",animationLoop:false,itemWidth:210,itemMargin:5,minItems:2,maxItems:4});});注意itemWidth和itemMargin选项应该用像素进行度量和定义,但不用担心,插件会处理这个固定单位得很好。
此外,minItems和maxItems被用来定义根据设备宽度在屏幕上显示的最小/最大元素数量值。在下一个屏幕截图中,我们将看到前面的代码在移动设备和桌面两个版本中的实际应用:
ResponsiveSlides是一个jQuery插件,是一个非常轻量级的解决方案,基本上处于两种不同的模式。它可以自动淡化图像,或者作为具有分页和/或导航以在幻灯片之间淡化的响应式图像容器。
ResponsiveSlides可以在各种浏览器上执行,包括旧版IE和Android版本2.3及以上。它还为不本地支持的IE6和其他浏览器添加了CSSmax-width支持。这个属性有助于使其在小屏幕上响应。
这个插件有两个依赖项,分别是jQuery库和所有图片必须具有相同的尺寸。
在接下来的部分中,您将找到三个示例,其中我们可以看到这个插件提供的主要功能。在第一个示例中,我们将看到哪些文件是必要的,并且ResponsiveSlides的默认选项是什么。
在第二个示例中,我们将添加各种参数来检查这个插件如何可以定制化并满足我们项目的需求。
在第三个示例中,我们将通过图片实现额外的导航,方便用户访问并查看他们想要的特定幻灯片。
因此,我们将首先在
标签内包含ResponsiveSlides主题的CSS文件:然后,在DOM底部(在结束标签之前),我们应该包含jQuery库和ResponsiveSlides脚本。
现在,我们只需在网站加载后为带有rslides类的执行ResponsiveSlides脚本。让我们在包含ResponsiveSlides的代码之后放置这段代码:
提示在附带插件文件的demo.css文件中,有一堆CSS样式表,这些可能帮助我们自定义幻灯片。这个文件不是必需的,但对视觉有很大的区别,可能对进一步的参考有用。
这是插件的默认视觉效果:
因此,我们将像之前的示例一样开始,先在
标签内包含CSS文件,然后在DOM代码底部(在结束标签之前)包含jQuery库和ResponsiveSlides脚本。对于这个示例,我们添加了一个包裹幻灯片slider_container的div,帮助我们定位箭头和每个幻灯片的标题文本。如果某些项目需要这个标题文本来解释幻灯片,ResponsiveSlides可以很好地处理这个特性。
所以,让我们在下一个幻灯片上测试一下:
Thisisacaption
OthercaptionhereThethirdcaptionThefourthcaption然后,请记得在网站加载后为带有slider-example2ID的执行ResponsiveSlides脚本,将这段代码放在包含ResponsiveSlides的代码之后:
提示也可以通过将pager选项设置为false并将nav选项设置为true来通知插件仅呈现下一个/上一个箭头而无需分页导航。
在下面的屏幕截图中,我们将看到这个示例的标题和导航箭头样式,这些样式来自于与插件一起提供的demo.css:
此示例侧重于创建一个基于缩略图图像和我们之前创建的图像的自定义导航,为用户提供另一种显示幻灯片库的方式。为了构建它,我们将插入其他简单的无序列表,显示缩略图图像并设置一个ID,以后向插件提供信息:
以下截图描述了实现此导航功能的视觉效果:
Swiper是一个轻量级的移动触摸滑块,具有硬件加速转换(在支持的情况下)和惊人的本机行为。它旨在用于移动网站,但在现代桌面浏览器上也非常出色。
这个插件成为我最喜欢的两个原因是:它的性能真的很好,特别是在智能手机上,而且它还可以让桌面用户几乎感受到在浏览器中导航时体验到的触摸手势。
因此,我们将从在
标签中引入JS和CSS文件开始:
注意,这个CSS文件只是定制了幻灯片动画。即便如此,我们需要添加以下代码来定制幻灯片结构,以满足我们的需求,补充来自Swiper的样式:
然后,该插件支持使用简单的HTML无序列表来制作我们的幻灯片。此外,我们需要为该结构定义一些类名,以确保插件的正常运行:
Slide1
Slide2
所有滑块结构都由swiper-container和swiper-wrapper类包裹。此外,swiper-slide类定义div作为幻灯片项,而pager类指定将显示幻灯片分页的div。插件开发者提供的网站演示采用的视觉效果很漂亮;但是,这些样式不包括在idangerous.swiper.css中。它仍然依赖于我们对整个幻灯片的自定义,接下来我们将在以下截图中看到:
通过分析代码,该插件似乎非常聪明,并且可以快速地渲染到浏览器上。另一个重要的考虑是社区的不断更新,修复了主要和次要的错误。它与其他插件的当前差异是:
在插件版本1.8.5中,他们引入了3D流补充到Swiper中。它简单地提供了一个带动态阴影的惊人真实的3D画廊,相比其他幻灯片插件有很大的优势。让我们看看如何实现它。
由于它是Swiper的补充,我们需要包括与前面示例相同的文件,先从
中的CSS开始。然后,追加下面这些新的JS和CSS文件,用于引用3D流样式:好吧,看看这个补充可能带给幻灯片视觉上的巨大差异。仅仅通过使用CSS3Transform,Swiper插件就可以为我们提供一种自动显示不同幻灯片效果的方式:
Slicebox是一个jQuery插件,用于具有优雅回退(用于不支持新CSS属性的旧浏览器)的响应式3D图像幻灯片。
该插件的视觉效果真的很酷。一旦幻灯片改变,图像就被切成三到五个部分,并且旋转,呈现出令人难以置信的效果。
之后,我们将使用一个简单的HTML无序列表来制作我们的幻灯片,并为这个结构定义一些必需的ID,比如sb-slider,shadow,nav-arrows和nav-dots,以及插件用于阅读的命名代码部分:
在DOM的底部(在结束标签之前),包括jQuery和Slicebox库:
之后,我们将通过插入下一行代码来执行Slicebox脚本。
然而,在我看来,这个插件的主要问题是有许多行的代码向我们暴露了。
这是移动设备和桌面的效果截图:
“那么,考虑到所有屏幕尺寸的触摸意味着什么?两个东西:触摸目标尺寸和控件的放置。”
LukeWroblewski强调了响应式触摸设计中要考虑的两个最重要的要点:触摸目标尺寸和控件的放置:
同样地,我们可以看一下平板电脑的姿势,或者人们通常是如何拿着平板电脑的。人们用两只手沿着两侧拿着它们,或者只是在大腿上敲击屏幕:
有一些重要的JavaScript扩展和插件,允许我们将触摸手势集成到我们的响应式网站中,改善用户交互体验。一些例子包括QuoJS和Hammer。
这是一个微型、模块化、面向对象和简洁的JavaScript库,简化了HTML文档的遍历、事件处理和Ajax交互,用于快速的移动Web开发。
请注意,QuoJS不需要jQuery来工作;然而,它是一个简单而好的插件。
QuoJS有这些手势来帮助我们:
其代码包中还包括了不同类型的滑动、捏和旋转。
在DOM底部(在结束标签之前),包含QuoJS脚本;只有这样,我们才能通过创建事件监听器执行脚本。
在下面的例子中,如果用户将手指放在与工具箱ID相等的元素上,我们将实现一个动作。
QuoJS在语法中使用$$符号,避免与我们可能在网站上使用的$jQuery符号发生冲突。
Hammer是一个jQuery轻量级的多点触控手势库,压缩后只有3KB。
Hammer支持这些手势:
每个手势触发有用的事件和插件提供的事件数据。
提示有时,不需要jQuery的版本似乎更快,但在所有浏览器中可能不起作用。要切换版本,只需用hammer.min.js替换jquery.hammer.min.js文件。
让我们看一个例子:
只是为了提醒我们,这是我们最初设计的一个截图:
这张图片只是一个建议。你可以找到任何图片来替换它。这里的重点是在一个响应式标签内创建一个响应式图片幻灯片。
现在,只需选择每个幻灯片一张图片,并使用Swiper解决方案,在每个幻灯片上插入一个标语:
正如我们在第四章中所看到的,设计响应式文本,高度建议在响应式网站中使用@font-face。因此,为了补充这个练习,使用GoogleFonts提供的免费字体TitanOne进行标语的自定义。
记得在必要时使用FontSquirrel工具包。
在本章中,我们已经学习了为响应式网站准备的滑块插件,如Elastislide、FlexSlider、ResponsiveSlides、Swiper和Slicebox。我们还学习了如何构建它们,它们的优点和效果特性。尽管许多这些滑块插件已经实现了手势触摸,正如我们在本章中所见,我们还向您展示了如何使用QuoJS和Hammer库来整合触摸功能。
在下一章中,我们将看到如何在小宽度设备上处理表格。我们将了解如何实现经常使用的每种技术,例如水平滚动、减少可见列和转换为堆叠表格。
HTML元素表格可能相当宽以显示结构化内容。有时需要将整行数据保留在一起才能使表格有意义。表格默认可以弹性伸缩,但如果它们变得太窄,单元格内容将开始换行;这通常不太干净!
GarrettDimon提到了一个有趣的话题,关于调整表格宽度以适应不同屏幕尺寸并确保表格内容的含义的难度:
“数据表在响应式设计方面表现不佳。只是说说而已。”
在本章中,我们将学习创建响应式表格的四种不同方法:
下图显示了关于响应式表格的最常见问题,包括:最小表格宽度超过屏幕尺寸和整个表格尺寸(包括文本大小)的减小:
然而,让我们看看解决这个响应式问题的不同方法。
通过FooTable,我们可以将HTML表格转换为可扩展的响应式表格,允许具有小屏幕尺寸的设备保持相同的内容,唯一的变化是您将不得不优先考虑将要显示的内容。其功能是根据断点隐藏您认为不太重要的列。因此,只有在单击/触摸行时才会显示隐藏的数据。
如果我们更深入地研究这个jQuery插件,我们将注意到两个重要特性为良好的代码和开发的便利做出了贡献:即时定制(通过来自DOM的数据属性)和断点设置(可能与已在网站上使用的断点设置不同)。
接下来的示例中让我们看看如何在DOM中定义它。
让我们将以下代码作为示例插入到HTML代码中,以便练习插件资源:
ContactnamePhoneEmailPicture
BobBuilder | 555-12345 | bob@home.com | |
BridgetJones | 544-776655 | bjones@mysite.com | |
TomCruise | 555-99911 | cruise1@crazy.com | |
数据属性有助于理解FooTable的功能,只需查看DOM就可以知道哪些列会在手机或平板电脑上隐藏。
以下是FooTable使用的基本数据属性及其功能:
如果我们使用这些数据属性,应该将它们应用在
元素上,插件将在内部单元格中反映其更改。 在DOM的底部(在结束标记之前),我们需要包含两个文件:jQuery和FooTable库。之后,插入以下代码来执行脚本: 如果我们想要更改FooTable的断点,只需在执行前面的脚本时指定自己的值,如下面的代码所示: 在下面的屏幕截图中,我们将看到如果单击Bob的表行会发生什么。让我们比较一下我们在智能手机和平板电脑上的响应式表格: 在此示例中,每个设备上都有一些字段,只有在单击查看特定联系人的更多详细信息时才可见。虽然这种方法可以避免大量数据,但可能很难找到一个联系人,例如,通过电子邮件,因为这需要单击所有联系人才能显示信息。 有一些插件扩展可以解决这个问题。让我们来看看它们。 使用FooTable作为解决方案的另一个优点是其可扩展性。该插件是模块化的,允许您通过使用插件增加功能,例如排序、过滤和分页。 排序插件提供对表格列中包含的数据进行排序的功能。为此,我们将包含以下脚本文件: Contactname | Phone在下面的屏幕截图中,我们可以看到箭头图标的插入,这是插件用来对特定表头进行排序的:过滤插件添加了一个搜索字段,允许用户查找他们正在寻找的数据。搜索结果为我们带来了正确的数据,即使它们对观众是隐藏的。为此,让我们在脚本文件中包含以下内容:
在页面上添加一个文本输入框(在表格之前或之后),其ID为#filter,然后在表格元素的data-filter=#filter数据属性上指定它。以下是此筛选器的代码:
Filterby:在下面的屏幕截图中,筛选内容,仅显示一个项目,即使找到的值被隐藏:
此外,分页附加组件可以帮助显示总内容的一部分,默认创建含有10个项目的分页。为此,我们需要在脚本文件中包含以下代码:
因此,在上一个表格示例中,在之后,我们将添加以下代码,用于接收分页。以下div中的pagination类是必需的,其他类如pagination-centered和hide-if-no-paging仅为补充:
此外,对于此示例,让我们限制每页两个项目,以查看分页的使用,只需在table元素上添加data-page-size="2"。效果如下:尽管此插件看起来非常完善,但在某些情况下,内容需要其他界面。让我们看看堆叠表解决方案。
此解决方案将创建表格的副本,并将宽表格转换为在小屏幕上效果更好的两列键/值格式。
建议仅用于少量行的表格,因为它会大大增加垂直内容。
通过使用简单的媒体查询,我们可以隐藏原始表格并显示堆叠表。让我们看看如何将其付诸实践。
我们将首先在
标签内包含CSS样式表:@media(max-width:480px){.large-only{display:none;}.stacktable.small-only{display:table;}}之后,我们将添加上一个解决方案中看到的表格的基础,只需添加一个ID和类:
Contactname | Phone | Email | Picture |
---|
BobBuilder | 555-12345 | bob@home.com | |
BridgetJones | 544-776655 | bjones@mysite.com | |
TomCruise | 555-99911 | cruise1@crazy.com | |
在DOM的底部(在闭合标签之前),我们需要包含两个文件:jquery和stacktable库。然后,插入以下代码执行脚本,并指定表格ID和一个类来限制堆叠表仅适用于智能手机,如下所需:
以下是两个视图的屏幕截图—用于小设备和桌面:
此技术通过冻结第一列来实现,使您可以在其下滚动其他列。这样我们保持每行看到第一列的内容,从而允许左滚动,以查看其余内容,以便更容易进行数据比较。
推荐这种表格用于有更多列的表格,并且第一列的内容比其他列更重要。让我们通过在下一个示例中练习来澄清它将是什么样子。
Header1 | Header2 | Header3 | Header4 | Header5 | Header6 |
---|
firstcolumnimportantdata | row1,cell2 | row1,cell3 | row1,cell4 | row1,cell5 | row1,cell6 |
firstcolumnimportantdata | row2,cell2 | row2,cell3 | row2,cell4 | row2,cell5 | row2,cell6 |
在DOM的底部(在结束标签之前),我们只需要包含jQuery和响应式表格库:
让我们看一下下面的屏幕截图,显示了这张表格在智能手机和平板电脑上的情况:
当可用屏幕宽度超过767像素时,我们的表格开始发生变化。如果我们想修改这个默认值,需要打开responsive-tables.js文件,查找数值767,并进行更改。
从技术上讲,这很容易做到。然而,我们不能低估它在响应式网站上的效率,因为它有助于在小设备上更好地理解表格信息。
如果您发现我们表格的标题行比第一列更重要,并且在使用小设备时需要保持显示标题行,DavidBushell通过仅使用CSS代码创建了一个有趣的解决方案。
这个CSS解决方案将第一列移到另一个地方,不需要任何JavaScript库,只需要CSS3。
使用更真实的内容,让我们在HTML代码中创建这个表格:
Doctornames | Values | Dates | CashMoney | Message | City | State |
---|
Dr.Jayhawk | 102 | 03/30/1940 | $60.42 | PAID | Atlanta | Georgia |
Dr.JohnSmith | 137 | 03/18/1953 | $69.68 | PAID | Orlando | Florida |
Dr.Wolverine | 154 | 03/29/1976 | $86.68 | PAID | NewOrleans | Louisiana |
Dr.Tarheel | 113 | 03/30/1981 | $63.50 | PAID | SanAntonio | Texas |
让我们看一下智能手机和平板电脑上的结果:
链接到全表是一种不太常用的技术,因为它并不能完全解决情况。它的工作原理是用一个小模拟表来替换原表,然后只创建一个链接以查看完整的表格。
问题仍然存在,但这次用户可以在屏幕上向左/向右滑动以查看所有内容。有一个媒体查询来处理这种机制,只在小屏幕上显示它。
首先,让我们从可下载的代码文件中下载full-table.css文件。然后将其插入到HTML代码的
标签内。尽管这是一个CSS解决方案,但这段代码太长了,增加了打错字的机会。让我们重复使用从上一个示例中复制的表格代码,但对表格元素进行修改,如下所示:
在DOM的底部(在结束标签之前),我们需要包含jquery库并插入以下代码,根据一个类名来显示/隐藏解决方案:
在下面的屏幕截图中,我们将看到针对小屏幕的被压缩表格,在点击后将用户引导至完整表格可视化。当屏幕尺寸小于或等于520像素时,会出现此效果(如果需要使用CSS文件,可以修改此值)。
插件在点击后生成水平滚动条,以查看完整宽度的表格。
让我们使用FooTablejQuery插件和下面屏幕截图中表格的内容创建一个响应式表格。
这个表格的内容并非真实,我们只是用它来练习。
在下面的屏幕截图中,我们可以看到该表格在智能手机和平板电脑上的显示,每个设备使用不同的设计:
您可以首先基于平板电脑的设计创建表格结构,然后使用FooTable插件自动化为智能手机实现紧凑的可视化效果。
在下一章中,我们将学习如何使用表单,并学习如何实现自动完成、日期选择器和工具提示等功能。
使用HTML5编码在前端网页开发中的景观发生了巨大变化。通过使用适当的字段类型和本地验证,构建更好的表单的机会更多了,这是SEO的最佳情况。所有这些功能正在逐步被所有现代网络浏览器采用。
通过使用jQuery,我们可以增强页面上的HTML5体验,增加补充功能以改善用户体验。
最常用的HTML5输入类型包括email、date、tel、number和time。此外,HTML5自带的最常见属性包括placeholder、required、autocomplete和multiple。我们将在第十章中看到,确保浏览器支持,并不是所有的网络浏览器都以相同的方式支持HTML5特性,并且需要jQuery的干预来提供适当的支持。
但是,它仍然依赖于jQuery技术来显示诸如autocomplete等更复杂的验证。通常情况下,jQuery插件与新的HTML5输入类型非常配合,几乎对响应式网站来说是必不可少的。在开始实现功能之前,让我们创建一个基本的表单;这是第一步,将在后续示例中使用。创建一个带有基本标签的空HTML站点结构,然后保留jQuery包含,很快就会用到它:
Responsiveform