2019-01-03

ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现

12.2 样式

12.2.1 访问元素的样式

1、DOM样式属性和方法

2、计算的样式

“DOM2级样式”增强了document.defaultView,提供了getComputerStyle()方法。这个方法接受两个参数:要取得计算样式的元素和一个伪元素字符串(例“:after”)。如果不需要伪元素信息的话,第二个参数可以是null。

<!DOCTYPE html>
<html>
<head>
    <title>Computed Style Example</title>
    <style type="text/css">
        #myDiv{
            background-color:blue;
            width:100px;
            height:200px;
        }
    </style>
</head>
<body>
    <div id="myDiv" style="background-color:red;border:1px solid black"></div>
</body>
</html>


var myDiv=document.getElementById("myDiv");
var computedStyle = document.defaultView.getComputedStyle(myDiv,null);

alert(computedStyle.backgroundColor);//red
alert(computedStyle.width);//100px
alert(computedStyle.height);//200px
alert(computedStyle.border);//在某些浏览器中是"1px solid black"

无论在哪个浏览器中,最重要的一条是要记住所有计算的样式都是制度的;不能修改计算后样式对象中的 css属性。此外,计算后的样式也包含属于浏览器内部样式表的样式信息,因此任何具有默认值的css属性都会表现在计算后的样式中。换句话说,不能指望某个css属性的默认值在不同浏览器中时相同的。如果你需要元素具有某个特定的默认值,应该手工在样式表中指定该值。

12.2.2 操作样式表

CSSStyleSheet类型表示的是样式表,包括通过<link>元素包含的样式表和在<style>元素中定义的样式表。
CSSStyleSheet对象是一套只读的接口,使用下面的 代码可以确定浏览器是否支持DOM2级样式表:

var supportsDOM2StyleSheets = document.implementation.hasFeature("StyleSheets","2.0");

CSSStyleSheet继承自StyleSheet,后者可以作为一个基础接口来定义非css样式表。
◆ disabled:表示样式表是否被禁用的布尔值。这个属性是可读/写的,将这个值设置为true可以禁用样式表。
◆ href:如果样式表是通过<link>包含的,则是样式表的URL;否则是NULL
◆ media:当前样式表支持的所有媒体类型的集合。与所有DOM集合一样,这个集合也有一个length属性和一个item()方法。也可以使用方括号语法取得集合中特定的项。如果集合是空列表,表示样式表适用于所有媒体。在IE中,media是一个反应<link>和<style>元素media特性值的字符串。
◆ ownerNode:指向拥有当前样式表的节点的指针,样式表可能是在HTML中通过<link>或<style/>引入的。如果当前样式是其他样式表通过@important导入的,则这个属性值为null。IE不支持这个属性。
◆ parentStyleSheet:在当前样式表是通过@important导入的情况下,这个属性是一个指向导入它的样式表的指针.
◆ title:ownerNode中的 title属性的值
◆ type:表示样式表类型的字符串。

1、css规则

CSSRule对象表示样式表中的每一条规则。实际上,CSSRule是一个供其他多种类型继承的基类型
CSSStyleRules对象包含下列属性:
◆ cssText:返回整条规则对应的文本
◆ parentRule:如果当前规则是导入的规则,这个属性引用的就是导入规则;否则,这个值为null
◆ selectorText:返回当前规则的选择符文本。
◆ style:一个CSSStyleDeclaration对象,可以通过它设置和取得规则中特定的样式表。
◆ type:表示规则类型的常量值。

其中三个最常用的属性是cssText、selectorText和style。
cssText与style.cssText属性类似,但并不相同。
cssText包含选择符文本和围绕样式信息的花括号,是只读的。
style.cssText只包含样式信息,可以被重写。

大多数情况下,仅使用style属性就可以满足所有操作样式规则的属性了。

2、创建规则

DOM规定,要向现有样式表中添加新规则,需要使用insertRule()方法。这个方法接受两个参数:规则文本和表示在哪里插入规则的索引:

sheet.insertRule("body {background-color:silver}",0);//DOM方法
//这个例子插入的规则会改变元素的背景颜色。
//插入的规则将成为样式表中的第一条规则

IE8及更早版本支持一个类似的方法,名叫addRule(),也接受两必选参数:选择符文本和CSS样式信息;一个可选参数:插入规则的位置。

sheet.addRule("body ","background-color:silver",0);//仅对IE有效

如果要添加的规则非常多,还是建议采用动态加载样式表的技术。

3、删除规则

从样式表中删除规则的方法是deleteRule(),这个方法接受一个参数:要删除的规则的位置。例如要删除样式表中的第一条规则:

sheet.deleteRule(0);//DOM方法

sheet.removeRule(0);//仅对IE有效

与添加规则相似,删除规则也不是实际web开发中常见的做法。考虑到删除规则可能会影响css层叠的效果,因此慎重使用。

——————————————————————————————————————————————————————————————————————

React

React应用的构成模块:元素和组件。掌握了这些,将可以使用简单的可复用代码来创建复杂的应用。

<div id="root">
</div>//div中的所有内容都将由ReactDOM来管理,所以称之为“根”DOM节点

//要将React元素渲染到根DOM节点中
//通过把它们都传递给ReactDOM.render()的方法将其渲染到页面上:
ReactDOM.render(
    <h1>Hello world</h1>
    document.getElementById('root')
);
const element=<h1>Hello world</h1>;

上面的这行代码既不是字符串也不是HTML,它是JSX,一种Javascript的语法扩展。JSX乍看起来可能比较像是模板语言,但事实上它完全是在Javascript内部实现的。它用来声明React当中的元素。

在JSX中使用表达式

可以任意的在JSX中使用Javascript表达式,在JSX当中的表达式要包含在大括号中。

function formatName(user){
    return user.firtsName + '  ' + user.lastName;
}

const user={
      firstName:'Harper',
      lastName:'Perez'      
};

const element=(
      <h1>
              Hello,{formatName(user)}!
      </h1>
);

ReactDOM.render(
      element,
      document,getElementById('root')
)


//在代码中嵌套多个HTML标签时,需要使用一个div元素来包裹
ReactDOM.render(
    <div>
        <h1>Hello,world</h1>
        <h2>Hello,kathy</h2>
        <p>这是美好的一天</p>
    </div>
    ,  
     document.getElementById('example')
)

也可以将React JSX代码放在独立文件上,在HTML文件中引入该文件:

<script type="text/babel" src="helloworld_react.js"></script>

JSX本身其实也是一种表达式,在编译之后会被转化为普通的Javascript对象,这也就意味着可以在if或者for语句里使用JSX,将它赋值给变量,当作参数传入,作为返回值都可以,表达式写在花括号{ }中

function getGreeting(user){
    if(user){
        return<h1>Hello,{formatName(user)}!</h1>;
    }
    return<h1>Hello ,Stranger</h1>
}

在JSX中不能使用if else语句,但是可以使用conditional(三元运算)表达式来替代。
三元运算符是软件编程中的一个固定格式,语法是“条件表达式?表达式1:表达式2”。使用这个算法可以使调用数据时逐级筛选。

ReactDOM.render(
    <div>
        <h1>{i==1?'True':'False'}</h1>
    </div>
    ,
    document,gerElementById('example')
);

JSX属性

可以使用引号来定义以字符串为值的属性:
const element = <div tabIndex="0"></div>
也可以使用大括号来定义以Javascript表达式为值的属性:
const element = <img src = {user.avatarUrl}></img>

切记在使用了大括号包裹的Javascript表达式时就不要再在外面套引号了。JSX会将引号当中的内容识别为字符串而不是表达式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,192评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,858评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,517评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,148评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,162评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,905评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,537评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,439评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,956评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,083评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,218评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,899评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,565评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,093评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,201评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,539评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,215评论 2 358

推荐阅读更多精彩内容