深入浅出HTML-第2章:XHTML和CSS基础

XHTML和CSS基础

1、标记代码的部件:标签、元素和属性

与其他标记语言一样,XHTML的关键,是标签( tag)。标签是经过编码的符号,用于分隔和区分内容的不同部分, 并告知浏览器它所处理的是什么类型的内容。
XHTML中的标签包围在一对尖括号(<和>)之间,以便将它们与普通文本明确区分开。 第一个尖括号(<)标明了标签的开头,随后是特定的标签名(tag name),最后以一个反向的尖括号(>)结束。例如,下面是表示段落的开头的XHTML标签:

注意, 标签名使用的是小写, 这是XHTML的要求。标签名在HTML中不区分大小写(许多 Web 作者把它们写为大写,以便让标记代码更易读) , 但在XHTML中必须是小写(这是XHTML区别于HTML的那些更严格的规则之一)

大多数标签都配对使用:1个开标签[opening tag,也叫开始标签(start tag)],用于标明一 个内容片段的开始,还有一个闭标签[ closing tag,也叫结束标签( end tag),用于标明其结束。

这对标签和它们之间的一切形成一个完整的元素(element)。元素是 XHTML 文档的基本组成要素。老版本的HTML中有些元素不需要闭标签,因为一个新的开标签的出现暗示了前一元素的结束和新的一个元素的开始。但是在XHTML中,所有元素都必须结束于一个闭标签一 更准确地说,是几乎所有。

某些标签表示空元素(empty element),它们没有内容一实际上也不能有内容。空元素不需要结束标签,但是在XHTML中要通过在代表整个元素的一个单独的标签的尾部使用一个结尾斜线(trailing slash)来“自闭合” 。例如,下面的标签代表一个换行。它是一个空元素,在浏览器呈现文档时,会强迫后面的文本折到一个新行上:


结尾斜线之前的空格不是非有不可,但是它能希助较老的浏览器正确理解标签,因为如果没有这个空格,有些罕见的旧式浏览器不能发现标签的结束尖括号。有些空元素被称为替换元素 (replaced element),它们实际上并不由图形浏览器自己呈现,而是被替换为一些别的内容。在HTML中,空元素不应当包含结尾斜线。

元素的开标签可以带有一些属性(attribute),以提供有关该元素的更多信息——一些该元素应有的特定属性(property)。属性由属性名 (attribute name)和随后的属性值(attribute value) 组成,如下所示:

Hello, world!<∕p>

这一段落具有一个值为“greeting”的class属性,这个属性将它与其他没有这一属性的段落区别开来。属性的名和值用一个等号(=) 连接起来,并且值要用一对引号括
起来。XHTML中所有属性值都必须用引号括起来,用单引号或双引号均可。在HTML中属性值用不用引号括起来都行,但在XHTML Strict中则必须括起来。有些
属性在HTML中不需要有值[没有值的属性被称为最小化属性(minimized attribute)],但在XHTML中所有属性都必须有值——最小化属性是不允许的。与标签名一样,属性名在XHTML中必须是小写,但在HTML中则不区分大小写。属性值则总是不区分大小写的,特别是因为有些值可能需要使用大写字母。即便如此,为了一
致性起见,只要可以用小写就最好用小写。

元素的开标签可以具有多个属性,它们彼此用空格隔开。属性只允许出现在开标签中(或空元素的单一的、自闭合的标签中) 。某些元素必须指定某些属性,而其他属性则是可有可无的,一切取决于该元素本身。下图说明了XHTML元素的基本组成部分:
深入浅出HTML-第2章:XHTML和CSS基础_第1张图片

2、块级元素和行内元素
元素可分为两大基本类型:块级的和行内的。块级元素(block-levelelement)包含有一大块内容,应该被显示在自己的行上,它们可以用来将长长的文本分割为一些段落、标题和列表等可管理的部分。行内(inline)元素通常包含一串较短的文本,并且被呈现在同一行上其他文本的旁边,如句子中一些着重强调的词就可以被标记为行内元素。

所有非空的块级元素都能包含文本和行内元素,它们中的大多数还可以包含其他块级元素。相比之下,非空的行内元素则只能包含文本或其他行内元素。例如,em 元素是行内元素,用于对其中的文本加以强调;而p元素是块级元素,用于标明文本段落。因为em是行内元素,不能包含块级元素,所以下面的例子是错误、无效的:

Hello, world!<∕p><∕em>

3、嵌套元素
元素可以层层嵌套,每个元素都存在于其包含元素中。它们必须正确嵌套, 每个闭
标签都要以正确次序出现,以便在闭合一个内层元素的包含元素之前先闭合这个内层元素。下面的标记代码是不正确地嵌套在一起的几个元素的例子:

Helloj worldl<∕p><∕em>
确保元素的正确嵌套,应该总是以与它们打开的次序相反的次序闭合它们:

Hello, world I<∕em><∕p>

4、空白符
在作为纯文本创建XHTML文档时,可以随意编排其格式。换行和缩进可以让标记代码在编辑文档的过程中更具可读性。对嵌套的块级元素进行缩进有助于看清特定
元素开始和结束的位置,并避免发生嵌套错误或忘记用正确的闭合标签结束元素的情况。

有时你可能想保留内容中额外的空格、制表符、换行符,如在页面上编排诗歌或计算机代码的格式的时候。元素pre正是用于这种描述多段预先编排过格式的文本的场合。

5、标准属性
讲述一个元素时,会列出它的必需属性和可选属性。但是有些通用属性几乎可以用于任何元素(并且基本上都是可选的)。

①核心属性——这类属性包含关于元素的一般性信息,可以包含在几乎任何元素的开标签内。

  • class:表示特定元素所属的一个类或一组类。同属一类的元素可以共享一些呈现性特征,而且对元素进行分类对于客户端脚本编程也会有用。类名几乎可以是任何你喜欢的文字,但只能由字母、数字、连字符(-)和下划线( _)组成,其他标点符号或特殊符号是不允许的。可以有多个元素属于同一类。此外,一个元素也可以属于不止一个类,此时属性值中的多个类名用空格分隔。

  • id:为元素指定一个唯一性的标识符。id 可以是几乎任何简短文字,但它在一个文档中必须是唯一的,不能有多个元素共用一个标识符。id 属性不能含有除连字符(-)和下划线 ( _)之外的任何标点符号或特殊符号。其中第一个字符必须是字母,而不能是数字或任何其他字符。

  • style:为元素指定 CSS 属性。这被称为内联样式定义( inline styling) 。虽然 style属性对大多数元素都有效,但应该避免使用,因为它把内容和表现混在了一起。

  • title:为元素提供一个文本标题。许多图形化浏览器将title属性的值显示在“工具提示”(即当用户的鼠标指针逗留在所呈现的元素上方时出现的那个小小的浮动窗口)中。

②国际化属性——包含关于用于书写元素内容的自然语言(如英语、法语、拉丁语等)的信息。它们几乎可以包含在任何元素中,特别是那些所包含文本使用的语言不同于文档其他部分的元素。

  • dir:把文本的阅读方向设置为由值ltr(从左到右)或 rtl (从右到左)所指定的方向。 通常用不着使用这个属性,因为语言的方向应该从 lang 和 xml:lang 属性推断。
  • lang:指定用于书写所包含的内容的语言。语言用一种缩写的语言代码表示,如en 代表英语,es代表西班牙语(Espanol), zh代表汉语等。
  • xml:lang:也用于指定用于书写所包含的内容的语言。这是lang属性的XML形式,用于XML文档中。XHTML文档既是XML又是HTML(取决于服务器如何交付它),因此元素既可指定lang也可指定xml:lang 属性,它们的值应该是同样的语言代码。

③焦点属性
当某些元素一尤其是链接和表单控件一处于预激活状态时,被称为拥有焦点( focus), 因为浏览器的“注意力”集中在该元素身上,准备激活它。可以为一些元素设置下列焦点属性以增强其对于用键盘在网页上导航的人的可用性。

  • accesskey:为元素分配一个键盘快捷键,以便在使用键盘导航时能更方便、快捷地访问它。该属性的值是对应于访问键的字符。用于激活访问键的实际按键组合因浏览器和操作系统而异。
  • tabindex:指定元素在使用制表键遍历链接和表单控件时所形成的访问顺序中的位置。
    有许多事件属性可用于客户端脚本编程。它们包括:onclick、ondblclick、onkeydown、onkeypress、onkeyup、onmousedown、onmousemove、onmouseout、 onmouseover、onkeyup。每当用户在元素上执行一个事件表示的动作时,就发生这个事件. 但是,使用这种内联的事件处理器是被强烈反对的做法,因此我们不打算谈及这些可选属性。由脚本带来的行为性增强最好与文档的内容和结构分离开,正如表现层也应该与它们分离开一样。

6、添加注释

在文档中嵌入注释往往很有用。它们不会被浏览器显示,但是你(或其他人)在查看源标记代码时可以看到。注释可以包含如对文档为何要以特定方式进行组织的说明、文档的修改指南或改动历史记录这类东西。XHTML中的注释使用一种特别的标签结构:

<!--Use an h2 for subheadings-->
<h2>Adding Comments<∕h2>

一段注释始于。浏览器不会呈现任何出现在这些标记符号之间的内容或元素,即便注释跨越多行。注释也可用于在测试网页时暂时“ 隐藏” 一部分标记代码:

<!-- Hiding this for testing
<h2>Adding Comments<∕h2>
End hiding -->

虽然注释不会被浏览器显示出来,但是它们依然随着其余的标记代码一起被发送,而且访问者查看网页的源代码时也可以看到它们。不要期望注释能完全保密,也不要依赖它们来永久性地删除或禁用任何重要的内容或标记代码。

7、XHTML 文档

先前我们反复使用文档(document)和页面(page)这两个词,你也许会以为它们可以互换使用。但一般说来,当说到文档的时候,我们所谈论的是含有XHTML 源代码的那个纯文本文件, 而页面则是图形浏览器呈现这个文档所得到的可见结果。文档是你创作的东西, 而页面则是你(以及网站的访问者)将看到和使用的东西。

一个有效、合式的XHTML文档必须符合严格的结构,并按确切的格局安排一些必需的组成部分。下面的代码中所有必需的部分都出现在正确的位置。

<!DOCTYPE html PUBLIC "-∕∕W3C∕∕DTD XHTML 1.0 Strict∕∕EN"
"http:∕∕www.w3.org∕TR∕xhtml1∕DTD∕xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml1" lang="en" xml:lang="en">
  <head>
    <title>My first web page<∕title>
  <∕head>
  <body>
    <p>XHTML is easy!<∕p>
  <∕body>
<∕html>

尽管看上去很简单,这确实是个完整、有效、合式的文档。你创建的每个网页都将从与其类似的框架开始。

8、Doctype
XHTML文档开始于一个文档类型声明(Document Type Declaration,简写为 doctype)。这是 一种必需的组成部分,它声明了文档的类型及其所遵守的标准规则集。XHTML的每种“ 风味” 都有自己相应的文档类型声明。

  • XHTML 1.0 Strict:
<!DOCTYPE html PUBLIC -∕∕W3C∕∕DTD XHTML 1.0 Strict//EN"
 "http:∕∕www.w3.org∕TR∕xhtml1∕DTD∕xhtml1-strict.dtd">
  • XHTML 1.0 Transitional:
<!DOCTYPE html PUBLIC "-∕∕W3C∕∕DTD XHTML 1.0 Transitioπal∕∕EN"
 "http:∕∕www.w3.org∕TR∕xhtml1∕DTD∕xhtml1-transitional.dtd">
  • XHTML 1.0 Frameset:
<!DOCTYPE html PUBLIC "-∕∕W3C∕∕DTD XHTML 1.0 Frameset∕∕EN"
 "http:∕∕www.w3.org∕TR∕xhtml1∕DTD∕xhtml1-frameset.dtd">

文档类型声明是一种标签,但是尽管也使用尖括号,它并不是XHTML元素,因此并不需要一个闭标签或结尾斜线。实际上,它根本不是文档的标记代码的一部分。它只是向用户代理传达关于文档的信息,助其判断所处理的文档的类型并按照恰当的规则呈现页面。

你的XHTML文档中的文档类型声明必须严格按我们刚才所展示的那样书写,包括其大小写形式和引号,但不必折为两行。

文档类型切换:遵从模式与怪异模式
当浏览器下载了HTML或XHTML文档后,它必须做出一系列程序化的假定,以便解析文档的标记代码并应用作者的CSS代码中建议的表现样式。一个页面也许在一个图形化浏览器中呈现得很完美,但在另一个浏览器中却乱成一锅粥。

这种窘境导致了文梢类型声明切换(doctype switch)的出现。如果一个文档包含有完整、正确的文档类型声明,那么现代的浏览器可以认为整个文档是合式的并且遵守Web标准。于是浏览器可以在一种遵从标记语言和CSS的既定标准的模式下呈现页面。这种模式称为遵从模式 (compliance mode)或严格模式(strict mode)。如果文档中没有文档类型声明,或者声明不完整或不正确,则浏览器将假定所处理的是一个旧式文档,并转而采用其宽松和宽容的旧式呈现模式。这种模式称为怪异模式(quirks mode),有时也叫兼容模式(compatibility mode),因为它旨在适应非标准的、未正确构建的标记代码的种种怪癖。较老的浏览器缺乏内置的文档类型声明切 换功能,因此只能使用其过时的怪异模式。

在现代的Web浏览器中,为了正确地启用遵从模式,必须在文档的第一行加入一条完整的文档类型声明,在它之前只允许有空白符。出现在文档类型声明之前的任何标记代码、文本甚至注释都将导致大多数现代浏览器进入怪异模式并产生常常不可预见的结果。当文档使用遵从模式呈现的时候,用CSS设计网站要容易得多,其结果也更为一致。因此,一条完整、正确的文档类型声明是非常必要的。并且,因为文档类型声明也是有效Web文档的必需部分,所以只要文档是正确的,新式浏览器总会用遵从模式来呈现它们。

9、元素
实际的标记代码从文档类型声明后面的html元素开始。它是整个文档的容器,被踪为根元素(rootelement)。html元素没有自己特有的属性,纯粹是一个用于定义文档的开始和结尾的容器。出现在这个元素之外的任何元素或内容(除了并非元素的文档类型声明) 都将导致整个文档无效。

  • 必需属性:xmlns——用于指定XML命名空间的URL。对于 XHTML 文档,应该是 http://www.w3.org/1999/xhtml。
  • 可选属性:html 元素没有可选属性。
  • 标准属性
    □ dir
    □ id
    □ lang
    □ xml: lang

命名空间(namespace)是XML语言中规定元素和属性名称的地方。XML是一种可扩展标记语言,允许作者定义自己的自定义元素和属性。例如,对于一个关于动物的文档来说,一个具有species属性的animal元素会很有用,这些自定义名称可以定义在一个特别的命名空间中。另一方面,XHTML1.0具有一套预定义的元素和属性名称集,其命名空间的正确URL为http://www.w3.org/1999/xhtml。XHTML文档中的命名空间通过html元素的xmlns属性声明。

标准的lang和xml:lang属性对于html元素是可选的(正如对于大多数其他元素一样)。因为它是根元素,所有其他元素都是其后裔,这里的语言声明将会传递到文档中的所有其他元素,所以建议指定这两个属性。

10、其他部分
文档的其他部分由head和body元素组成。head元素包含关于文档自身的信息(包括必需的title元素),而body元素则包含所有最终由浏览器呈现并供访问者浏览和使用的内容。
总而言之,XHTML文档的基本结构非常简单,只需要一条文档类型声明、一个根元素、一个具有title元素的head元素,还有一个body元素。

11、文档树
可以把XHTML文档的结构想象为一棵倒置的树,其枝干代表文档的元素。这棵树发端于顶部的根元素,并向下延伸出所有其他元素。它更像是一个家谱图,而不是一棵枝繁叶茂的木质的树。出于这个原因,家谱学中的术语常被用于描述元素之间的关系。

12、CSS基础
CSS能够为页面添加样式,增强和改进内容的外观。提供结构的是XHTML,每个元素都标明了内容中的一个不同部分,而属性则传达了关于元素的更多信息。CSS是影响这些XHTML元素的呈现外观的另外一层要素。颜色、字体、文本大小、背景以及元素在页面上的布局都属于内容的表现方面的因素,都能通过巧妙运用CSS来加以控制。

13、CSS 规则剖析
如果说元素是标记代码的构建块料的话,那么CSS的构建块料则是规则( rule)。它是一个指令集,浏览器可以按照其指示基于所提供的描述性的值改变XHTML元素的外观。一条CSS规则由几个部分组成,如下图所示:
深入浅出HTML-第2章:XHTML和CSS基础_第2张图片

  • 选择符( selector)是规则中用于确定样式所应用到的目标元素的部分。它的作用范围大到可以影响某种元素的每一个实例,小到仅仅影响几个甚至一个元素。
  • 样式声明又包含两个部分:属性和值。属性是元素的表现形式中将被修改的方面,如颜色、宽度或在页面上的位置。CSS 语言中有大量属性可供使用。

属性的值说明了应被应用到选定的元素上的特定样式。可接受的值取决于属性本身,有些属性可以有用空格分隔的多个值。

样式声明位于一对大括号"{” 和“ }"之间。可以为一个选择符指定多个样式声明,以便用一条规则改变元素表现样式的多个方面。属性与其值之间用冒号( : )分隔,样式声明以一个分号( ; )结尾。分号可以把多个样式声明分隔开,但是如果规则中只有一个样式声明,那么分号是可选的。一系列样式声明中的最后一个也是如此。为谨慎起见,养成在每一个样式声明的后 面都加上一个分号(即使只有一个样式声明)的习惯不是件坏事。

如果CSS代码没有遵守这些基本结构和语法,例如,漏掉了闭合括号或分隔属性和值的冒号, 那么整条规则甚至整个样式表都可能会失灵。就像XHTML一样,样式表应该是合式的和正确构造的。W3C 提供了1个验证服务(http://jigsaw.w3.org/css-validator/) ,它可以帮助你发现样式表中的错误。

14、CSS 选择符
选择符,用于从XHTML文档中选择元素。选择符有许多种,各有其不同的具体性
(specificity),可以确定一大批元素或仅仅几个元素。具体性是度量选择符的作用范围的手段。所谓作用范围,换句话说,指的是选择符选择了多少元素在CSS的设计原则中,比较具体的选择符将凌驾于较不具体的选择符之上并取而代之。具体性是 CSS中较为含糊和难以掌握的概念之一,但也是这种语言中最强大的特性之一。

  • 全体选择符:全体(universal)选择符是一个星号(*)。它充当一个“通配符(wild card)”,选择文档中的每一个元素。例如,下一规则将把蓝色前景色应用到所有元素上:
    * { color: blue; }
    标题、段落、列表、表格单元格甚至链接都将呈现为蓝色,因为这一全体选择符选择了所有元素。这是最不具体的选择符,因为它完全缺乏具体性。
  • 元素选择符:元素选择符选择一种元素的所有实例,其具体性来自于标签名。这种选择符比全体选择符更具体,但还不是很具体,因为其目标是一种元素的每一个实例,无论它们倒底有多少个。例如,下一规则将每一个em元素的前景色指定为红色,哪怕文将中有数以千计的这种元素:
    em ( color: red; }
    元素选择符也叫类型(type)选择符。
  • 类选择符:类选择符以class属性中有指定类名的任何元素为目标。因为class几乎可用于XHTML中的任何元素,而且可以有任意数目的元素属于同一个类,所以这种选择符不是特别具体,但还是比元素选择符更具体。在CSS中,类选择符以一个圆点(.) 开头。例如下面规则将影响所有属于"info"类的元素的样式,不管它们是什么元素:
    .info { color: purple; }
  • ID 选择符:ID 选择符将仅仅选择具有指定标识符的那个元素。实际上,id属性可用于几乎所有元素,但一个id属性值在一个文档中只能使用一次。ID选择符在一个页面中只以一个元素为目标,这使它比可能以许多元素为目标的类选择符具体得多。ID 选择符以一个"#"符号开头。下面的规则会将 id 值为introduction的元素的前景色指定为绿色:#introduction { color: green; }
  • 伪类选择符:伪类选择符类似于类选择符(其具体性也与类选择符相同),但它选择的是处于特定状态的元素。这种选择符以冒号(:)开头。可用的伪类只有有限几个:
:link { color: blue; }
:visited ( color: purple; }
:active ( color: red; }
:hover ( color: green; )
:focus ( color: orange; }

:link伪类选择所有超链接元素。:visited伪类选择那些所指向的目标已经被访问过的链接(已访问过的链接被记录于响浏览器内在的访问历史记录中)。:active 伪类选择处于活动状态的链接。所谓处于活动状态,指的是在被激活期间(当用 鼠标点击链接时,或当焦点位于链接上并按下回车键时)。: hover伪类选择用户的定点设备“悬浮”于其上方的元素。虽然任何元素都能处于有定点设备悬浮其上的状态,但是这一伪类最常用于链接(不过,某些老式浏览器只支持把这一伪类用于链接而不是其他元素)。:focus 伪类选择拥有焦点的元素。某些浏览器不支持:focus,特别是Windows下的IE 6。但是,IE实际上(不正确地)将: active伪类当做: focus伪类对待,不过这仅针对链接,不适用于其他元素。
:active “激活”: 鼠标点击标签,但是不松手时。
:focus 是某个标签获得焦点时的样式(比如某个输入框获得焦点)。

  • 后代选择符:后代选择符是CSS的武器库中最有用和最强大的选择符之一。它可以组装自两个或多个用空格分隔的基本类型的选择符(全体、元素、类、伪类和ID选择符),用于选择文档树中匹配该位置的元素。这种选择符也被称为上下文选择符(contextual selector),因为它们是基于元素在文档中的上下文来选择它们。例如:#introduction em { color: yellow; }
    这一规则将把id值为"introduction"的元素中包含的任何em元素的颜色设置为黄色。基于XHTML文档的结构,后代选择符可以很精确地只选择到你想要选择的元素。看着这个更复杂的例子:#introduction.info p*{color: pink; }
    它将选择一个p元素的所有后代元素,而这个p元素是一个 id值为introduction的元素的属于info类的后代元素的后代元素。从这个例子可以看出,后代选择符的作用范围可能会非常窄,仅仅针对满足选择符的选择标准的几个元素。
    -组合选择符:可以把两种或多种类型的选择符组合使用,如一个元素选择符加一个ID选择符,或者一个ID选择符加一个类选择符。这些组合能够进一步增强选择符的具体性,仅仅挑出那些你想应用样式的元素,而将所有其他元素排除在外。p.info { color: blue; }
    它只选择属于info类的段落(p元素) 。属于该类的别种元素和不属于info类的其他段落都将被忽略。
    后代选择符中的组合选择符对元素的选择能达到外科手术般的精确:
    p#introduction a.info:hover { color: silver; }
    上一规则只应用于id值为introduction的段落的后代元素中那些属于info类且处于有定点设备悬浮其上的状态的链接(a 元素) 。
  • 分组选择符:可以把几个选择符聚集起来作为一条规则的组成部分,以便同一套样式声明集能够应用到许多元素上,这可以避免对这些选择符重复同一套样式声明。规则中的各个选择符之间用逗号分隔:p, h1, h2 { color: blue; }将同样的颜色值应用到 p、h1和h2元素的每一个实例。p#intreduction em, a.info:hover, h2.info ( color: gold; }选择的是id值为introduction的段落的后代中的所有em元素、属于info类且处于有定点设备悬浮其上的状态的所有链接,以及属于info类的所有h2元素(二级标题)(记住,一个类中可以包含不同类型的元素) 。
    分组选择符和组合选择符是保证样式表的简洁性和可管理性的有力手段。
  • 高级选择符:在CSS1之后,新的版本陆续出现,包括CSS2.1和CSS3。对CSS规范的这些修订引入了一些令人兴奋的新型选择符。
    ①属性选择符(attribute selector)以具有特定属性甚至是具有其值为指定值的特定属性的元素为目标。
    ②伪元素选择符(pseudo element selector)的目标并不明确存在于标记代码中,而是隐含于其结构之中。如段落的首行,或者紧随一个元素之后的另一个元素。
    ③子选择符(child selector)选择一个元素的子元素,但不选择其他后代元素。
    ④毗邻同胞选择符(adjacent sibling selector)的目标是一个元素的同胞元素中紧随其后的那个。

15、具体性与层叠
各种选择符都分配有一个确定的具体性级别,用于度量它将会影响到的XHTML元素的可能数目。看看下面两条CSS规则,其中一条有一个元素选择符,而另一条有一个类选择符:

h2 ( color: red; }
.title ( color: blue; }

再看看下面的XHTML代码片段,它有一个属于title类的h2元素:

Specificity and the Cascade<∕h2>
第1条规则选择所有h2元素,第2条规则选择所有属于title类的元素。因为所示元素同时满足这两条选择标准,所以导致了两条CSS规则之间的冲突。图形化浏览器必须在两条规则中选择听从其中一条,以确定标题最终的颜色。在CSS中,比较具体的选择符会胜过较不具体的选择符。 因为类选择符比元素选择符更具体,第2条规则有更高的具体性,所以标题将被呈现为蓝色。

现代的Web浏览器按照一套复杂的方案来计算选择符的具体性,只要记住下列几条规则,你很少需要去计算选择符的具体性数值:
□ 全体选择符完全不具备具体性。
□ 元素选择符比全体选择符更具体。
□ 类或伪类选择符比元素选择符更具体。
□ ID选择符比类和伪类选择符更具体。
□ 内联的style属性中声明的CSS属性具有最高的具体性。

组合选择符和后代选择符中的具体性可以被累加。每一种基本选择符类型都有一个与众不同的具体性方面的权重。一个具有两个类的选择符比具有一个类的选择符更具体,一个具有一个ID的选择符比一个具有两个类的选择符更具体,如此等等。计算具体性的算法的设计保证了不可能发生一大批较不具体的选择符压过一个较具体的选择符这样的事。无论多少元素选择符都不可能比一个类选择符更具体,无论多少类选择符都不可能比一个 ID选择符更具体。即使你用上百个元素选择符拼凑出一个复杂的选择符来,另一条只有一个ID选择符的规则都将盖过它。

理解了具体性,你就能构造精确地选择目标元素的CSS规则。

如果有两个选择符以同一个元素为目标,并且它们具有相同的具体性, 那会有
什么结果。例如:

.info h2 ( color: purple; }
h2.title { color: orange; }

如果有一个h2元素属于title类,并且它还是另一个属于info类的元素的后代,那么这两条规则都可以用于这个h2元素。

假定多个选择符具有相同的具体性,在此情况下,由于浏览器会按遇到样式声明的次序应用它们,所以后面的声明会盖过前面的声明。无论后一个声明出现在同一个规则中、出现在同一个样式表中另一个位置靠后的规则中,还是出现于在前一个声明所在的样式表的后面下载的另一个样式表中,结果都一样。
CSS的名字就来自它的这种特性,多个样式表彼此层叠(cascade),叠加出浏览器中最终的表现结果。前面的例子中的那个h2元素将呈现为橙色,因为第2条规则将盖过第1条。

下面是另一个例子:p { color: black; color: green; }这条规则包含两个样式声明;但是段落将会被呈现为绿色,因为绿色的前景色声明在层叠顺序中后出现。

具体性和层叠的这种有时会很复杂的相互作用一开始可能会让人觉得CSS难以驾驭,但是一旦你理解了基本规则,它就变成了一种习性。

16、将样式表附加到文档
为了用CSS控制网页的样式,需要把样式表连接到文档。当图形化浏览器下载XHTML文档并进行解析时,会自动寻找指示它如何呈现各种元素的CSS规则。在文档中加入样式表有几种方法,它们各有其优缺点。

  • 内联样式:可以在标记代码中每个元素可选的style属性中加入CSS样式声明。内联的样式并不作为规则构造,而且因为属性和值被直接附加到相应元素,所以也不存在选择符,内联样式具有最高的具体性 ,因为它只应用于一个元素 。
<h2 style="color:red;">Good eats for hungry geeks<∕h2>
<p style="color: gray;">Our fresh pizzas, hearty pasta dishes,and
succulent desserts are sure to please. And don't forget about our
daily chalkboard specials!<∕p>

然而你应该避免使用内联样式。它们把表现性因素与标记代码混在一起,因而失去了使用CSS的主要
优点之一。它们还有高度的冗余性,因为你不得不反复声明同样的样式属性以实现一 致的表现结果。要是将来你想修改网站,例如,把所有标题从红色改为蓝色,你得在每一个文档中找到每一个标题并加以修改。对于一个复杂的大型网站来说,这是一项令人望而却步的任务。

不过,内联样式在极少数情况下也许是一种有效的手段,但这些情况非常罕见,应该首先考虑其他解
决方案,把内联样式视为在其他方案都不可行的情况下才使用的最后一招。

  • 嵌入式样式表:可以把样式规则嵌入到文档的head元素内部,这种样式规则只在包含它们的文档中起作用。 嵌入式样式表(有时也叫内部样式表(internal style sheet))包含在style元素中。
<!DOCTYPE html PUBLIC "-∕∕W3C∕∕DTD XHTML 1.0 Strict∕∕EN" "http:∕∕www.w3.org∕TR∕xhtmll∕DTD∕×htmll-strict.dtd">
<html ×mlns≡"http:∕∕www.w3.org/1999/xhtml" lang="en", ×ml:lang="en">
  <head>
    <title>Spaghetti and Cruft:Our Menu<∕title>
    <style type="text∕css">
      h2{color: red;}
      p{color: gray;}
    <∕style>
  <∕head>
  <body>
    <h2>Good eats for hungry geeks<∕h2>
    <p>0ur fresh pizzasi hearty pasta dishes, and succulent  desserts are sure to please. And  don't forget about our daily chalkboard specials!<∕p>
  <∕body>
<∕html>

在文档的head部分嵌入样式表在一定程度上实现了表现性因素与结构化内容的分离,而且这些规则将应用于整个文档。但是,如果打算一次把样式应用到多个页面,这就不是一种有效的方法了。 网站中其他
文档也得有自己的嵌入式样式表,因此以后再修改网站的表现形式时,将需要修改其中的每一个文档。

  • 外部样式表
    最好的选择是:把所有CSS规则都放到独立的外部样式表中,然后把外部样式表连接到文档。外部样式表是纯文本文件,你可以使用创建XHJML文档时所用的文本编辑器来编辑它,保存时指定其文件扩展名为".css∖这种方法把表现性因素与内容和结构完全分开——它们甚至不存放在同一个文件中。一个外部样式表可以被链接和关联到任意数目的XHTML文档, 这使整个网站的视觉性设计可以用一个核心文件来加以控制。对这个文件的修改将传播到与它连接的每一个网页。这种设计网站的方法最具灵活性和可维
    护性,它充分发挥了 CSS 的真实能力。

XHTML文档通过head中的link元素来链接外部样式表。

<!DOCTYPE html PUBLIC "-∕∕W3C∕∕DTD XHTML 1.O Strict∕∕EN",http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
" lang="en" xml:lang="en">
  
    Spaghetti and Cruft : Our Menu<∕title>
    <link rel="</span>stylesheet<span class="token string">" type="</span>text∕css<span class="token string">" href≡"</span>styles.css"∕<span class="token operator">></span>
  <span class="token operator"><</span>∕head<span class="token operator">></span>
  <span class="token operator"><</span>body<span class="token operator">></span>
    <span class="token operator"><</span>h2<span class="token operator">></span>Good eats <span class="token keyword">for</span> hungry geeks<span class="token operator"><</span>∕h2<span class="token operator">></span>
    <span class="token operator"><</span>p<span class="token operator">></span>0ur fresh pizzas, hearty pasta dishes, and succulent desserts are sure to please. And don't forget about our daily chalkboard specials<span class="token operator">!</span><span class="token operator"><</span>∕p<span class="token operator">></span>
  <span class="token operator"><</span>∕body<span class="token operator">></span>
<span class="token operator"><</span>∕html<span class="token operator">></span>
</code></pre> 
  <p>当图形化浏览器下载并开始处理文档的时候,将按链接的指示获取并处理外部样式表,然后自动按照<br> 其中的规则呈现页面。外部样式表只下载一次,然后由浏览器缓存起来,用于后面的页面。这使XHTML文档变得更加轻便,提升了整个网站的速度。</p> 
  <p>17、层叠顺序<br> 一个文档可以链接多个不同的CSS文件,每个样式表在文档的head中都有一个对应的link元素。根据网站的复杂程度,你也许会把适用于整个网站的普通规则放到一个样式表中,让网站某个部分中的页面除了这个样式表之外再链接到另一个定义专用于这些页面的规则的样式表。你也可能更喜欢按样式的用途来拆分样式表,例如,用一个样式表定义颜色和背景,另一个样式表定义页面布局。</p> 
  <p>内联、嵌入和外部样式表这3种方法可以结合使用,但不值得提倡。如果网站中只有一个页面需要一些额外的规则,可以选择仅在这个文档中加入一个嵌入式样式表。 在某些很少见的场会, 你也许想挑一个元素予以特别对待,并为其添加内联样式。在几乎所有情况下,外部样式表都是最佳方案:它们消除了表现性的标记代码,提升了网站的性能,而且更容易维护。</p> 
  <p>有这么多来自不同来源的CSS规则,不可避免地会发生一些重叠。具体性机制能够解决部分问题:较具体的选择符胜过一般性的选择符。然而仅有具体性机制还不足以解决图形化浏览器在呈现网页时可能会遇到的所有样式冲突。在具体性机制束手无策时,就需要层叠顺序(cascade order)机制插手来摆平问题了。</p> 
  <p>CSS规则按其出现的先后顺序被应用到内容上:后面的规则盖过前面的。各个样式表的下载也有特定的顺序。对于外部样式表,其顺序取决于其link元素在文档中出现的顺序。后链接的样式表中的规则盖过先链接的样式表中的规则。嵌入到文档的style元素中的规则在所有外部样式表之后处理。如果文档中嵌入了多个样式表(各位于其style元素中) ,则后面嵌入的样式表盖过前面的。内联到元素的style属性中的样式声明的应用顺序更在嵌入式样式表之后。</p> 
  <p>除作者样式表(author style sheet)之外,每种现代图形化Web浏览器都有其用以定义各种元素的默认外观的内置样式表。如果浏览网页时不使用任何作者提供的CSS样式,那么所看到的就是用浏览器样式表(browser style sheet)呈现的结果。浏览器样式表在层叠顺序中最先出现,因此所有作者提供的样式都将盖过这些默认样式。让事情变得更复杂的是,许多Web浏览器允许最终用户附加自己的自定义样式表,即用户样式表(user style sheet) 。它在层叠顺序中第2个出现, 因此将盖过浏览器的默认样式,但不能盖过作者的样式。</p> 
  <p>各种样式来源的层叠顺序可总结如下:<br> (1) 浏览器样式表。<br> (2) 用户样式表。<br> (3) 外部作者样式表(按其被链接的顺序) 。<br> (4) 嵌入式作者样式表(按其出现的顺序) 。<br> (5) 内联作者样式。<br> 层叠机制也适用于每个样式表内部,最靠近内容的样式获胜。最后声明的值就是呈现内容时所应用的值。</p> 
  <p>18、 !important<br> 在某些非常罕见的情况下,具体性机制和层叠机制都不足以保证想要的值能被应用,此时可以用特殊关键字! important (连同前面的感叹号) 强迫浏览器给予这个值高于其他所有值的地位。 这是一个强大而又危险的工具,只宜用作解决在你的控制之外的样式冲突的最后手段(例如,当你不得不与使用了你无法直接修改的内联样式的第3方标记代码打交道时) 。<br> ! important指示必须出现在样式属性值之后,在分号之前。如下所示:<br> <code>h1 ( color: red ! important; }</code><br> 用 ! important声明的属性值,无论其在层叠顺序中的位置如何以及其选择符的具体性如何, 都会被应用到所呈现的内容,除非有另一个也使用! important声明的值与它冲突。在后一种情况下,具体性和层叠机制又将发挥作用。有一个重要的例外应该注意:用户样式表中的! important值总是优先使用,甚至会盖过作者样式表中的! important 值。这种机制把最终权力交给用户。</p> 
  <p>19、编排 CSS 的格式<br> 外部样式表与XHTML文档一样都是纯文本。只要遵守基本的语法,你可以随意编排 CSS文档的格式。</p> 
  <p>在CSS中额外的空格和回车会被忽略。浏览器不在乎纯文本看起来是个什么样子,只在乎它在技术上是否是合式的。在编排CSS的格式这个问题上,最重要的因素是你的个人偏好。 规则有两种常见的书写格式:舒展型(extended)和紧凑型(compacted)。</p> 
  <p>舒展格式把规则的选择符和样式声明写在不同的行上,许多作者觉得这种格式更易读,也更易处理。这种格式能让人一眼就看清每个属性在哪里开始和结束,其缺点在于编辑和阅读长长的复杂样式表时需要上下滚动。</p> 
  <pre><code class="prism language-bash">hl, h2, h3<span class="token punctuation">{</span>
 color: red<span class="token punctuation">;</span>
 margin-bottom:.5em<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

hl <span class="token punctuation">{</span>
 font-size: 150%;
<span class="token punctuation">}</span>

h2 <span class="token punctuation">{</span>
 font-size: 130%;
<span class="token punctuation">}</span>

h3 <span class="token punctuation">{</span>
 font-size<span class="token punctuation">;</span> 120%<span class="token punctuation">;</span>
 border-bottom: lpx solid gray<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre> 
  <p>紧凑格式把每条规则压缩到一行上。这可以减少在文本编辑器中所需的纵向滚动,但是当规则在一行上包含了大量样式声明时却又会产生横向滚动的需要。下述代码展示了同一批规则, 它们各被压缩为一行,多余的空格也被删除了。</p> 
  <pre><code class="prism language-bash">hl,h2,h3<span class="token punctuation">{</span>color:red<span class="token punctuation">;</span>margin-bottom:.5em<span class="token punctuation">;</span><span class="token punctuation">}</span>
hl<span class="token punctuation">{</span>font-size:150%<span class="token punctuation">;</span><span class="token punctuation">}</span>
h2<span class="token punctuation">{</span>font-size:130%<span class="token punctuation">;</span><span class="token punctuation">}</span>
h3<span class="token punctuation">(</span>font-size:120%<span class="token punctuation">;</span>border-bottom:1px solid gray<span class="token punctuation">;</span><span class="token punctuation">}</span> 
</code></pre> 
  <p>紧凑格式的另一个好处是可以稍微降低文件的大小。空格、制表符和回车符都作为字符存储在电子文件中,每多一个字符就会在客户必须下载的文件的总体大小上增加1个字节。由于所有那些多余空白符的影响,一个长长的样式表采用舒展格式时其文件可能会比采用紧凑格式时大许多。为了兼顾最大可读性和最小文件尺寸这两个目标,有些作者在编写样式表时使用舒展格式,然后在把它移到运营中的Web服务器上时用自动化处理的方法把所有CSS代码压缩为一行。</p> 
  <p>在紧凑格式的规则中,在样式声明和值之间添加一点空格,将规则的行扩宽一些,这样做至少能让其更易读一点。由于找不到一个更好的词,我们姑且把这种格式称为半紧凑型(semicompacted)。</p> 
  <pre><code class="prism language-bash">h1, h2, h3 <span class="token punctuation">{</span> color: red<span class="token punctuation">;</span> margin-bottom: .5em<span class="token punctuation">;</span> <span class="token punctuation">}</span>
hl <span class="token punctuation">{</span> font-size: 150%; <span class="token punctuation">}</span>
h2 <span class="token punctuation">{</span> font-size: 130%; <span class="token punctuation">}</span>
h3 <span class="token punctuation">(</span> font-size: 120%<span class="token punctuation">;</span> border-bottom: ip× solid gray<span class="token punctuation">;</span> <span class="token punctuation">}</span>
</code></pre> 
  <p>最终选择取决于你,你可以用自己喜欢的格式创作自己的样式表。</p> 
  <p>20、CSS 注释<br> 为样式表添加注释的理由与在XHTML中使用注释的理由相同:进行注解、向其他Web开发人员传达指示、测试期间暂时隐藏或禁用样式表的一部分。CSS中的注释始“/<em>”,终于"</em>/"气 浏览器不会解析位于这些标记符号之间的任何内容。与XHTML中的注释一样,CSS注释可以跨越多行。</p> 
  <pre><code class="prism language-bash">∕* These base styles apply to all heading levels. */
h1, h2, h3, h4, h5, h6 <span class="token punctuation">{</span> color: red<span class="token punctuation">;</span> margin-bottom: .5em<span class="token punctuation">;</span> <span class="token punctuation">}</span>
/* Adjust the size of each∙ */
hl <span class="token punctuation">{</span> font-size: 150%<span class="token punctuation">;</span> <span class="token punctuation">}</span>
h2 <span class="token punctuation">{</span> font-size: 130%<span class="token punctuation">;</span> <span class="token punctuation">}</span>
h3 <span class="token punctuation">(</span> font-size: 120%<span class="token punctuation">;</span> <span class="token punctuation">}</span>
/* Temporarily hiding these rules
h4 <span class="token punctuation">{</span> font-size: 100%<span class="token punctuation">;</span> <span class="token punctuation">}</span>
h5 <span class="token punctuation">{</span> font-size: 90%<span class="token punctuation">;</span> <span class="token punctuation">}</span>
h6 <span class="token punctuation">{</span> font-size: 80%<span class="token punctuation">;</span> <span class="token punctuation">}</span>
End hiding *∕
</code></pre> 
  <p>21、小结:XHTML是对HTML的一种更严格的重定义,二者的区别表现在少数几条规则 上<br> <a href="http://img.e-com-net.com/image/info8/4d37c081965f436b9f2b866282ba128b.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/4d37c081965f436b9f2b866282ba128b.jpg" alt="附图" width="650" height="96"></a></p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1295201000981864448"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(深入浅出HTML,第2章:XHTML和CSS)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1835514462770130944.htm"
                           title="斤斤计较的婚姻到底有多难?" target="_blank">斤斤计较的婚姻到底有多难?</a>
                        <span class="text-muted">白心之岂必有为</span>

                        <div>很多人私聊我会问到在哪个人群当中斤斤计较的人最多?我都会回答他,一般婚姻出现问题的斤斤计较的人士会非常多,以我多年经验,在婚姻落的一塌糊涂的人当中,斤斤计较的人数占比在20~30%以上,也就是说10个婚姻出现问题的斤斤计较的人有2-3个有多不减。在婚姻出问题当中,有大量的心理不平衡的、尖酸刻薄的怨妇。在婚姻中仅斤斤计较有两种类型:第一种是物质上的,另一种是精神上的。在物质与精神上抠门已经严重的影响</div>
                    </li>
                    <li><a href="/article/1835514464028422144.htm"
                           title="情绪觉察日记第37天" target="_blank">情绪觉察日记第37天</a>
                        <span class="text-muted">露露_e800</span>

                        <div>今天是家庭关系规划师的第二阶最后一天,慧萍老师帮我做了个案,帮我处理了埋在心底好多年的一份恐惧,并给了我深深的力量!这几天出来学习,爸妈过来婆家帮我带小孩,妈妈出于爱帮我收拾东西,并跟我先生和婆婆产生矛盾,妈妈觉得他们没有照顾好我…。今晚回家见到妈妈,我很欣赏她并赞扬她,妈妈说今晚要跟我睡我说好,当我们俩躺在床上准备睡觉的时候,我握着妈妈的手对她说:妈妈这几天辛苦你了,你看你多利害把我们的家收拾得</div>
                    </li>
                    <li><a href="/article/1835513699826233344.htm"
                           title="android系统selinux中添加新属性property" target="_blank">android系统selinux中添加新属性property</a>
                        <span class="text-muted">辉色投像</span>

                        <div>1.定位/android/system/sepolicy/private/property_contexts声明属性开头:persist.charge声明属性类型:u:object_r:system_prop:s0图12.定位到android/system/sepolicy/public/domain.te删除neverallow{domain-init}default_prop:property</div>
                    </li>
                    <li><a href="/article/1835513571501502464.htm"
                           title="2020-01-25" target="_blank">2020-01-25</a>
                        <span class="text-muted">晴岚85</span>

                        <div>郑海燕坚持分享590天2020.1.24在生活中只存在两个问题。一个问题是:你知道想要达成的目标是什么,但却不知道如何才能达成;另一个问题是:你不知道你的目标是什么。前一个是行动的问题,后一个是结果的问题。通过制定具体的下一步行动,可以解决不知道如何开始行动的问题。而通过去想象结果,对结果做预估,可以解决找不着目标的问题。对于所有吸引我们注意力,想要完成的任务,你可以先想象一下,预期的结果究竟是什</div>
                    </li>
                    <li><a href="/article/1835512809883004928.htm"
                           title="10月|愿你的青春不负梦想-读书笔记-01" target="_blank">10月|愿你的青春不负梦想-读书笔记-01</a>
                        <span class="text-muted">Tracy的小书斋</span>

                        <div>本书的作者是俞敏洪,大家都很熟悉他了吧。俞敏洪老师是我行业的领头羊吧,也是我事业上的偶像。本日摘录他书中第一章中的金句:『一个人如果什么目标都没有,就会浑浑噩噩,感觉生命中缺少能量。能给我们能量的,是对未来的期待。第一件事,我始终为了进步而努力。与其追寻全世界的骏马,不如种植丰美的草原,到时骏马自然会来。第二件事,我始终有阶段性的目标。什么东西能给我能量?答案是对未来的期待。』读到这里的时候,我便</div>
                    </li>
                    <li><a href="/article/1835512542735200256.htm"
                           title="C语言宏函数" target="_blank">C语言宏函数</a>
                        <span class="text-muted">南林yan</span>
<a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80/1.htm">C语言</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a>
                        <div>一、什么是宏函数?通过宏定义的函数是宏函数。如下,编译器在预处理阶段会将Add(x,y)替换为((x)*(y))#defineAdd(x,y)((x)*(y))#defineAdd(x,y)((x)*(y))intmain(){inta=10;intb=20;intd=10;intc=Add(a+d,b)*2;cout<<c<<endl;//800return0;}二、为什么要使用宏函数使用宏函数</div>
                    </li>
                    <li><a href="/article/1835512178023690240.htm"
                           title="谢谢你们,爱你们!" target="_blank">谢谢你们,爱你们!</a>
                        <span class="text-muted">鹿游儿</span>

                        <div>昨天家人去泡温泉,二个孩子也带着去,出发前一晚,匆匆下班,赶回家和孩子一起收拾。饭后,我拿出笔和本子(上次去澳门时做手帐的本子)写下了1\2\3\4\5\6\7\8\9,让后让小壹去思考,带什么出发去旅游呢?她在对应的数字旁边画上了,泳衣、泳圈、肖恩、内衣内裤、tapuy、拖鞋……画完后,就让她自己对着这个本子,将要带的,一一带上,没想到这次带的书还是这本《便便工厂》(晚上姑婆发照片过来,妹妹累得</div>
                    </li>
                    <li><a href="/article/1835511911769272320.htm"
                           title="C语言如何定义宏函数?" target="_blank">C语言如何定义宏函数?</a>
                        <span class="text-muted">小九格物</span>
<a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a>
                        <div>在C语言中,宏函数是通过预处理器定义的,它在编译之前替换代码中的宏调用。宏函数可以模拟函数的行为,但它们不是真正的函数,因为它们在编译时不会进行类型检查,也不会分配存储空间。宏函数的定义通常使用#define指令,后面跟着宏的名称和参数列表,以及宏展开后的代码。宏函数的定义方式:1.基本宏函数:这是最简单的宏函数形式,它直接定义一个表达式。#defineSQUARE(x)((x)*(x))2.带参</div>
                    </li>
                    <li><a href="/article/1835511163450912768.htm"
                           title="2021年12月19日,春蕾教育集团团建活动感受——黄晓丹" target="_blank">2021年12月19日,春蕾教育集团团建活动感受——黄晓丹</a>
                        <span class="text-muted">黄错错加油</span>

                        <div>感受:1.从陌生到熟悉的过程。游戏环节让我们在轻松的氛围中得到了锻炼,也增长了不少知识。2.游戏过程中,我们贡献的是个人力量,展现的是团队的力量。它磨合的往往不止是工作的熟悉,更是观念上契合度的贴近。3.这和工作是一样的道理。在各自的岗位上,每个人摆正自己的位置、各司其职充分发挥才能,并团结一致劲往一处使,才能实现最大的成功。新知:1.团队精神需要不断地创新。过去,人们把创新看作是冒风险,现在人们</div>
                    </li>
                    <li><a href="/article/1835510025561403392.htm"
                           title="《投行人生》读书笔记" target="_blank">《投行人生》读书笔记</a>
                        <span class="text-muted">小蘑菇的树洞</span>

                        <div>《投行人生》----作者詹姆斯-A-朗德摩根斯坦利副主席40年的职业洞见-很短小精悍的篇幅,比较适合初入职场的新人。第一部分成功的职业生涯需要规划1.情商归为适应能力分享与协作同理心适应能力,更多的是自我意识,你有能力识别自己的情并分辨这些情绪如何影响你的思想和行为。2.对于初入职场的人的建议,细节,截止日期和数据很重要截止日期,一种有效的方法是请老板为你所有的任务进行优先级排序。和老板喝咖啡的好</div>
                    </li>
                    <li><a href="/article/1835509898507546624.htm"
                           title="《策划经理回忆录之二》" target="_blank">《策划经理回忆录之二》</a>
                        <span class="text-muted">路基雅虎</span>

                        <div>话说三年变六年,飘了,飘了……眨眼,2013年5月,老吴回到了他的家乡——油城从新开启他的工作幻想症生涯。很庆幸,这是一家很有追求,同时敢于尝试的,且实力不容低调的新星房企——金源置业(前身泰源置业)更值得庆幸的是第一个盘就是油城十路的标杆之一:金源盛世。2013年5月,到2015年11月,两年的陪伴,迎来了一场大爆发。2000个筹,5万/筹,直接回笼1个亿!!!这……让我开始认真审视这座看似五线</div>
                    </li>
                    <li><a href="/article/1835509897106649088.htm"
                           title="Long类型前后端数据不一致" target="_blank">Long类型前后端数据不一致</a>
                        <span class="text-muted">igotyback</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>响应给前端的数据浏览器控制台中response中看到的Long类型的数据是正常的到前端数据不一致前后端数据类型不匹配是一个常见问题,尤其是当后端使用Java的Long类型(64位)与前端JavaScript的Number类型(最大安全整数为2^53-1,即16位)进行数据交互时,很容易出现精度丢失的问题。这是因为JavaScript中的Number类型无法安全地表示超过16位的整数。为了解决这个问</div>
                    </li>
                    <li><a href="/article/1835509770287673344.htm"
                           title="swagger访问路径" target="_blank">swagger访问路径</a>
                        <span class="text-muted">igotyback</span>
<a class="tag" taget="_blank" href="/search/swagger/1.htm">swagger</a>
                        <div>Swagger2.x版本访问地址:http://{ip}:{port}/{context-path}/swagger-ui.html{ip}是你的服务器IP地址。{port}是你的应用服务端口,通常为8080。{context-path}是你的应用上下文路径,如果应用部署在根路径下,则为空。Swagger3.x版本对于Swagger3.x版本(也称为OpenAPI3)访问地址:http://{ip</div>
                    </li>
                    <li><a href="/article/1835509390879322112.htm"
                           title="扫地机类清洁产品之直流无刷电机控制" target="_blank">扫地机类清洁产品之直流无刷电机控制</a>
                        <span class="text-muted">悟空胆好小</span>
<a class="tag" taget="_blank" href="/search/%E6%B8%85%E6%B4%81%E6%9C%8D%E5%8A%A1%E6%9C%BA%E5%99%A8%E4%BA%BA/1.htm">清洁服务机器人</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>扫地机类清洁产品之直流无刷电机控制1.1前言扫地机产品有很多的电机控制,滚刷电机1个,边刷电机1-2个,清水泵电机,风机一个,部分中高端产品支持抹布功能,也就是存在抹布盘电机,还有追觅科沃斯石头等边刷抬升电机,滚刷抬升电机等的,这些电机有直流有刷电机,直接无刷电机,步进电机,电磁阀,挪动泵等不同类型。电机的原理,驱动控制方式也不行。接下来一段时间的几个文章会作个专题分析分享。直流有刷电机会自动持续</div>
                    </li>
                    <li><a href="/article/1835509391361667072.htm"
                           title="Linux下QT开发的动态库界面弹出操作(SDL2)" target="_blank">Linux下QT开发的动态库界面弹出操作(SDL2)</a>
                        <span class="text-muted">13jjyao</span>
<a class="tag" taget="_blank" href="/search/QT%E7%B1%BB/1.htm">QT类</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/sdl2/1.htm">sdl2</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>需求:操作系统为linux,开发框架为qt,做成需带界面的qt动态库,调用方为java等非qt程序难点:调用方为java等非qt程序,也就是说调用方肯定不带QApplication::exec(),缺少了这个,QTimer等事件和QT创建的窗口将不能弹出(包括opencv也是不能弹出);这与qt调用本身qt库是有本质的区别的思路:1.调用方缺QApplication::exec(),那么我们在接口</div>
                    </li>
                    <li><a href="/article/1835509266627260416.htm"
                           title="绘本讲师训练营【24期】8/21阅读原创《独生小孩》" target="_blank">绘本讲师训练营【24期】8/21阅读原创《独生小孩》</a>
                        <span class="text-muted">1784e22615e0</span>

                        <div>24016-孟娟《独生小孩》图片发自App今天我想分享一个蛮特别的绘本,讲的是一个特殊的群体,我也是属于这个群体,80后的独生小孩。这是一本中国绘本,作者郭婧,也是一个80厚。全书一百多页,均为铅笔绘制,虽然为黑白色调,但并不显得沉闷。全书没有文字,犹如“默片”,但并不影响读者对该作品的理解,反而显得神秘,梦幻,給读者留下想象的空间。作者在前蝴蝶页这样写到:“我更希望父母和孩子一起分享这本书,使他</div>
                    </li>
                    <li><a href="/article/1835509138126368768.htm"
                           title="30天风格练习-DAY2" target="_blank">30天风格练习-DAY2</a>
                        <span class="text-muted">黄希夷</span>

                        <div>Day2(重义)在一个周日/一周的最后一天,我来到位于市中心/市区繁华地带的一家购物中心/商场,中心内人很多/熙熙攘攘。我注意到/看见一个独行/孤身一人的年轻女孩/,留着一头引人注目/长过腰际的头发,上身穿一件暗红色/比正红色更深的衣服/穿在身体上的东西。走下扶梯的时候,她摔倒了/跌向地面,在她正要站起来/让身体离开地面的时候,过长/超过一般人长度的头发被支撑身体/躯干的手掌压/按在下面,她赶紧用</div>
                    </li>
                    <li><a href="/article/1835508761310097408.htm"
                           title="店群合一模式下的社区团购新发展——结合链动 2+1 模式、AI 智能名片与 S2B2C 商城小程序源码" target="_blank">店群合一模式下的社区团购新发展——结合链动 2+1 模式、AI 智能名片与 S2B2C 商城小程序源码</a>
                        <span class="text-muted">说私域</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">小程序</a>
                        <div>摘要:本文探讨了店群合一的社区团购平台在当今商业环境中的重要性和优势。通过分析店群合一模式如何将互联网社群与线下终端紧密结合,阐述了链动2+1模式、AI智能名片和S2B2C商城小程序源码在这一模式中的应用价值。这些创新元素的结合为社区团购带来了新的机遇,提升了用户信任感、拓展了营销渠道,并实现了线上线下的完美融合。一、引言随着互联网技术的不断发展,社区团购作为一种新兴的商业模式,在满足消费者日常需</div>
                    </li>
                    <li><a href="/article/1835508630959517696.htm"
                           title="向内而求" target="_blank">向内而求</a>
                        <span class="text-muted">陈陈_19b4</span>

                        <div>10月27日,阴。阅读书目:《次第花开》。作者:希阿荣博堪布,是当今藏传佛家宁玛派最伟大的上师法王,如意宝晋美彭措仁波切颇具影响力的弟子之一。多年以来,赴海内外各地弘扬佛法,以正式授课、现场开示、发表文章等多种方法指导佛学弟子修行佛法。代表作《寂静之道》、《生命这出戏》、《透过佛法看世界》自出版以来一直是佛教类书籍中的畅销书。图片发自App金句:1.佛陀说,一切痛苦的根源在于我们长期以来对自身及外</div>
                    </li>
                    <li><a href="/article/1835508376604340224.htm"
                           title="2021-08-26" target="_blank">2021-08-26</a>
                        <span class="text-muted">影幽</span>

                        <div>在生活中,女人与男人的感悟往往有所不同。人生最大的舞台就是生活,大幕随时都可能拉开,关键是你愿不愿意表演都无法躲避。在生活中,遇事不要急躁,不要急于下结论,尤其生气时不要做决断,要学会换位思考,大事化小小事化了,把复杂的事情尽量简单处理,千万不要把简单的事情复杂化。永远不要扭曲,别人善意,无药可救。昨天是张过期的支票,明天是张信用卡,只有今天才是现金,要善加利用!执着的攀登者不必去与别人比较自己的</div>
                    </li>
                    <li><a href="/article/1835508130608410624.htm"
                           title="html 中如何使用 uniapp 的部分方法" target="_blank">html 中如何使用 uniapp 的部分方法</a>
                        <span class="text-muted">某公司摸鱼前端</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>示例代码:Documentconsole.log(window);效果展示:好了,现在就可以uni.使用相关的方法了</div>
                    </li>
                    <li><a href="/article/1835508131032035328.htm"
                           title="ArcGIS栅格计算器常见公式(赋值、0和空值的转换、补充栅格空值)" target="_blank">ArcGIS栅格计算器常见公式(赋值、0和空值的转换、补充栅格空值)</a>
                        <span class="text-muted">研学随笔</span>
<a class="tag" taget="_blank" href="/search/arcgis/1.htm">arcgis</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a>
                        <div>我们在使用ArcGIS时通常经常用到栅格计算器,今天主要给大家介绍我日常中经常用到的几个公式,供大家参考学习。将特定值(-9999)赋值为0,例如-9999.Con("raster"==-9999,0,"raster")2.给空值赋予特定的值(如0)Con(IsNull("raster"),0,"raster")3.将特定的栅格值(如1)赋值为空值,其他保留原值SetNull("raster"==</div>
                    </li>
                    <li><a href="/article/1835508131489214464.htm"
                           title="高级编程--XML+socket练习题" target="_blank">高级编程--XML+socket练习题</a>
                        <span class="text-muted">masa010</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>1.北京华北2114.8万人上海华东2,500万人广州华南1292.68万人成都华西1417万人(1)使用dom4j将信息存入xml中(2)读取信息,并打印控制台(3)添加一个city节点与子节点(4)使用socketTCP协议编写服务端与客户端,客户端输入城市ID,服务器响应相应城市信息(5)使用socketTCP协议编写服务端与客户端,客户端要求用户输入city对象,服务端接收并使用dom4j</div>
                    </li>
                    <li><a href="/article/1835508122383380480.htm"
                           title="抖音乐买买怎么加入赚钱?赚钱方法是什么" target="_blank">抖音乐买买怎么加入赚钱?赚钱方法是什么</a>
                        <span class="text-muted">测评君高省</span>

                        <div>你会在抖音买东西吗?如果会,那么一定要免费注册一个乐买买,抖音直播间,橱窗,小视频里的小黄车买东西都可以返佣金!省下来都是自己的,分享还可以赚钱乐买买是好省旗下的抖音返佣平台,乐买买分析社交电商的价值,乐买买属于今年难得的副业项目风口机会,2019年错过做好省的搞钱的黄金时期,那么2022年千万别再错过乐买买至于我为何转到高省呢?当然是高省APP佣金更高,模式更好,终端用户不流失。【高省】是一个自</div>
                    </li>
                    <li><a href="/article/1835507866878963712.htm"
                           title="开心" target="_blank">开心</a>
                        <span class="text-muted">蒋泳频</span>

                        <div>从无比抗拒来上课到接受,感动,收获~看着波哥成长,晶晶幸福笑容满面。感觉自己做的事情很有意义,很开心!还有3个感召目标就是还有三个有缘人,哈哈。明天感召去明日计划:8:30-11:00小公益11:00-21点上班,感召图片发自App图片发自App图片发自App</div>
                    </li>
                    <li><a href="/article/1835507739820912640.htm"
                           title="2018-07-23-催眠日作业-#不一样的31天#-66小鹿" target="_blank">2018-07-23-催眠日作业-#不一样的31天#-66小鹿</a>
                        <span class="text-muted">小鹿_33</span>

                        <div>预言日:人总是在逃避命运的路上,与之不期而遇。心理学上有个著名的名词,叫做自证预言;经济学上也有一个很著名的定律叫做,墨菲定律;在灵修派上,还有一个很著名的法则,叫做吸引力法则。这3个领域的词,虽然看起来不太一样,但是他们都在告诉人们一个现象:你越担心什么,就越有可能会发生什么。同样的道理,你越想得到什么,就应该要积极地去创造什么。无论是自证预言,墨菲定律还是吸引力法则,对人都有正反2个维度的影响</div>
                    </li>
                    <li><a href="/article/1835507626276909056.htm"
                           title="水平垂直居中的几种方法(总结)" target="_blank">水平垂直居中的几种方法(总结)</a>
                        <span class="text-muted">LJ小番茄</span>
<a class="tag" taget="_blank" href="/search/CSS_%E7%8E%84%E5%AD%A6%E8%AF%AD%E8%A8%80/1.htm">CSS_玄学语言</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/css3/1.htm">css3</a>
                        <div>1.使用flexbox的justify-content和align-items.parent{display:flex;justify-content:center;/*水平居中*/align-items:center;/*垂直居中*/height:100vh;/*需要指定高度*/}2.使用grid的place-items:center.parent{display:grid;place-item</div>
                    </li>
                    <li><a href="/article/1835507105168191488.htm"
                           title="本周第二次约练" target="_blank">本周第二次约练</a>
                        <span class="text-muted">2cfbdfe28a51</span>

                        <div>中原焦点团队中24初26刘霞2021.12.3约练161次,分享第368天当事人虽然是带着问题来的,但是咨询过程中发现,她是经过自己不断地调整和努力才走到现在的,看到当事人的不容易,找到例外,发现资源,力量感也就随之而来。增强画面感,或者说重温,会给当事人带来更深刻的感受。</div>
                    </li>
                    <li><a href="/article/1835506996258893824.htm"
                           title="回溯 Leetcode 332 重新安排行程" target="_blank">回溯 Leetcode 332 重新安排行程</a>
                        <span class="text-muted">mmaerd</span>
<a class="tag" taget="_blank" href="/search/Leetcode%E5%88%B7%E9%A2%98%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95/1.htm">Leetcode刷题学习记录</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a>
                        <div>重新安排行程Leetcode332学习记录自代码随想录给你一份航线列表tickets,其中tickets[i]=[fromi,toi]表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。所有这些机票都属于一个从JFK(肯尼迪国际机场)出发的先生,所以该行程必须从JFK开始。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。例如,行程[“JFK”,“LGA”]与[“JFK”,“LGB</div>
                    </li>
                    <li><a href="/article/1835506975463534592.htm"
                           title="今日联对0306" target="_blank">今日联对0306</a>
                        <span class="text-muted">诗图佳得</span>

                        <div>自对联:烟销皓月临江浒,水漫金山荡塔裙。一一肖士平2020.3.6.1、试对肖老师联:烟销皓月临江浒,夜笼寒沙梦晚舟。耀哥求正2、试对萧老师联:烟销浩月临江浒,雾散乾坤解汉城。秀霞习作请各位老师校正3、自对联:烟销皓月临江浒,水漫金山荡塔裙。一一肖士平2020.3.6.4、试对肖老师垫场联:烟销皓月临江浒,雾锁寒林缈葉丛。小智求正[抱拳]5、试对肖老师联:烟销皓月临江浒;风卷乱云入峰巅。一一五品6</div>
                    </li>
                                <li><a href="/article/109.htm"
                                       title="统一思想认识" target="_blank">统一思想认识</a>
                                    <span class="text-muted">永夜-极光</span>
<a class="tag" taget="_blank" href="/search/%E6%80%9D%E6%83%B3/1.htm">思想</a>
                                    <div>1.统一思想认识的基础,才能有的放矢 
 原因: 
   总有一种描述事物的方式最贴近本质,最容易让人理解. 
   如何让教育更轻松,在于找到最适合学生的方式. 
         难点在于,如何模拟对方的思维基础选择合适的方式.   &</div>
                                </li>
                                <li><a href="/article/236.htm"
                                       title="Joda Time使用笔记" target="_blank">Joda Time使用笔记</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/joda+time/1.htm">joda time</a>
                                    <div>Joda Time的介绍可以参考这篇文章: 
 
http://www.ibm.com/developerworks/cn/java/j-jodatime.html 
 
工作中也常常用到Joda Time,为了避免每次使用都查API,记录一下常用的用法: 
    
 
   /**
     * DateTime变化(增减)
     */
    @Tes</div>
                                </li>
                                <li><a href="/article/363.htm"
                                       title="FileUtils API" target="_blank">FileUtils API</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/FileUtils/1.htm">FileUtils</a><a class="tag" taget="_blank" href="/search/FileUtils+API/1.htm">FileUtils API</a>
                                    <div>转载请出自出处:http://eksliang.iteye.com/blog/2217374 一、概述 
这是一个Java操作文件的常用库,是Apache对java的IO包的封装,这里面有两个非常核心的类FilenameUtils跟FileUtils,其中FilenameUtils是对文件名操作的封装;FileUtils是文件封装,开发中对文件的操作,几乎都可以在这个框架里面找到。 非常的好用。 </div>
                                </li>
                                <li><a href="/article/490.htm"
                                       title="各种新兴技术" target="_blank">各种新兴技术</a>
                                    <span class="text-muted">不懂事的小屁孩</span>
<a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF/1.htm">技术</a>
                                    <div>1:gradle Gradle 是以 Groovy 语言为基础,面向Java应用为主。基于DSL(领域特定语言)语法的自动化构建工具。 
 
现在构建系统常用到maven工具,现在有更容易上手的gradle, 
搭建java环境:
http://www.ibm.com/developerworks/cn/opensource/os-cn-gradle/ 
搭建android环境:
http://m</div>
                                </li>
                                <li><a href="/article/617.htm"
                                       title="tomcat6的https双向认证" target="_blank">tomcat6的https双向认证</a>
                                    <span class="text-muted">酷的飞上天空</span>
<a class="tag" taget="_blank" href="/search/tomcat6/1.htm">tomcat6</a>
                                    <div>1.生成服务器端证书 
  
keytool -genkey -keyalg RSA -dname "cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn" -alias server -keypass password -keystore server.jks -storepass password -validity 36</div>
                                </li>
                                <li><a href="/article/744.htm"
                                       title="托管虚拟桌面市场势不可挡" target="_blank">托管虚拟桌面市场势不可挡</a>
                                    <span class="text-muted">蓝儿唯美</span>

                                    <div>用户还需要冗余的数据中心,dinCloud的高级副总裁兼首席营销官Ali Din指出。该公司转售一个MSP可以让用户登录并管理和提供服务的用于DaaS的云自动化控制台,提供服务或者MSP也可以自己来控制。 
在某些情况下,MSP会在dinCloud的云服务上进行服务分层,如监控和补丁管理。 
MSP的利润空间将根据其参与的程度而有所不同,Din说。 
“我们有一些合作伙伴负责将我们推荐给客户作为个</div>
                                </li>
                                <li><a href="/article/871.htm"
                                       title="spring学习——xml文件的配置" target="_blank">spring学习——xml文件的配置</a>
                                    <span class="text-muted">a-john</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>在Spring的学习中,对于其xml文件的配置是必不可少的。在Spring的多种装配Bean的方式中,采用XML配置也是最常见的。以下是一个简单的XML配置文件: 
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.or</div>
                                </li>
                                <li><a href="/article/998.htm"
                                       title="HDU 4342 History repeat itself 模拟" target="_blank">HDU 4342 History repeat itself 模拟</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/%E6%A8%A1%E6%8B%9F/1.htm">模拟</a>
                                    <div>来源:http://acm.hdu.edu.cn/showproblem.php?pid=4342 
题意:首先让求第几个非平方数,然后求从1到该数之间的每个sqrt(i)的下取整的和。 
思路:一个简单的模拟题目,但是由于数据范围大,需要用__int64。我们可以首先把平方数筛选出来,假如让求第n个非平方数的话,看n前面有多少个平方数,假设有x个,则第n个非平方数就是n+x。注意两种特殊情况,即</div>
                                </li>
                                <li><a href="/article/1125.htm"
                                       title="java中最常用jar包的用途" target="_blank">java中最常用jar包的用途</a>
                                    <span class="text-muted">asia007</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>java中最常用jar包的用途 
jar包用途axis.jarSOAP引擎包commons-discovery-0.2.jar用来发现、查找和实现可插入式接口,提供一些一般类实例化、单件的生命周期管理的常用方法.jaxrpc.jarAxis运行所需要的组件包saaj.jar创建到端点的点到点连接的方法、创建并处理SOAP消息和附件的方法,以及接收和处理SOAP错误的方法.  w</div>
                                </li>
                                <li><a href="/article/1252.htm"
                                       title="ajax获取Struts框架中的json编码异常和Struts中的主控制器异常的解决办法" target="_blank">ajax获取Struts框架中的json编码异常和Struts中的主控制器异常的解决办法</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/json%E7%BC%96%E7%A0%81%E8%BF%94%E5%9B%9E%E5%BC%82%E5%B8%B8/1.htm">json编码返回异常</a>
                                    <div>一:ajax获取自定义Struts框架中的json编码  出现以下 问题:     
  
1,强制flush输出  json编码打印在首页 
2, 不强制flush js会解析json 打印出来的是错误的jsp页面   却没有跳转到错误页面 
3,  ajax中的dataType的json 改为text 会</div>
                                </li>
                                <li><a href="/article/1379.htm"
                                       title="JUnit使用的设计模式" target="_blank">JUnit使用的设计模式</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/JUnit/1.htm">JUnit</a>
                                    <div>JUnit源代码涉及使用了大量设计模式 
1、模板方法模式(Template Method) 
        定义一个操作中的算法骨架,而将一些步骤延伸到子类中去,使得子类可以不改变一个算法的结构,即可重新定义该算法的某些特定步骤。这里需要复用的是算法的结构,也就是步骤,而步骤的实现可以在子类中完成。 
  </div>
                                </li>
                                <li><a href="/article/1506.htm"
                                       title="Linux常用命令(摘录)" target="_blank">Linux常用命令(摘录)</a>
                                    <span class="text-muted">sunjing</span>
<a class="tag" taget="_blank" href="/search/crond/1.htm">crond</a><a class="tag" taget="_blank" href="/search/chkconfig/1.htm">chkconfig</a>
                                    <div>chkconfig --list   查看linux所有服务 
chkconfig --add servicename 添加linux服务 
netstat -apn | grep 8080  查看端口占用 
env 查看所有环境变量 
echo $JAVA_HOME 查看JAVA_HOME环境变量 
  
安装编译器 
yum install -y gcc</div>
                                </li>
                                <li><a href="/article/1633.htm"
                                       title="【Hadoop一】Hadoop伪集群环境搭建" target="_blank">【Hadoop一】Hadoop伪集群环境搭建</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a>
                                    <div> 结合网上多份文档,不断反复的修正hadoop启动和运行过程中出现的问题,终于把Hadoop2.5.2伪分布式安装起来,跑通了wordcount例子。Hadoop的安装复杂性的体现之一是,Hadoop的安装文档非常多,但是能一个文档走下来的少之又少,尤其是Hadoop不同版本的配置差异非常的大。Hadoop2.5.2于前两天发布,但是它的配置跟2.5.0,2.5.1没有分别。   &nb</div>
                                </li>
                                <li><a href="/article/1760.htm"
                                       title="Anychart图表系列五之事件监听" target="_blank">Anychart图表系列五之事件监听</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/chart/1.htm">chart</a>
                                    <div>创建图表事件监听非常简单:首先是通过addEventListener('监听类型',js监听方法)添加事件监听,然后在js监听方法中定义具体监听逻辑。 
以钻取操作为例,当用户点击图表某一个point的时候弹出point的name和value,代码如下: 
<script>
//创建AnyChart
var chart = new AnyChart();
//添加钻取操作&quo</div>
                                </li>
                                <li><a href="/article/1887.htm"
                                       title="Web前端相关段子" target="_blank">Web前端相关段子</a>
                                    <span class="text-muted">braveCS</span>
<a class="tag" taget="_blank" href="/search/web%E5%89%8D%E7%AB%AF/1.htm">web前端</a>
                                    <div>Web标准:结构、样式和行为分离 
  
使用语义化标签 
0)标签的语义:使用有良好语义的标签,能够很好地实现自我解释,方便搜索引擎理解网页结构,抓取重要内容。去样式后也会根据浏览器的默认样式很好的组织网页内容,具有很好的可读性,从而实现对特殊终端的兼容。 
1)div和span是没有语义的:只是分别用作块级元素和行内元素的区域分隔符。当页面内标签无法满足设计需求时,才会适当添加div</div>
                                </li>
                                <li><a href="/article/2014.htm"
                                       title="编程之美-24点游戏" target="_blank">编程之美-24点游戏</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a>
                                    <div>

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;


public class PointGame {

	/**编程之美 </div>
                                </li>
                                <li><a href="/article/2141.htm"
                                       title="主页面子页面传值总结" target="_blank">主页面子页面传值总结</a>
                                    <span class="text-muted">chengxuyuancsdn</span>
<a class="tag" taget="_blank" href="/search/%E6%80%BB%E7%BB%93/1.htm">总结</a>
                                    <div>1、showModalDialog
returnValue是javascript中html的window对象的属性,目的是返回窗口值,当用window.showModalDialog函数打开一个IE的模式窗口时,用于返回窗口的值
主界面
 var sonValue=window.showModalDialog("son.jsp");
子界面
  window.retu</div>
                                </li>
                                <li><a href="/article/2268.htm"
                                       title="[网络与经济]互联网+的含义" target="_blank">[网络与经济]互联网+的含义</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%92%E8%81%94%E7%BD%91%2B/1.htm">互联网+</a>
                                    <div> 
      互联网+后面是一个人的名字 = 网络控制系统 
 
      互联网+你的名字 =  网络个人数据库 
 
      每日提示:如果人觉得不舒服,千万不要外出到处走动,就呆在床上,玩玩手游,更不能够去开车,现在交通状况不</div>
                                </li>
                                <li><a href="/article/2395.htm"
                                       title="oracle 创建视图 with check option" target="_blank">oracle 创建视图 with check option</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/%E8%A7%86%E5%9B%BE/1.htm">视图</a><a class="tag" taget="_blank" href="/search/view/1.htm">view</a><a class="tag" taget="_blank" href="/search/oralce/1.htm">oralce</a>
                                    <div>我们来看下面的例子: 
create or replace view testview 
as 
select empno,ename from emp where ename like ‘M%’ 
with check option; 
 
这里我们创建了一个视图,并使用了with check option来限制了视图。 然后我们来看一下视图包含的结果: 
select * from testv</div>
                                </li>
                                <li><a href="/article/2522.htm"
                                       title="ToastPlugin插件在cordova3.3下使用" target="_blank">ToastPlugin插件在cordova3.3下使用</a>
                                    <span class="text-muted">dibov</span>
<a class="tag" taget="_blank" href="/search/Cordova/1.htm">Cordova</a>
                                    <div>    自己开发的Todos应用,想实现“ 
再按一次返回键退出程序 ”的功能,采用网上的ToastPlugins插件,发现代码或文章基本都是老版本,运行问题比较多。折腾了好久才弄好。下面吧基于cordova3.3下的ToastPlugins相关代码共享。      
    ToastPlugin.java        
package&nbs</div>
                                </li>
                                <li><a href="/article/2649.htm"
                                       title="C语言22个系统函数" target="_blank">C语言22个系统函数</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/function/1.htm">function</a>
                                    <div>C语言系统函数一、数学函数下列函数存放在math.h头文件中Double floor(double num) 求出不大于num的最大数。Double fmod(x, y) 求整数x/y的余数。Double frexp(num, exp); double num; int *exp; 将num分为数字部分(尾数)x和 以2位的指数部分n,即num=x*2n,指数n存放在exp指向的变量中,返回x。D</div>
                                </li>
                                <li><a href="/article/2776.htm"
                                       title="开发一个类的流程" target="_blank">开发一个类的流程</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91/1.htm">开发</a>
                                    <div>本人近日根据自己的开发经验总结了一个类的开发流程。这个流程适用于单独开发的构件,并不适用于对一个项目中的系统对象开发。开发出的类可以存入私人类库,供以后复用。 
  
以下是开发流程: 
1. 明确类的功能,抽象出类的大概结构 
2. 初步设想类的接口 
3. 类名设计(驼峰式命名) 
4. 属性设置(权限设置) 
判断某些变量是否有必要作为成员属</div>
                                </li>
                                <li><a href="/article/2903.htm"
                                       title="java 并发" target="_blank">java 并发</a>
                                    <span class="text-muted">shuizhaosi888</span>
<a class="tag" taget="_blank" href="/search/java+%E5%B9%B6%E5%8F%91/1.htm">java 并发</a>
                                    <div>能够写出高伸缩性的并发是一门艺术 
  
在JAVA SE5中新增了3个包  
 
 java.util.concurrent 
 java.util.concurrent.atomic 
 java.util.concurrent.locks 
  
在java的内存模型中,类的实例字段、静态字段和构成数组的对象元素都会被多个线程所共享,局部变量与方法参数都是线程私有的,不会被共享。 </div>
                                </li>
                                <li><a href="/article/3030.htm"
                                       title="Spring Security(11)——匿名认证" target="_blank">Spring Security(11)——匿名认证</a>
                                    <span class="text-muted">234390216</span>
<a class="tag" taget="_blank" href="/search/Spring+Security/1.htm">Spring Security</a><a class="tag" taget="_blank" href="/search/ROLE_ANNOYMOUS/1.htm">ROLE_ANNOYMOUS</a><a class="tag" taget="_blank" href="/search/%E5%8C%BF%E5%90%8D/1.htm">匿名</a>
                                    <div>匿名认证 
目录 
1.1     配置 
1.2     AuthenticationTrustResolver 
  
       对于匿名访问的用户,Spring Security支持为其建立一个匿名的AnonymousAuthenticat</div>
                                </li>
                                <li><a href="/article/3157.htm"
                                       title="NODEJS项目实践0.2[ express,ajax通信...]" target="_blank">NODEJS项目实践0.2[ express,ajax通信...]</a>
                                    <span class="text-muted">逐行分析JS源代码</span>
<a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/nodejs/1.htm">nodejs</a><a class="tag" taget="_blank" href="/search/express/1.htm">express</a>
                                    <div>  
一、前言 
        通过上节学习,我们已经        ubuntu系统搭建了一个可以访问的nodejs系统,并做了nginx转发。本节原要做web端服务 及 mongodb的存取,但写着写着,web端就</div>
                                </li>
                                <li><a href="/article/3284.htm"
                                       title="在Struts2 的Action中怎样获取表单提交上来的多个checkbox的值" target="_blank">在Struts2 的Action中怎样获取表单提交上来的多个checkbox的值</a>
                                    <span class="text-muted">lhbthanks</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/struts/1.htm">struts</a><a class="tag" taget="_blank" href="/search/checkbox/1.htm">checkbox</a>
                                    <div>第一种方法:获取结果String类型 
在 Action 中获得的是一个 String 型数据,每一个被选中的 checkbox 的 value 被拼接在一起,每个值之间以逗号隔开(,)。 
 
所以在 Action 中定义一个跟 checkbox 的 name 同名的属性来接收这些被选中的 checkbox 的 value 即可。 
以下是实现的代码: 
 前台 HTML 代码: 
 
 
 </div>
                                </li>
                                <li><a href="/article/3411.htm"
                                       title="003.Kafka基本概念" target="_blank">003.Kafka基本概念</a>
                                    <span class="text-muted">nweiren</span>
<a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a>
                                    <div>Kafka基本概念:Topic、Partition、Message、Producer、Broker、Consumer。   Topic:               消息源(Message)的分类。   Partition:               Topic物理上的分组,一</div>
                                </li>
                                <li><a href="/article/3538.htm"
                                       title="Linux环境下安装JDK" target="_blank">Linux环境下安装JDK</a>
                                    <span class="text-muted">roadrunners</span>
<a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>1、准备工作 
创建JDK的安装目录: 
mkdir -p /usr/java/ 
  
下载JDK,找到适合自己系统的JDK版本进行下载: 
http://www.oracle.com/technetwork/java/javase/downloads/index.html 
  
把JDK安装包下载到/usr/java/目录,然后进行解压: 
tar -zxvf jre-7</div>
                                </li>
                                <li><a href="/article/3665.htm"
                                       title="Linux忘记root密码的解决思路" target="_blank">Linux忘记root密码的解决思路</a>
                                    <span class="text-muted">tomcat_oracle</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>1:使用同版本的linux启动系统,chroot到忘记密码的根分区passwd改密码     2:grub启动菜单中加入init=/bin/bash进入系统,不过这时挂载的是只读分区。根据系统的分区情况进一步判断.     3: grub启动菜单中加入 single以单用户进入系统.     4:用以上方法mount到根分区把/etc/passwd中的root密码去除     例如:     ro</div>
                                </li>
                                <li><a href="/article/3792.htm"
                                       title="跨浏览器 HTML5 postMessage 方法以及 message 事件模拟实现" target="_blank">跨浏览器 HTML5 postMessage 方法以及 message 事件模拟实现</a>
                                    <span class="text-muted">xueyou</span>
<a class="tag" taget="_blank" href="/search/jsonp/1.htm">jsonp</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a>
                                    <div>postMessage 是 HTML5 新方法,它可以实现跨域窗口之间通讯。到目前为止,只有 IE8+, Firefox 3, Opera 9, Chrome 3和 Safari 4 支持,而本篇文章主要讲述 postMessage 方法与 message 事件跨浏览器实现。postMessage 方法 JSONP 技术不一样,前者是前端擅长跨域文档数据即时通讯,后者擅长针对跨域服务端数据通讯,p</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>