`
yhz61010
  • 浏览: 558077 次
  • 来自: -
博客专栏
63c13ecc-ef01-31cf-984e-de461c7dfde8
libgdx 游戏开发
浏览量:12177
社区版块
存档分类
最新评论

[原创] 浅谈 CSS display:none 对 SEO 及屏幕阅读器(screen reader)的影响

阅读更多
  一提到 CSS 的 display:none,大家应该都很熟悉,如果需要将某 HTML 元素隐藏不显示的话,很多人都会使用它。也许你会问,这个还有必要再讲吗?且听我慢慢讲来。

  现如今,很多网站都会使用 Tab, Slide 动画等这些常见的手段让用户能有好的使用体验,而且有时为了页面的简洁,我们也经常会用到 display:none 来达到隐藏元素的目的,再者很多鼎鼎大名的 JavaScript 库也会使用它,例如 jQuery。

  既然大家都用 display:none,那么还有什么好谈的呢?

  当然,合理合法的使用 display:none 对用户及 SEO 而言是正常的,搜索引擎也会去理会。可是如果非法的使用它们,借此想提高 SEO 的效果,就是非法的,而且搜索引擎也会对其进行惩罚。请看下面的例子:
<script language="JavaScript" type="text/javascript">
var o='d'+'i'+'v';
var a='style=\'disp';
var b='lay:';
var c='none\'';
document.write( "<"+o+a+b+c+">" );
</script>

  类似这样的写法,大家可能也见过,有的连<script>标签也进行拆分连接,例如: "<scr" + "ipt>",这样做的目的只有一个,就是“欺骗”:希望通过在页面上插入关键字或链接来提高 SEO 效果但是又不想让用户看到。无论是 SEO “欺骗”也好,还是出于其它目的进行“欺骗”也好,俗话说,出来混迟早是要还的。对于 SEO 而言,搜索引擎现在已经足够智能,对于上面这样简单的“欺骗”会进行严厉的处罚,所以任何侥幸的心理请不要有,因为随着算法的改进,各种黑帽(SEO 欺骗技术)早晚都会被发现的,而且一定会被重罚的。

  刚才提到的是 display:none 对 SEO 的影响,还有一个影响可能是很多人都不知道的,那就是对“屏幕阅读器(screen reader)”的影响。

  使用 iOS 设备的人现在是越来越多了,不知道其中的“VoiceOver”功能你是否知道,是否了解,是否使用过。出于人性化的考虑,很多移动设备包括 PC 几乎都有“辅助功能”,帮助身体不便的人来使用,其中“屏幕阅读器(screen reader)”就是帮助视力有障碍的人来读出屏幕上的内容的。

  如果一个网页中的内容使用了 display:none,那就意味着,你同时拒绝了为用户显示及“屏幕阅读器(screen reader)”。然而这样的结果可能是你不想得到的,那么我们该怎么办呢?怎么才能既不显示在页面上,又对“屏幕阅读器(screen reader)”有效呢?请看如下的代码:

.visuallyhidden {
    position: absolute;
    width: 1px; /* Setting this to 0 make it invisible for VoiceOver */
    height: 1px; /* Setting this to 0 make it invisible for VoiceOver */
    padding: 0;
    margin: -1px;
    border: 0;
    clip: rect(0 0 0 0);
    overflow: hidden;    
}


  上面这段代码出自 HTML5BoilerPlate project(参见下文引用地址),你可以管它叫“可见的隐藏”,虽然用户看不到内容,但是“屏幕阅读器(screen reader)”却可以看见它。

  你可能又会问了,“如果我使用了类似于 jQuery 这样的库怎么办?比如说,jQuery 的 slide 动画会动态的在元素上生成 display:none,那些的话,你说的这个办法不就不管用了吗?”

  解决的办法当然是有的,请如下面的示例:
var $button = $('#myButton'),
    $text   = $('#myText'),
    visible = true;

$button.click(function(){
if ( visible ) {
  $text.slideUp('fast',function(){
    $text.addClass('hide')
         .slideDown(0);
  });
} else {
  $text.slideUp(0,function(){
    $text.removeClass('hide')
         .slideDown('fast');
  });
}
visible = ! visible;
});​

  示例地址:http://jsfiddle.net/chriscoyier/zgtfA/1/

  示例讲解:当 visible 为真时,此时元素的状态是可见的,首先执行动画 slideUp 将元素隐藏(此时元素上有 display:none),动画结束时,添加“可见的隐藏” CSS,让元素不可见,然后再立刻执行 slideDown 动画,持续时间为 0(即无动画过程),此时就移除了元素上的 display:none,而且元素依然是不可见的(因为有“可见的隐藏” CSS)。

  当 visible 为假时,此时元素的状态是不可见的,首先执行 slideUp 动画将元素隐藏(此时元素上有 display:none),持续时间为 0(即无动画过程),动画结束后,移除“可见的隐藏” CSS,此时元素依然是隐藏的,因为有 display:none,之后再执行 slideDown 动画,显示元素内容。

  总结:综上所述,若不考虑“屏幕阅读器(screen reader)”,合理合法的使用 display:none 是隐藏元素最简单的做法,而且还不用担心会被搜索引擎惩罚(因为不是黑帽),不会影响 SEO 效果。若你的网站支持移动设置访问,那么最好考虑到用户很可能是使用“屏幕阅读器(screen reader)”,因此你可以采用“可见的隐藏”方法来隐藏元素。

引用
分享到:
评论

相关推荐

    javascript获取隐藏元素(display:none)的高度和宽度的方法

    然而,当我们尝试获取一个CSS样式为display:none的元素的高度和宽度时,会发现常规的JavaScript方法无法直接获取这些尺寸值,因为display:none的元素没有物理尺寸。为了获得这些隐藏元素的尺寸信息,需要采用一些...

    css元素隐藏原理及display:none和visibility:hidden

    隐藏网页元素通常涉及到两个重要的CSS属性:display和visibility。本文将详细探讨CSS元素隐藏的原理以及display:none和visibility:hidden这两个属性的不同应用及其影响。 首先,CSS元素隐藏的原理主要包括两个方面...

    display:none和visibility:hidden的差别比较与演示代码

    display:none和visibility:hidden的差别:visibility:hidden隐藏,但在浏览时保留位置;而CSS display:none视为不存在,且不加载,感兴趣的朋友可以研究下

    CSS display:block在Firefox下显示布局错乱问题

    对于某一单元行需要显示时,使用CSS display:block属性,不需要显示时使用display:none属性,在IE浏览器中显示正常,没有任何问题,但是当用Firefox浏览时却出现了布局错乱的问题,这是为什么呢? 本文向大家介绍...

    实例详解display:none与visible:hidden的区别

    在网页设计和开发中,CSS(层叠样式表)是用于控制页面布局和元素外观的重要工具。`display:none` 和 `visibility:hidden` 是两个经常用来隐藏网页元素的关键属性,但它们在实现效果和应用场景上有所不同。 `...

    CSS隐藏元素 display visibility opacity的区别.docx

    在CSS中,隐藏元素的方法主要有三种:`display:none`、`visibility:hidden`和`opacity:0`,它们各自有不同的特点和适用场景。 1. `display:none`:此属性会使元素完全从页面布局中消失,不占据任何空间。元素及其...

    css样式应用优先级实用PPT课件.pptx

    CSS 样式应用优先级详解 CSS 样式应用优先级是指在CSS样式规则应用时的顺序和优先级。该优先级规则决定了哪些样式规则将被应用于HTML元素。下面是CSS样式应用优先级的详细解释: 1. 重要声明(!important) 重要...

    css实现:分享到微信朋友圈引导页提示效果.zip

    这可以通过媒体查询(Media Queries)来实现,比如`@media screen and (max-width: 600px) {}`,当屏幕宽度小于600px时,应用特定的CSS规则。 3. **过渡和动画**:为了让页面交互更加生动,可以使用CSS的`...

    CSS:Visibility和Display属性的比较.pdf

    理解它们的区别并正确使用,可以让你在创建网页时更加灵活,同时也能避免可能对SEO产生的负面影响。在实际工作中,开发者应根据具体需求选择合适的方法来隐藏或显示元素,确保用户体验和搜索引擎优化的平衡。

    ie9崩溃现象当js设置tr元素样式为display:none

    在IE9浏览器中,当你尝试使用JavaScript来设置`&lt;tr&gt;`元素的CSS样式为`display:none`时,可能会遇到浏览器崩溃的问题。这个问题主要是由于IE9对表格元素(如`&lt;tr&gt;`、`&lt;td&gt;`等)处理方式的特定缺陷引起的。在IE9中,...

    纯css:hover伪类多级下拉菜单代码

    总的来说,纯CSS的`:hover`伪类实现多级下拉菜单是一种实用且高效的方法,它不需要JavaScript,对SEO友好,且易于理解和维护。通过调整CSS选择器和属性,你可以根据项目需求定制出各种风格和交互的下拉菜单。

    divcss隐藏内容样式方法PPT课件.pptx

    隐藏的内容对于屏幕阅读器用户或者辅助技术用户来说是不可见的,因此在隐藏内容时要考虑到这部分用户的需求。 总的来说,理解和掌握这些CSS隐藏技巧对于创建响应式、高性能的网页至关重要。通过合理运用,我们可以...

    多款CSS导航菜单效果

    本文将深入探讨“多款CSS导航菜单效果”的主题,旨在提供各种不同的CSS样式和技术,以便设计师可以根据自己的需求和网站风格选择合适的菜单效果。 首先,CSS(Cascading Style Sheets)是一种样式表语言,用于描述...

    css元素隐藏原理及displaynone和visibilityhidden

    在CSS中,让元素隐藏(指屏幕范围内肉眼不可见)的方法很多,有的占据空间,有的不占据空间;有的可以响应点击,有的不能响应点击。一个一个看。

    谈谈CSS隐藏元素(display,visibility)的区别

    在CSS中,隐藏元素主要有两种方法:`display: none` 和 `visibility: hidden`,它们在隐藏元素的同时,对页面布局和交互性有着不同的影响。此外,还有一些其他的技术,如设置`height: 0`结合`overflow: hidden`或者...

    css中display和visibility的用法和区别介绍

    在CSS中,`display`和`visibility`两个属性都是用于控制元素在页面上的显示状态,但它们的作用方式和效果有着显著的区别。 `display`属性主要影响元素的布局和类型。它有多种不同的值: 1. `block`:将元素转换为...

    CSS实现的大型导航下拉菜单

    使用`display:none`属性可以默认隐藏下拉菜单,只在用户悬停到父级菜单项时显示。 ```css .dropdown-content { display: none; } ``` 2. **显示下拉菜单**: 当鼠标悬停在`.dropdown`上时,通过改变`...

    div+css做的下拉框

    4. **浏览器兼容性**:虽然现代浏览器对CSS3的支持较好,但为了保证兼容性,你可能需要使用一些前缀(如 `-webkit-`、`-moz-`、`-ms-`)或者使用像autoprefixer这样的工具自动添加这些前缀。 5. **响应式设计**:...

    js中style.display=&quot;&quot;无效的解决方法.docx

    在JavaScript中,当尝试用`style.display=""`来显示一个原本通过CSS设置为`display:none`的元素时,元素可能不会如预期那样显示。例如: ```html #name { display: none; } &lt;div id="name"&gt;My name is smile. ...

    简单的Css 动态菜单

    总结,创建一个简单的CSS动态菜单需要理解CSS的基本语法,运用选择器、属性和值来定义样式,同时结合JavaScript和媒体查询实现交互效果和响应式设计。这个过程既锻炼了前端基础,又提升了用户体验。通过不断的实践和...

Global site tag (gtag.js) - Google Analytics