一提到 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)”,因此你可以采用“可见的隐藏”方法来隐藏元素。
引用
分享到:
相关推荐
然而,当我们尝试获取一个CSS样式为display:none的元素的高度和宽度时,会发现常规的JavaScript方法无法直接获取这些尺寸值,因为display:none的元素没有物理尺寸。为了获得这些隐藏元素的尺寸信息,需要采用一些...
这是因为CSS解析器在遇到空字符串时会将其解释为默认值,但不同类型的元素默认的 `display` 值可能不同。对于大多数元素来说,这通常意味着 `inline` 或 `block`,但并不是所有情况都是这样。因此,当你尝试将 `...
隐藏网页元素通常涉及到两个重要的CSS属性:display和visibility。本文将详细探讨CSS元素隐藏的原理以及display:none和visibility:hidden这两个属性的不同应用及其影响。 首先,CSS元素隐藏的原理主要包括两个方面...
display:none和visibility:hidden的差别:visibility:hidden隐藏,但在浏览时保留位置;而CSS display:none视为不存在,且不加载,感兴趣的朋友可以研究下
在网页设计和开发中,CSS(层叠样式表)是用于控制页面布局和元素外观的重要工具。`display:none` 和 `visibility:hidden` 是两个经常用来隐藏网页元素的关键属性,但它们在实现效果和应用场景上有所不同。 `...
在CSS中,隐藏元素的方法主要有三种:`display:none`、`visibility:hidden`和`opacity:0`,它们各自有不同的特点和适用场景。 1. `display:none`:此属性会使元素完全从页面布局中消失,不占据任何空间。元素及其...
`display` 属性是CSS中不可或缺的一部分,它对网页布局起着至关重要的作用。通过`display`属性,我们可以控制HTML元素的显示方式,从而实现各种复杂的布局效果。下面我们将深入探讨`display`属性的原理、用途及其...
CSS 样式应用优先级详解 CSS 样式应用优先级是指在CSS样式规则应用时的顺序和优先级。该优先级规则决定了哪些样式规则将被应用于HTML元素。下面是CSS样式应用优先级的详细解释: 1. 重要声明(!important) 重要...
这可以通过媒体查询(Media Queries)来实现,比如`@media screen and (max-width: 600px) {}`,当屏幕宽度小于600px时,应用特定的CSS规则。 3. **过渡和动画**:为了让页面交互更加生动,可以使用CSS的`...
1. **无障碍访问**:为选项卡添加`tabindex="0"`和`aria-selected`属性,确保屏幕阅读器用户也能正常操作。 2. **响应式设计**:根据屏幕尺寸调整选项卡的布局,如在移动设备上垂直堆叠选项卡。 3. **内存效率**:...
总的来说,纯CSS的`:hover`伪类实现多级下拉菜单是一种实用且高效的方法,它不需要JavaScript,对SEO友好,且易于理解和维护。通过调整CSS选择器和属性,你可以根据项目需求定制出各种风格和交互的下拉菜单。
隐藏的内容对于屏幕阅读器用户或者辅助技术用户来说是不可见的,因此在隐藏内容时要考虑到这部分用户的需求。 总的来说,理解和掌握这些CSS隐藏技巧对于创建响应式、高性能的网页至关重要。通过合理运用,我们可以...
在CSS中,让元素隐藏(指屏幕范围内肉眼不可见)的方法很多,有的占据空间,有的不占据空间;有的可以响应点击,有的不能响应点击。一个一个看。
在CSS中,隐藏元素主要有两种方法:`display: none` 和 `visibility: hidden`,它们在隐藏元素的同时,对页面布局和交互性有着不同的影响。此外,还有一些其他的技术,如设置`height: 0`结合`overflow: hidden`或者...
在CSS中,`display`和`visibility`两个属性都是用于控制元素在页面上的显示状态,但它们的作用方式和效果有着显著的区别。 `display`属性主要影响元素的布局和类型。它有多种不同的值: 1. `block`:将元素转换为...
使用`display:none`属性可以默认隐藏下拉菜单,只在用户悬停到父级菜单项时显示。 ```css .dropdown-content { display: none; } ``` 2. **显示下拉菜单**: 当鼠标悬停在`.dropdown`上时,通过改变`...
通过选择器(如元素选择器、类选择器、ID选择器),我们可以指定哪些元素应用这些样式。例如: ```css header { background-color: #f1f1f1; padding: 20px; } .navbar { list-style-type: none; margin: 0; ...
在JavaScript中,当尝试用`style.display=""`来显示一个原本通过CSS设置为`display:none`的元素时,元素可能不会如预期那样显示。例如: ```html #name { display: none; } <div id="name">My name is smile. ...
总结,创建一个简单的CSS动态菜单需要理解CSS的基本语法,运用选择器、属性和值来定义样式,同时结合JavaScript和媒体查询实现交互效果和响应式设计。这个过程既锻炼了前端基础,又提升了用户体验。通过不断的实践和...
在CSS中,我们主要依赖于伪类选择器(如`:hover`, `:focus`, `:active`)和`display`属性来控制这些元素的状态。 **基本HTML结构** ```html <li><a href="#tab1">Tab 1</a></li> <li><a href="#tab2">Tab 2...