React-Native开发大全JS

react native 之样式分离

2017-05-14  本文已影响2870人  你好啊憨憨米

感慨一发

在这个值得欢庆的周末,回顾一下曾经接触react native的经历,写篇小文章来聊聊和样式相关的小问题。

  1. 样式写在了js里,说好的分开,现在又要在一起,一脸懵逼
  2. 编辑器在写样式的时候没有代码提示,已经懒癌晚期的我,没有代码提示简直就是噩梦啊
  3. 想要一根1px的边线,需要用js去实现
  4. 没有媒体查询,没有calc,宝宝不开心

为了让自己布局的时候爽一点呢,作为前端小白的我,搞了一个webpack的loader,专治上面的小问题。

loader提供的小功能

使用姿势

安装

npm install react-native-style-loader less-loader less --save-dev

配置webpack
//webpack 1
module.exports = {
    entry: './src/less/index.less',
    output: {
        path: './src/styles',
        filename: 'tmp.js'
    },
    module: {
        loaders: [{
            test: /\.less$/,
            loader: "react-native-style-loader!less"
        }]
    }
};

//webpack 2
var path = require('path');

module.exports = {
    entry: './src/less/index.less',
    output: {
        filename: 'tmp.js',
        path: path.resolve(__dirname, './src/styles')
    },
    module: {
        rules: [{
            test: /\.less$/,
            use: [
                {
                    loader: 'react-native-style-loader'
                },
                {
                    loader: 'less-loader'
                }
            ]
        }]
    }
};
启动webpack

在package.json的scripts中添加如下命令

"scripts": {
    "less": "webpack --config webpack.config.js -w"
 }

然后就可以happy的运行npm run less 来启动啦

引用样式

上面一切准备就绪之后,你就可以在src/less/index.less 文件里编写你喜欢的各种less代码啦,最后嘛,不要忘记在js中引入styles

import styles from './src/styles';

至此,一切似乎就该结束了,骚等,好想忘了贴出github地址 react-native-style-loader

常用功能小贴士

react native中支持的css属性皆全部支持

单位
  1. px 所支持的最小线宽, 如: border: 1px solid #ccc;
  2. pt 和ios中的pt, andorid中的dp是一个道理
  3. vw 和css中的vw含义一样, 如 50vw 表示屏幕宽度的50%
  4. vh 和css中的vh含义一样, 如 50vh 表示屏幕高度的50%
  5. rem 和css中的rem含义一样, 你可以像下面这样设置rem的基准
html {
      font-size: 20pt;
}
媒体查询
@media (min-width: 350px) and (max-width: 500px) {
    html {
        font-size: 100pt;
    }
}
.container {
     @media ios {
        padding-top: 20pt;
     }
     @media android {
         padding-top: 25pt;
     }
}
calc
//屏幕高度减去49pt
height: calc(~'100vh - 49pt');
嵌套的css
//输入
.container {
    .box1 {
        width: 50pt;
        height: 20pt;
        background: orange;
    }
    .box2 {
        width: 50rem;
        height: 20pt;
        background: green;
    }
    .m-box {
        width: 50rem;
        height: 20pt;
        background: green;
    }
}
//输出
{
   container: {
        box1: {
            width: 50;
            height: 20;
            backgroundColor: orange;
        }
        box1: {
            width: 50;
            height: 20;
            backgroundColor: green;
        }
        "m-box": {
            width: 50;
            height: 20;
            backgroundColor: green;
        }
        mBox: {
            width: 50;
            height: 20;
            backgroundColor: green;
        }
   }
}
//不支持下面的嵌套
.container {
    .box1 {
        width: 50pt;
        height: 20pt;
        background: orange;
    }
    font-size: 12px;
}
简写样式
属性 取值
margin 2px<br />2px 4px<br />3px 1px 5px<br />1px 3px 2px 6px
padding 2px<br />2px 4px<br />3px 1px 5px<br />1px 3px 2px 6px
box-shadow none<br />0 2px 4px rgba(52, 21, 23, 0.32)
flex 1<br />1 30px<br />1 2 10%
transform perspective(90)<br />rotate(10deg)<br />rotateX(5deg)<br />rotateY(10deg)<br />rotateZ(15deg)<br />rotate3d(5deg, 10deg, 15deg)<br />scale(1.2)<br />scaleX(1.5)<br />scaleY(0.5)<br />scale2d(1.5, 0.5) <br /> scale3d(1.5, 0.5)<br />translateX(5px)<br />translateY(10px)<br />translate2d(5px, 10px) <br /> translate3d(5px, 10px)

问题反馈

如果有什么问题,欢迎提issues

上一篇下一篇

猜你喜欢

热点阅读