淺談CSS的現(xiàn)世(未完待更)

現(xiàn)在JavaScript的發(fā)展速度很快,有了很多的功能,被用到了更多的領(lǐng)域。JS社區(qū)的人已經(jīng)瘋了,提出了JoT的概念,即“JavaScript of Things”,萬(wàn)物皆用JavaScript,是不是很熟悉?對(duì)的對(duì)的,最近一直大熱的物聯(lián)網(wǎng)(Internet of Things,簡(jiǎn)稱IoT)便是他們的下一個(gè)發(fā)展的目標(biāo),而這次主角只有一個(gè)弱類型語(yǔ)言——JavaScript,企圖統(tǒng)一世界。作為JS的好姬友,HTML也升級(jí)成HTML5而成為開發(fā)者的新寵兒。再來看看同是三劍客之一的CSS,雖然CSS3有了很多新特性,但是由于CSS本身的功能局限性,以及模塊化困難而造成的諸多不便,使很多開發(fā)者走向了極端,即舍棄CSS,改用JS和JSON來編寫樣式(CSS:你咋不上天?。谑钦Q生了諸如 reactcss,Radium,jsxstylereact-style 之類的模塊化樣式。此外,還有一種主流的CSS模塊化解決方案是,將CSS與JS結(jié)合,用JS來管理CSS模塊,比如CSS Modules。這些模塊化的樣式為管理樣式帶來了便利,同時(shí)也為CSS注入了新活力。

react.js中的CSS模塊化實(shí)現(xiàn)方法


今天我們先來談?wù)剅eact.js中自帶的CSS模塊化語(yǔ)法(注意這里的CSS模塊化寫法是react內(nèi)有的,和reactCSS與react-style這些可維護(hù)模塊不一樣),這是一個(gè)完全使用JavaScript來定義樣式的方法。與曾經(jīng)的鏈入外部樣式表不同,react.js更提倡inline style,即內(nèi)嵌式樣式表。

* BEFORE!*


首先,我們得入門 react.js,得引入react三件套:

<!-- react -->
<script type="text/javascript" src="js/browser.min.js" ></script>
<script type="text/javascript" src="js/react.min.js" ></script>
<script type="text/javascript" src="js/react-dom.min.js" ></script>

一定要注意** 順序**!

* START!*


  • ** 第一種**,也是最容易理解的一種寫法,即普通地使用class選擇器來寫CSS樣式:
/*common.css*/
.forExample {
    background-color: skyblue;
    color: white;
}
/*common.js*/
var ForExample = React.createClass({
    render: function() {
        return (
            <div className="forExample">
                Just for Fun!
            </div>
        );
    }
});
ReactDOM.render(
    <ForExample />,
    document.getElementById("select1")
);
  • ** 第二種**,也是最直接的寫法,直接在虛擬DOM上寫入內(nèi)聯(lián)樣式,即inline style:
var ForExample = React.createClass({
    render: function() {
        return (
            <div style={{
                backgroundColor: "skyblue",
                color: "white"
            }}>
                Just for Fun!
            </div>
        );
    }
});
ReactDOM.render(
    <ForExample />,
    document.getElementById("select2")
);
  • ** 第三種**,稍微復(fù)雜點(diǎn),但是可以重復(fù)利用,維護(hù)起來很方便,而且也很美觀:
var forExample = {
    backgroundColor: "skyblue",
    color: "white"
}
var ForExample = React.createClass({
    render: function() {
        return (
            <div style={forExample}>
                Just for Fun!
            </div>
        );
    }
});
ReactDOM.render(
    <ForExample />,
    document.getElementById("select3")
);
  • ** 第三種 plus**,一種充分利用JSON結(jié)構(gòu)來寫的樣式,更有條理,易于維護(hù)和引用:
var colour = {
    text: {
        red: {
            color: "#e65051",
        },
        gray: {
            color: "#a0a0a0",
        },
        white: {
            color: "#FFFFFF",
        }
    },
    bg: {
        red: {
            backgroundColor: "#e65051",
        },
        gray1: {
            backgroundColor: "#ededed",
        },
        gray2: {
            backgroundColor: "#f7f7f7", 
        },
    },
};
var ForExample = React.createClass({
    render: function() {
        return (
            <div style={colour.text.red}>
                Just for Fun!
            </div>
        );
    }
});
ReactDOM.render(
    <ForExample />,
    document.getElementById("select3s")
);

當(dāng)然,如果你想對(duì)一個(gè)目標(biāo)引用多個(gè)樣式的話,就要用到JSON數(shù)據(jù)的拼接。方便點(diǎn),可以引入jQuery文件,使用extend()方法,如:

var ForExample = React.createClass({
    render: function() {
        return (
            <div style={$.extend({}, colour.text.red, colour.bg.red)}>
                Just for Fun!
            </div>
        );
    }
});
  • 第四種,更復(fù)雜的動(dòng)態(tài)樣式,這就要用到react中的state來重新觸發(fā)渲染,以下就是一個(gè)點(diǎn)擊(onClick)后文字變色變大的demo:
var ChangeGame = React.createClass({
    
    getInitialState: function() {
        return {colorX: "skyblue", fontSizeX: "20px"};
    },
    
    guessWhat: function(event) {
        this.setState({colorX: "blue", fontSizeX: "50px"});
    },
    
    render: function() {
        return (
            <div onClick={this.guessWhat} style={{color: this.state.colorX, fontSize: this.state.fontSizeX}}>
                變色,變大!
            </div>
        );
    }
});
ReactDOM.render(
    <ChangeGame />,
    document.getElementById("select4")
);

這里的觸發(fā)事件也很多,比如onKeyDown、onCopy等等,同樣可以做到模擬CSS各事件。

* TO BE CONTINUED!*


然而,這些并不是實(shí)際react工程中常用的編寫樣式的方式,常用的一般是文章開始時(shí)提到的一些CSS模塊化組件。這些,我們下次再說吧!( ?? ω ?? )y

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容