[iOS] Supporting 'light-theme-' prefix.
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h b/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
index 1ac754a..6280db6 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
@@ -51,8 +51,10 @@
      */
     UIColor *_styleBackgroundColor;
     UIColor *_darkThemeBackgroundColor;
+    UIColor *_lightThemeBackgroundColor;
     NSString *_backgroundImage;
     NSString *_darkThemeBackgroundImage;
+    NSString *_lightThemeBackgroundImage;
     NSString *_clipRadius;
     WXClipType _clipToBounds;
     UIView *_view;
@@ -62,6 +64,7 @@
     WXBoxShadow *_lastBoxShadow;
     WXBoxShadow *_boxShadow;
     WXBoxShadow *_darkThemeBoxShadow;
+    WXBoxShadow *_lightThemeBoxShadow;
     
     /**
      * accessibility support
@@ -119,12 +122,16 @@
     
     UIColor *_borderTopColor;
     UIColor *_darkThemeBorderTopColor;
+    UIColor *_lightThemeBorderTopColor;
     UIColor *_borderRightColor;
     UIColor *_darkThemeBorderRightColor;
+    UIColor *_lightThemeBorderRightColor;
     UIColor *_borderLeftColor;
     UIColor *_darkThemeBorderLeftColor;
+    UIColor *_lightThemeBorderLeftColor;
     UIColor *_borderBottomColor;
     UIColor *_darkThemeBorderBottomColor;
+    UIColor *_lightThemeBorderBottomColor;
     
     CGFloat _borderTopWidth;
     CGFloat _borderRightWidth;
@@ -187,6 +194,7 @@
  */
 @property (atomic, strong) UIColor* styleBackgroundColor;
 @property (atomic, strong) UIColor* darkThemeBackgroundColor;
+@property (atomic, strong) UIColor* lightThemeBackgroundColor;
 
 ///--------------------------------------
 /// @name Package Internal Methods
@@ -309,4 +317,6 @@
 
 - (BOOL)_isAffineTypeAs:(NSString *)type;
 
+- (WXBoxShadow*)_chooseBoxShadow;
+
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
index 2a83fee..436ac1c 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
@@ -59,8 +59,10 @@
 
 @property (atomic, strong) NSString *src;
 @property (atomic, strong) NSString *darkThemeSrc;
+@property (atomic, strong) NSString *lightThemeSrc;
 @property (atomic, strong) NSString *placeholdSrc;
 @property (atomic, strong) NSString *darkThemePlaceholderSrc;
+@property (atomic, strong) NSString *lightThemePlaceholderSrc;
 @property (nonatomic, assign) CGFloat blurRadius;
 @property (nonatomic, assign) UIViewContentMode resizeMode;
 @property (nonatomic, assign) WXImageQuality imageQuality;
@@ -96,6 +98,9 @@
         if (attributes[@"darkThemeSrc"]) {
             self.darkThemeSrc = [[WXConvert NSString:attributes[@"darkThemeSrc"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
         }
+        if (attributes[@"lightThemeSrc"]) {
+            self.lightThemeSrc = [[WXConvert NSString:attributes[@"lightThemeSrc"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
+        }
         
         [self configPlaceHolder:attributes];
         
@@ -136,6 +141,9 @@
     if (attributes[@"darkThemePlaceholder"]) {
         self.darkThemePlaceholderSrc = [[WXConvert NSString:attributes[@"darkThemePlaceholder"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
     }
+    if (attributes[@"lightThemePlaceholder"]) {
+        self.lightThemePlaceholderSrc = [[WXConvert NSString:attributes[@"lightThemePlaceholder"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
+    }
 }
 
 - (void)configFilter:(NSDictionary *)styles needUpdate:(BOOL)needUpdate
@@ -266,6 +274,9 @@
     if (attributes[@"darkThemeSrc"]) {
         self.darkThemeSrc = [[WXConvert NSString:attributes[@"darkThemeSrc"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
     }
+    if (attributes[@"lightThemeSrc"]) {
+        self.lightThemeSrc = [[WXConvert NSString:attributes[@"lightThemeSrc"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
+    }
     if (attributes[@"src"]) {
         [self setImageSrc:[[WXConvert NSString:attributes[@"src"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
     }
@@ -301,7 +312,8 @@
 {
     [super themeDidChange:theme];
     if (_view) {
-        if (self.darkThemeSrc || self.darkThemePlaceholderSrc) {
+        if (self.darkThemeSrc || self.darkThemePlaceholderSrc ||
+            self.lightThemeSrc || self.lightThemePlaceholderSrc) {
             [self updateImage];
         }
     }
@@ -391,6 +403,24 @@
     }
 }
 
+- (NSString*)chooseImage:(NSString*)src lightSrc:(NSString*)lightSrc darkSrc:(NSString*)darkSrc
+{
+    if ([self.weexInstance isDarkTheme]) {
+        if (darkSrc) {
+            return darkSrc;
+        }
+        else {
+            return src;
+        }
+    }
+    else if (lightSrc) {
+        return lightSrc;
+    }
+    else {
+        return src;
+    }
+}
+
 - (void)updateImage
 {
     if (CGSizeEqualToSize(_view.frame.size, CGSizeZero)) {
@@ -398,9 +428,8 @@
         return;
     }
     
-    BOOL isDarkMode = [self.weexInstance isDarkTheme];
-    NSString* choosedSrc = isDarkMode ? (self.darkThemeSrc ?: self.src) : self.src;
-    NSString* choosedPlaceholder = isDarkMode ? (self.darkThemePlaceholderSrc ?: self.placeholdSrc) : self.placeholdSrc;
+    NSString* choosedSrc = [self chooseImage:self.src lightSrc:self.lightThemeSrc darkSrc:self.darkThemeSrc];
+    NSString* choosedPlaceholder = [self chooseImage:self.placeholdSrc lightSrc:self.lightThemePlaceholderSrc darkSrc:self.darkThemePlaceholderSrc];
     
     __weak typeof(self) weakSelf = self;
     if (_downloadImageWithURL && [[self imageLoader] respondsToSelector:@selector(setImageViewWithURL:url:placeholderImage:options:progress:completed:)]) {
@@ -531,8 +560,7 @@
 
 - (void)updatePlaceHolderWithFailedBlock:(void(^)(NSString *, NSError *))downloadFailedBlock
 {
-    BOOL isDarkMode = [self.weexInstance isDarkTheme];
-    NSString* choosedPlaceholder = isDarkMode ? (self.darkThemePlaceholderSrc ?: self.placeholdSrc) : self.placeholdSrc;
+    NSString* choosedPlaceholder = [self chooseImage:self.placeholdSrc lightSrc:self.lightThemePlaceholderSrc darkSrc:self.darkThemePlaceholderSrc];
     
     if ([WXUtility isBlankString:choosedPlaceholder]) {
         return;
@@ -562,7 +590,7 @@
                 return;
             }
             
-            NSString* currentPlaceholder = [strongSelf.weexInstance isDarkTheme] ? (strongSelf.darkThemePlaceholderSrc ?: strongSelf.placeholdSrc) : strongSelf.placeholdSrc;
+            NSString* currentPlaceholder = [strongSelf chooseImage:strongSelf.placeholdSrc lightSrc:strongSelf.lightThemePlaceholderSrc darkSrc:strongSelf.darkThemePlaceholderSrc];
             if (![choosedPlaceholder isEqualToString:currentPlaceholder]) {
                 return;
             }
@@ -581,8 +609,7 @@
 
 - (void)updateContentImageWithFailedBlock:(void(^)(NSString *, NSError *))downloadFailedBlock
 {
-    BOOL isDarkMode = [self.weexInstance isDarkTheme];
-    NSString* choosedSrc = isDarkMode ? (self.darkThemeSrc ?: self.src) : self.src;
+    NSString* choosedSrc = [self chooseImage:self.src lightSrc:self.lightThemeSrc darkSrc:self.darkThemeSrc];
     
     if ([WXUtility isBlankString:choosedSrc]) {
         WXLogError(@"image src is empty");
@@ -619,7 +646,7 @@
                 return ;
             }
             
-            NSString* currentSrc = [strongSelf.weexInstance isDarkTheme] ? (strongSelf.darkThemeSrc ?: strongSelf.src) : strongSelf.src;
+            NSString* currentSrc = [strongSelf chooseImage:strongSelf.src lightSrc:strongSelf.lightThemeSrc darkSrc:strongSelf.darkThemeSrc];
             if (![choosedSrc isEqualToString:currentSrc]) {
                 return ;
             }
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXRichText.mm b/ios/sdk/WeexSDK/Sources/Component/WXRichText.mm
index e796009..fa5a750 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXRichText.mm
+++ b/ios/sdk/WeexSDK/Sources/Component/WXRichText.mm
@@ -37,8 +37,10 @@
 @property (nonatomic, strong) NSString  *text;
 @property (nonatomic, strong) UIColor   *color;
 @property (nonatomic, strong) UIColor   *darkThemeColor;
+@property (nonatomic, strong) UIColor   *lightThemeColor;
 @property (nonatomic, strong) UIColor   *backgroundColor;
 @property (nonatomic, strong) UIColor   *darkThemeBackgroundColor;
+@property (nonatomic, strong) UIColor   *lightThemeBackgroundColor;
 @property (nonatomic, strong) NSString  *fontFamily;
 @property (nonatomic, assign) CGFloat   fontSize;
 @property (nonatomic, assign) CGFloat   fontWeight;
@@ -196,8 +198,10 @@
 {
     WX_STYLE_FILL_RICHTEXT(color, UIColor)
     WX_STYLE_FILL_RICHTEXT(darkThemeColor, UIColor)
+    WX_STYLE_FILL_RICHTEXT(lightThemeColor, UIColor)
     WX_STYLE_FILL_RICHTEXT(backgroundColor, UIColor)
     WX_STYLE_FILL_RICHTEXT(darkThemeBackgroundColor, UIColor)
+    WX_STYLE_FILL_RICHTEXT(lightThemeBackgroundColor, UIColor)
     WX_STYLE_FILL_RICHTEXT(fontFamily, NSString)
     WX_STYLE_FILL_RICHTEXT_PIXEL(fontSize)
     WX_STYLE_FILL_RICHTEXT(fontWeight, WXTextWeight)
@@ -475,8 +479,8 @@
                 [attrStr.mutableString appendString:text];
                 
                 NSRange range = NSMakeRange(location, text.length);
-                UIColor* textColor = [self.weexInstance chooseColor:node.color darkThemeColor:node.darkThemeColor invert:invert scene:[self colorSceneType]];
-                UIColor* bgColor = [self.weexInstance chooseColor:node.backgroundColor darkThemeColor:node.darkThemeBackgroundColor invert:invert scene:[self colorSceneType]];
+                UIColor* textColor = [self.weexInstance chooseColor:node.color lightThemeColor:node.lightThemeColor darkThemeColor:node.darkThemeColor invert:invert scene:[self colorSceneType]];
+                UIColor* bgColor = [self.weexInstance chooseColor:node.backgroundColor lightThemeColor:node.lightThemeBackgroundColor darkThemeColor:node.darkThemeBackgroundColor invert:invert scene:[self colorSceneType]];
                 [attrStr addAttribute:NSForegroundColorAttributeName value:textColor ?: defaultTextColor range:range];
                 [attrStr addAttribute:NSBackgroundColorAttributeName value:bgColor ?: defaultBackgroundColor range:range];
                 
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.mm b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.mm
index 3bb7948..4d6e52e 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.mm
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.mm
@@ -122,6 +122,7 @@
 @property (atomic, strong) NSString *fontFamily;
 @property (atomic, strong) UIColor *textColor;
 @property (atomic, strong) UIColor *darkThemeTextColor;
+@property (atomic, strong) UIColor *lightThemeTextColor;
 @end
 
 @implementation WXTextComponent
@@ -295,6 +296,22 @@
         }
     } while (0);
     
+    do {
+        UIColor* color = nil;
+        id value = styles[@"lightThemeColor"];
+        if (value) {
+            if([WXUtility isBlankString:value]){
+                color = [UIColor blackColor];
+            } else {
+                color = [WXConvert UIColor:value];
+            }
+            if (color) {
+                self.lightThemeTextColor = color;
+                [self setNeedsRepaint];
+            }
+        }
+    } while (0);
+    
     if (self.fontFamily && !_observerIconfont) {
         // notification received when custom icon font file download finish
         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(repaintText:) name:WX_ICONFONT_DOWNLOAD_NOTIFICATION object:nil];
@@ -526,7 +543,7 @@
         string = @"";
     }
     NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString: string];
-    UIColor* textColor = [self.weexInstance chooseColor:self.textColor darkThemeColor:self.darkThemeTextColor invert:self.invertForDarkTheme scene:[self colorSceneType]];
+    UIColor* textColor = [self.weexInstance chooseColor:self.textColor lightThemeColor:self.lightThemeTextColor darkThemeColor:self.darkThemeTextColor invert:self.invertForDarkTheme scene:[self colorSceneType]];
     if (textColor) {
         [attributedString addAttribute:NSForegroundColorAttributeName value:textColor range:NSMakeRange(0, string.length)];
     }
@@ -615,7 +632,7 @@
     NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string];
     
     // set textColor
-    UIColor* textColor = [self.weexInstance chooseColor:self.textColor darkThemeColor:self.darkThemeTextColor invert:self.invertForDarkTheme scene:[self colorSceneType]];
+    UIColor* textColor = [self.weexInstance chooseColor:self.textColor lightThemeColor:self.lightThemeTextColor darkThemeColor:self.darkThemeTextColor invert:self.invertForDarkTheme scene:[self colorSceneType]];
     if (textColor) {
         [attributedString addAttribute:NSForegroundColorAttributeName value:textColor range:NSMakeRange(0, string.length)];
     }
@@ -1150,6 +1167,10 @@
         self.darkThemeTextColor = nil;
         [self setNeedsRepaint];
     }
+    if ([styles containsObject:@"lightThemeColor"]) {
+        self.lightThemeTextColor = nil;
+        [self setNeedsRepaint];
+    }
     if ([styles containsObject:@"fontSize"]) {
         _fontSize = WX_TEXT_FONT_SIZE;
         [self setNeedsRepaint];
diff --git a/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m b/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m
index 081ae35..964e059 100644
--- a/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m
+++ b/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m
@@ -109,8 +109,8 @@
     WXAssertMainThread();
     if (_view) {
         if (![self _needsDrawBorder]) {
-            _layer.borderColor = [self.weexInstance chooseColor:_borderTopColor darkThemeColor:_darkThemeBorderTopColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor;
-            _layer.backgroundColor = [self.weexInstance chooseColor:self.styleBackgroundColor darkThemeColor:self.darkThemeBackgroundColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor;
+            _layer.borderColor = [self.weexInstance chooseColor:_borderTopColor lightThemeColor:_lightThemeBorderTopColor darkThemeColor:_darkThemeBorderTopColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor;
+            _layer.backgroundColor = [self.weexInstance chooseColor:self.styleBackgroundColor lightThemeColor:self.lightThemeBackgroundColor darkThemeColor:self.darkThemeBackgroundColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor;
         }
         else {
             [self setNeedsDisplay];
@@ -120,14 +120,7 @@
             [self setGradientLayer];
         }
         
-        WXBoxShadow* usingBoxShadow = nil;
-        if (_darkThemeBoxShadow && [self.weexInstance isDarkTheme]) {
-            usingBoxShadow = _darkThemeBoxShadow;
-        }
-        else {
-            usingBoxShadow = _boxShadow;
-        }
-        
+        WXBoxShadow* usingBoxShadow = [self _chooseBoxShadow];
         if (usingBoxShadow) {
             _lastBoxShadow = usingBoxShadow;
             [self configBoxShadow:usingBoxShadow];
@@ -328,7 +321,7 @@
 - (void)_collectCompositingDisplayBlocks:(NSMutableArray *)displayBlocks context:(CGContextRef)context isCancelled:(BOOL(^)(void))isCancelled
 {
     // TODO: compositingChild has no chance to applyPropertiesToView, need update here?
-    UIColor *backgroundColor = [self.weexInstance chooseColor:self.styleBackgroundColor darkThemeColor:self.darkThemeBackgroundColor invert:self.invertForDarkTheme scene:[self colorSceneType]];
+    UIColor *backgroundColor = [self.weexInstance chooseColor:self.styleBackgroundColor lightThemeColor:self.lightThemeBackgroundColor darkThemeColor:self.darkThemeBackgroundColor invert:self.invertForDarkTheme scene:[self colorSceneType]];
     BOOL clipsToBounds = _clipToBounds;
     CGRect frame = self.calculatedFrame;
     CGRect bounds = CGRectMake(0, 0, frame.size.width, frame.size.height);
@@ -388,14 +381,21 @@
     
     CGContextSetAlpha(context, _opacity);
     // fill background color
-    UIColor* bgColor = [self.weexInstance chooseColor:self.styleBackgroundColor darkThemeColor:self.darkThemeBackgroundColor invert:self.invertForDarkTheme scene:[self colorSceneType]];
-    if (bgColor && CGColorGetAlpha(bgColor.CGColor) > 0) {
-        CGContextSetFillColorWithColor(context, bgColor.CGColor);
-        UIBezierPath *bezierPath = [UIBezierPath wx_bezierPathWithRoundedRect:rect topLeft:topLeft topRight:topRight bottomLeft:bottomLeft bottomRight:bottomRight];
-        [bezierPath fill];
-        WXPerformBlockOnMainThread(^{
-            _view.backgroundColor = UIColor.clearColor;
-        });
+    UIColor* bgColor = [self.weexInstance chooseColor:self.styleBackgroundColor lightThemeColor:self.lightThemeBackgroundColor darkThemeColor:self.darkThemeBackgroundColor invert:self.invertForDarkTheme scene:[self colorSceneType]];
+    
+    if (bgColor && [bgColor respondsToSelector:@selector(CGColor)]) {
+        if (CGColorGetAlpha(bgColor.CGColor) > 0) {
+            CGContextSetFillColorWithColor(context, bgColor.CGColor);
+            UIBezierPath *bezierPath = [UIBezierPath wx_bezierPathWithRoundedRect:rect topLeft:topLeft topRight:topRight bottomLeft:bottomLeft bottomRight:bottomRight];
+            [bezierPath fill];
+            __weak WXComponent* wself = self;
+            WXPerformBlockOnMainThread(^{
+                __strong WXComponent* sself = wself;
+                if (sself) {
+                    sself->_view.backgroundColor = UIColor.clearColor;
+                }
+            });
+        }
     }
     // Top
     if (_borderTopWidth > 0) {
@@ -408,7 +408,7 @@
         }
         CGContextSetLineWidth(context, _borderTopWidth);
         CGContextSetStrokeColorWithColor(context,
-                                         [self.weexInstance chooseColor:_borderTopColor darkThemeColor:_darkThemeBorderTopColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor);
+                                         [self.weexInstance chooseColor:_borderTopColor lightThemeColor:_lightThemeBorderTopColor darkThemeColor:_darkThemeBorderTopColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor);
         CGContextAddArc(context, size.width-topRight, topRight, topRight-_borderTopWidth/2, -M_PI_4+(_borderRightWidth>0?0:M_PI_4), -M_PI_2, 1);
         CGContextMoveToPoint(context, size.width-topRight, _borderTopWidth/2);
         CGContextAddLineToPoint(context, topLeft, _borderTopWidth/2);
@@ -430,7 +430,7 @@
         }
         CGContextSetLineWidth(context, _borderLeftWidth);
         CGContextSetStrokeColorWithColor(context,
-                                         [self.weexInstance chooseColor:_borderLeftColor darkThemeColor:_darkThemeBorderLeftColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor);
+                                         [self.weexInstance chooseColor:_borderLeftColor lightThemeColor:_lightThemeBorderLeftColor darkThemeColor:_darkThemeBorderLeftColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor);
         CGContextAddArc(context, topLeft, topLeft, topLeft-_borderLeftWidth/2, -M_PI, -M_PI_2-M_PI_4+(_borderTopWidth > 0?0:M_PI_4), 0);
         CGContextMoveToPoint(context, _borderLeftWidth/2, topLeft);
         CGContextAddLineToPoint(context, _borderLeftWidth/2, size.height-bottomLeft);
@@ -452,7 +452,7 @@
         }
         CGContextSetLineWidth(context, _borderBottomWidth);
         CGContextSetStrokeColorWithColor(context,
-                                         [self.weexInstance chooseColor:_borderBottomColor darkThemeColor:_darkThemeBorderBottomColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor);
+                                         [self.weexInstance chooseColor:_borderBottomColor lightThemeColor:_lightThemeBorderBottomColor darkThemeColor:_darkThemeBorderBottomColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor);
         CGContextAddArc(context, bottomLeft, size.height-bottomLeft, bottomLeft-_borderBottomWidth/2, M_PI-M_PI_4+(_borderLeftWidth>0?0:M_PI_4), M_PI_2, 1);
         CGContextMoveToPoint(context, bottomLeft, size.height-_borderBottomWidth/2);
         CGContextAddLineToPoint(context, size.width-bottomRight, size.height-_borderBottomWidth/2);
@@ -474,7 +474,7 @@
         }
         CGContextSetLineWidth(context, _borderRightWidth);
         CGContextSetStrokeColorWithColor(context,
-                                         [self.weexInstance chooseColor:_borderRightColor darkThemeColor:_darkThemeBorderRightColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor);
+                                         [self.weexInstance chooseColor:_borderRightColor lightThemeColor:_lightThemeBorderRightColor darkThemeColor:_darkThemeBorderRightColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor);
         CGContextAddArc(context, size.width-bottomRight, size.height-bottomRight, bottomRight-_borderRightWidth/2, M_PI_4+(_borderBottomWidth>0?0:M_PI_4), 0, 1);
         CGContextMoveToPoint(context, size.width-_borderRightWidth/2, size.height-bottomRight);
         CGContextAddLineToPoint(context, size.width-_borderRightWidth/2, topRight);
@@ -533,10 +533,10 @@
     
     BOOL invert = self.invertForDarkTheme;
     WXColorScene scene = [self colorSceneType];
-    UIColor* usingBorderTopColor = [self.weexInstance chooseColor:_borderTopColor darkThemeColor:_darkThemeBorderTopColor invert:invert scene:scene];
-    UIColor* usingBorderRightColor = [self.weexInstance chooseColor:_borderRightColor darkThemeColor:_darkThemeBorderRightColor invert:invert scene:scene];
-    UIColor* usingBorderBottomColor = [self.weexInstance chooseColor:_borderBottomColor darkThemeColor:_darkThemeBorderBottomColor invert:invert scene:scene];
-    UIColor* usingBorderLeftColor = [self.weexInstance chooseColor:_borderLeftColor darkThemeColor:_darkThemeBorderLeftColor invert:invert scene:scene];
+    UIColor* usingBorderTopColor = [self.weexInstance chooseColor:_borderTopColor lightThemeColor:_lightThemeBorderTopColor darkThemeColor:_darkThemeBorderTopColor invert:invert scene:scene];
+    UIColor* usingBorderRightColor = [self.weexInstance chooseColor:_borderRightColor lightThemeColor:_lightThemeBorderRightColor darkThemeColor:_darkThemeBorderRightColor invert:invert scene:scene];
+    UIColor* usingBorderBottomColor = [self.weexInstance chooseColor:_borderBottomColor lightThemeColor:_lightThemeBorderBottomColor darkThemeColor:_darkThemeBorderBottomColor invert:invert scene:scene];
+    UIColor* usingBorderLeftColor = [self.weexInstance chooseColor:_borderLeftColor lightThemeColor:_lightThemeBorderLeftColor darkThemeColor:_darkThemeBorderLeftColor invert:invert scene:scene];
     
     BOOL colorEqual = [usingBorderTopColor isEqual:usingBorderRightColor] &&
         [usingBorderRightColor isEqual:usingBorderBottomColor] &&
@@ -659,6 +659,32 @@
             [self setNeedsDisplay];
         }
     } while (0);
+    do {
+        BOOL needsDisplay = NO;
+        if (styles[@"lightThemeBorderColor"]) {
+            _lightThemeBorderTopColor = _lightThemeBorderLeftColor = _lightThemeBorderRightColor = _lightThemeBorderBottomColor = [WXConvert UIColor:styles[@"lightThemeBorderColor"]];
+            needsDisplay = YES;
+        }
+        if (styles[@"lightThemeBorderTopColor"]) {
+            _lightThemeBorderTopColor = [WXConvert UIColor:styles[@"lightThemeBorderTopColor"]];
+            needsDisplay = YES;
+        }
+        if (styles[@"lightThemeBorderLeftColor"]) {
+            _lightThemeBorderLeftColor = [WXConvert UIColor:styles[@"lightThemeBorderLeftColor"]];
+            needsDisplay = YES;
+        }
+        if (styles[@"lightThemeBorderRightColor"]) {
+            _lightThemeBorderRightColor = [WXConvert UIColor:styles[@"lightThemeBorderRightColor"]];
+            needsDisplay = YES;
+        }
+        if (styles[@"lightThemeBorderBottomColor"]) {
+            _lightThemeBorderBottomColor = [WXConvert UIColor:styles[@"lightThemeBorderBottomColor"]];
+            needsDisplay = YES;
+        }
+        if (needsDisplay && updating) {
+            [self setNeedsDisplay];
+        }
+    } while (0);
     WX_CHECK_BORDER_PROP_PIXEL(Width, Top, Left, Bottom, Right)
     WX_CHECK_BORDER_PROP_PIXEL(Radius, TopLeft, TopRight, BottomLeft, BottomRight)
 
@@ -672,9 +698,9 @@
         } else if (!nowNeedsDrawBorder) {
             [self _resetNativeBorderRadius];
             _layer.borderWidth = _borderTopWidth;
-            _layer.borderColor = [self.weexInstance chooseColor:_borderTopColor darkThemeColor:_darkThemeBorderTopColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor;
+            _layer.borderColor = [self.weexInstance chooseColor:_borderTopColor lightThemeColor:_lightThemeBorderTopColor darkThemeColor:_darkThemeBorderTopColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor;
             if ((_transition.transitionOptions & WXTransitionOptionsBackgroundColor) != WXTransitionOptionsBackgroundColor ) {
-                _layer.backgroundColor = [self.weexInstance chooseColor:self.styleBackgroundColor darkThemeColor:self.darkThemeBackgroundColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor;
+                _layer.backgroundColor = [self.weexInstance chooseColor:self.styleBackgroundColor lightThemeColor:self.lightThemeBackgroundColor darkThemeColor:self.darkThemeBackgroundColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor;
             }
         }
     }
@@ -686,7 +712,7 @@
     WXRoundedRect *borderRect = [[WXRoundedRect alloc] initWithRect:rect topLeft:_borderTopLeftRadius topRight:_borderTopRightRadius bottomLeft:_borderBottomLeftRadius bottomRight:_borderBottomRightRadius];
     WXRadii *radii = borderRect.radii;
     BOOL hasBorderRadius = [radii hasBorderRadius];
-    UIColor* currentBgColor = [self.weexInstance chooseColor:self.styleBackgroundColor darkThemeColor:self.darkThemeBackgroundColor invert:self.invertForDarkTheme scene:[self colorSceneType]];
+    UIColor* currentBgColor = [self.weexInstance chooseColor:self.styleBackgroundColor lightThemeColor:self.lightThemeBackgroundColor darkThemeColor:self.darkThemeBackgroundColor invert:self.invertForDarkTheme scene:[self colorSceneType]];
     return (!hasBorderRadius) && _opacity == 1.0 && CGColorGetAlpha(currentBgColor.CGColor) == 1.0 && [self _needsDrawBorder];
 }
 
@@ -708,6 +734,24 @@
     return _borderTopLeftRadius > 0.001 || _borderTopRightRadius > 0.001 || _borderBottomLeftRadius > 0.001 || _borderBottomLeftRadius > 0.001;
 }
 
+- (WXBoxShadow*)_chooseBoxShadow
+{
+    if ([self.weexInstance isDarkTheme]) {
+        if (_darkThemeBoxShadow) {
+            return _darkThemeBoxShadow;
+        }
+        else {
+            return _boxShadow;
+        }
+    }
+    else if (_lightThemeBoxShadow) {
+        return _lightThemeBoxShadow;
+    }
+    else {
+        return _boxShadow;
+    }
+}
+
 #pragma mark - Deprecated
 
 - (WXDisplayBlock)displayBlock
diff --git a/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.mm b/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.mm
index 8a9d18c..fd5eb88 100644
--- a/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.mm
+++ b/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.mm
@@ -135,14 +135,7 @@
                 strongSelf.layer.transform = CATransform3DIdentity;
             }
             
-            WXBoxShadow* usingBoxShadow = nil;
-            if (strongSelf->_darkThemeBoxShadow && [strongSelf.weexInstance isDarkTheme]) {
-                usingBoxShadow = strongSelf->_darkThemeBoxShadow;
-            }
-            else {
-                usingBoxShadow = strongSelf->_boxShadow;
-            }
-            
+            WXBoxShadow* usingBoxShadow = [strongSelf _chooseBoxShadow];            
             if (!CGRectEqualToRect(strongSelf.view.frame,strongSelf.calculatedFrame)) {
                 strongSelf.view.frame = strongSelf.calculatedFrame;
                 strongSelf->_absolutePosition = CGPointMake(NAN, NAN);
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXComponent.mm b/ios/sdk/WeexSDK/Sources/Model/WXComponent.mm
index 85dfafe..d9d4f31 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXComponent.mm
+++ b/ios/sdk/WeexSDK/Sources/Model/WXComponent.mm
@@ -73,6 +73,7 @@
 @synthesize transform = _transform;
 @synthesize styleBackgroundColor = _styleBackgroundColor;
 @synthesize darkThemeBackgroundColor = _darkThemeBackgroundColor;
+@synthesize lightThemeBackgroundColor = _lightThemeBackgroundColor;
 
 #pragma mark Life Cycle
 
@@ -401,7 +402,7 @@
         _view.hidden = _visibility == WXVisibilityShow ? NO : YES;
         _view.clipsToBounds = _clipToBounds;
         if (![self _needsDrawBorder]) {
-            _layer.borderColor = [self.weexInstance chooseColor:_borderTopColor darkThemeColor:_darkThemeBorderTopColor invert:_invertForDarkTheme scene:[self colorSceneType]].CGColor;
+            _layer.borderColor = [self.weexInstance chooseColor:_borderTopColor lightThemeColor:_lightThemeBorderTopColor darkThemeColor:_darkThemeBorderTopColor invert:_invertForDarkTheme scene:[self colorSceneType]].CGColor;
             _layer.borderWidth = _borderTopWidth;
             [self _resetNativeBorderRadius];
             _layer.opacity = _opacity;
@@ -409,7 +410,7 @@
             /* Also set background color to view to fix that problem that system may
              set dynamic color to UITableView. Without these codes, event if we set
              clear color to layer, the table view could not be transparent. */
-            UIColor* choosedColor = [self.weexInstance chooseColor:self.styleBackgroundColor darkThemeColor:self.darkThemeBackgroundColor invert:_invertForDarkTheme scene:[self colorSceneType]];
+            UIColor* choosedColor = [self.weexInstance chooseColor:self.styleBackgroundColor lightThemeColor:self.lightThemeBackgroundColor darkThemeColor:self.darkThemeBackgroundColor invert:_invertForDarkTheme scene:[self colorSceneType]];
             if (choosedColor == [UIColor clearColor]) {
                 _view.backgroundColor = choosedColor;
             }
@@ -426,14 +427,7 @@
         
         [self _adjustForRTL];
         
-        WXBoxShadow* usingBoxShadow = nil;
-        if (_darkThemeBoxShadow && [self.weexInstance isDarkTheme]) {
-            usingBoxShadow = _darkThemeBoxShadow;
-        }
-        else {
-            usingBoxShadow = _boxShadow;
-        }
-        
+        WXBoxShadow* usingBoxShadow = [self _chooseBoxShadow];        
         if (usingBoxShadow) {
             _lastBoxShadow = usingBoxShadow;
             [self configBoxShadow:usingBoxShadow];
@@ -876,8 +870,22 @@
         return;
     }
     
+    NSString* styleValue = nil;
     BOOL isDark = [self.weexInstance isDarkTheme];
-    NSString* styleValue = isDark ? (_darkThemeBackgroundImage ?: _backgroundImage) : _backgroundImage;
+    if (isDark) {
+        if (_darkThemeBackgroundImage) {
+            styleValue = _darkThemeBackgroundImage;
+        }
+        else {
+            styleValue = _backgroundImage;
+        }
+    }
+    else if (_lightThemeBackgroundImage) {
+        styleValue = _lightThemeBackgroundImage;
+    }
+    else {
+        styleValue = _backgroundImage;
+    }
     
     NSDictionary * linearGradient = [WXUtility linearGradientWithBackgroundImage:styleValue];
     if (!linearGradient) {
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h
index e2df9fb..7e1376a 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h
@@ -473,7 +473,11 @@
  Choose final color between original color and dark-mode one.
  Also considering invert.
  */
-- (UIColor*)chooseColor:(UIColor*)originalColor darkThemeColor:(UIColor*)darkColor invert:(BOOL)invert scene:(WXColorScene)scene;
+- (UIColor*)chooseColor:(UIColor*)originalColor
+        lightThemeColor:(UIColor*)lightColor
+         darkThemeColor:(UIColor*)darkColor
+                 invert:(BOOL)invert
+                  scene:(WXColorScene)scene;
 
 /** 
  * Deprecated 
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
index 217d8e6..711ff39 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
@@ -1245,7 +1245,11 @@
     }
 }
 
-- (UIColor*)chooseColor:(UIColor*)originalColor darkThemeColor:(UIColor*)darkColor invert:(BOOL)invert scene:(WXColorScene)scene
+- (UIColor*)chooseColor:(UIColor*)originalColor
+        lightThemeColor:(UIColor*)lightColor
+         darkThemeColor:(UIColor*)darkColor
+                 invert:(BOOL)invert
+                  scene:(WXColorScene)scene
 {
     if (![WXUtility isDarkThemeSupportEnabled]) {
         return originalColor;
@@ -1266,6 +1270,9 @@
             return originalColor;
         }
     }
+    else if (lightColor) {
+        return lightColor;
+    }
     else {
         return originalColor;
     }
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m b/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m
index f75728a..c306c95 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m
@@ -212,6 +212,7 @@
     
     BOOL isDarkTheme = [target.weexInstance isDarkTheme];
     BOOL updatingDarkThemeBackgroundColor = styles[@"darkThemeBackgroundColor"] != nil;
+    BOOL updatingLightThemeBackgroundColor = styles[@"lightThemeBackgroundColor"] != nil;
     
     for (NSString *property in styles) {
         if ([property isEqualToString:@"backgroundColor"]) {
@@ -222,6 +223,10 @@
                  We ignore transition animation for "backgroundColor" */
                 continue;
             }
+            else if (!isDarkTheme && (updatingLightThemeBackgroundColor ||
+                                      componentRawStyles[@"lightThemeBackgroundColor"] != nil)) {
+                continue;
+            }
         }
         else if ([property isEqualToString:@"darkThemeBackgroundColor"]) {
             if (!isDarkTheme || componentRawStyles[@"darkThemeBackgroundColor"] == nil) {
@@ -231,6 +236,11 @@
                 continue;
             }
         }
+        else if ([property isEqualToString:@"lightThemeBackgroundColor"]){
+            if (isDarkTheme || componentRawStyles[@"lightThemeBackgroundColor"] == nil) {
+                continue;
+            }
+        }
         
         WXAnimationInfo *info = [WXAnimationInfo new];
         info.duration = duration;
@@ -312,7 +322,8 @@
             }
             target.transform = wxTransform;
         } else if ([property isEqualToString:@"backgroundColor"] ||
-                   [property isEqualToString:@"darkThemeBackgroundColor"]) {
+                   [property isEqualToString:@"darkThemeBackgroundColor"] ||
+                   [property isEqualToString:@"lightThemeBackgroundColor"]) {
             info.propertyName = @"backgroundColor";
             info.fromValue = (__bridge id)(layer.backgroundColor);
             UIColor* toColor = [WXConvert UIColor:value];
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXTransition.mm b/ios/sdk/WeexSDK/Sources/Module/WXTransition.mm
index b597232..c648907 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXTransition.mm
+++ b/ios/sdk/WeexSDK/Sources/Module/WXTransition.mm
@@ -84,6 +84,7 @@
                                                            @"top": @(WXTransitionOptionsTop),
                                                            @"backgroundColor": @(WXTransitionOptionsBackgroundColor),
                                                            @"darkThemeBackgroundColor": @(WXTransitionOptionsBackgroundColor),
+                                                           @"lightThemeBackgroundColor": @(WXTransitionOptionsBackgroundColor),
                                                            @"transform": @(WXTransitionOptionsTransform),
                                                            @"opacity": @(WXTransitionOptionsOpacity)
                                                            };
@@ -112,6 +113,7 @@
     
     BOOL isDarkTheme = [targetComponent.weexInstance isDarkTheme];
     BOOL updatingDarkThemeBackgroundColor = styles[@"darkThemeBackgroundColor"] != nil;
+    BOOL updatingLightThemeBackgroundColor = styles[@"lightThemeBackgroundColor"] != nil;
     
     for (NSString *key in styles) {
         if (self.transitionOptions & [self transitionOptionsFromString:key]) {
@@ -124,6 +126,11 @@
                     [futileStyles setObject:styles[key] forKey:key];
                     continue;
                 }
+                else if (!isDarkTheme && (updatingLightThemeBackgroundColor ||
+                                          componentRawStyles[@"lightThemeBackgroundColor"] != nil)) {
+                    [futileStyles setObject:styles[key] forKey:key];
+                    continue;
+                }
             }
             else if ([key isEqualToString:@"darkThemeBackgroundColor"]) {
                 if (!isDarkTheme || componentRawStyles[@"darkThemeBackgroundColor"] == nil) {
@@ -134,6 +141,12 @@
                     continue;
                 }
             }
+            else if ([key isEqualToString:@"lightThemeBackgroundColor"]){
+                if (isDarkTheme || componentRawStyles[@"lightThemeBackgroundColor"] == nil) {
+                    [futileStyles setObject:styles[key] forKey:key];
+                    continue;
+                }
+            }
             
             [_filterStyles setObject:styles[key] forKey:key];
             if (![key isEqualToString:@"transform"]) {
@@ -141,7 +154,8 @@
                     // Get animation 'from' value from raw styles.
                     id styleValue = componentRawStyles[key];
                     if ([key isEqualToString:@"backgroundColor"] ||
-                        [key isEqualToString:@"darkThemeBackgroundColor"]) {
+                        [key isEqualToString:@"darkThemeBackgroundColor"] ||
+                        [key isEqualToString:@"lightThemeBackgroundColor"]) {
                         if (styleValue == nil) {
                             // background color is transparent by default.
                             styleValue = @"transparent";
@@ -234,7 +248,8 @@
             _propertyArray = [NSMutableArray new];
         }
         if ([singleProperty isEqualToString:@"backgroundColor"] ||
-            [singleProperty isEqualToString:@"darkThemeBackgroundColor"]) {
+            [singleProperty isEqualToString:@"darkThemeBackgroundColor"] ||
+            [singleProperty isEqualToString:@"lightThemeBackgroundColor"]) {
             UIColor* fromColor = [WXConvert UIColor:_oldFilterStyles[singleProperty]];
             UIColor* toColor = [WXConvert UIColor:_filterStyles[singleProperty]];
             if ([_targetComponent.weexInstance isDarkTheme] &&
diff --git a/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.mm b/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.mm
index a5a3265..5165d7f 100644
--- a/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.mm
+++ b/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.mm
@@ -75,6 +75,14 @@
     }\
 } while(0);
 
+#define WX_BOARD_RADIUS_LIGHT_THEME_COLOR_RESET_ALL(key)\
+do {\
+    if (styles && [styles containsObject:@#key]) {\
+        _lightThemeBorderTopColor = _lightThemeBorderLeftColor = _lightThemeBorderRightColor = _lightThemeBorderBottomColor = [UIColor blackColor];\
+        [self setNeedsDisplay];\
+    }\
+} while(0);
+
 #define WX_BOARD_COLOR_RESET(key)\
 do {\
     if (styles && [styles containsObject:@#key]) {\
@@ -186,8 +194,12 @@
     if (styles[@"darkThemeBackgroundColor"]) {
         self.darkThemeBackgroundColor = [WXConvert UIColor:styles[@"darkThemeBackgroundColor"]];
     }
+    if (styles[@"lightThemeBackgroundColor"]) {
+        self.lightThemeBackgroundColor = [WXConvert UIColor:styles[@"lightThemeBackgroundColor"]];
+    }
     _backgroundImage = styles[@"backgroundImage"] ? [WXConvert NSString:styles[@"backgroundImage"]]: nil;
     _darkThemeBackgroundImage = styles[@"darkThemeBackgroundImage"] ? [WXConvert NSString:styles[@"darkThemeBackgroundImage"]] : nil;
+    _lightThemeBackgroundImage = styles[@"lightThemeBackgroundImage"] ? [WXConvert NSString:styles[@"lightThemeBackgroundImage"]] : nil;
     _opacity = styles[@"opacity"] ? [WXConvert CGFloat:styles[@"opacity"]] : 1.0;
     _clipToBounds = styles[@"overflow"] ? [WXConvert WXClipType:styles[@"overflow"]] : NO;
     _visibility = styles[@"visibility"] ? [WXConvert WXVisibility:styles[@"visibility"]] : WXVisibilityShow;
@@ -199,6 +211,9 @@
     if (styles[@"darkThemeBoxShadow"]) {
         _darkThemeBoxShadow = [WXConvert WXBoxShadow:styles[@"darkThemeBoxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor];
     }
+    if (styles[@"lightThemeBoxShadow"]) {
+        _lightThemeBoxShadow = [WXConvert WXBoxShadow:styles[@"lightThemeBoxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor];
+    }
 }
 
 - (void)_transitionUpdateViewProperty:(NSDictionary *)styles
@@ -210,6 +225,9 @@
     if (styles[@"darkThemeBackgroundColor"]) {
         self.darkThemeBackgroundColor = [WXConvert UIColor:styles[@"darkThemeBackgroundColor"]];
     }
+    if (styles[@"lightThemeBackgroundColor"]) {
+        self.lightThemeBackgroundColor = [WXConvert UIColor:styles[@"lightThemeBackgroundColor"]];
+    }
     if (styles[@"opacity"]) {
         _opacity = [WXConvert CGFloat:styles[@"opacity"]];
     }
@@ -224,15 +242,11 @@
     if (styles[@"darkThemeBoxShadow"]) {
         _darkThemeBoxShadow = [WXConvert WXBoxShadow:styles[@"darkThemeBoxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor];
     }
-    if (styles[@"boxShadow"] || styles[@"darkThemeBoxShadow"]) {
-        WXBoxShadow* usingBoxShadow = nil;
-        if (_darkThemeBoxShadow && [self.weexInstance isDarkTheme]) {
-            usingBoxShadow = _darkThemeBoxShadow;
-        }
-        else {
-            usingBoxShadow = _boxShadow;
-        }
-        
+    if (styles[@"lightThemeBoxShadow"]) {
+        _lightThemeBoxShadow = [WXConvert WXBoxShadow:styles[@"lightThemeBoxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor];
+    }
+    if (styles[@"boxShadow"] || styles[@"darkThemeBoxShadow"] || styles[@"lightThemeBoxShadow"]) {
+        WXBoxShadow* usingBoxShadow = [self _chooseBoxShadow];
         if (usingBoxShadow) {
             _lastBoxShadow = usingBoxShadow;
             [self configBoxShadow:usingBoxShadow];
@@ -250,6 +264,11 @@
         [self setNeedsDisplay];
     }
     
+    if (styles[@"lightThemeBackgroundColor"]) {
+        self.lightThemeBackgroundColor = [WXConvert UIColor:styles[@"lightThemeBackgroundColor"]];
+        [self setNeedsDisplay];
+    }
+    
     if (styles[@"backgroundImage"]) {
         _backgroundImage = [WXConvert NSString:styles[@"backgroundImage"]];
     }
@@ -257,9 +276,14 @@
     if (styles[@"darkThemeBackgroundImage"]) {
         _darkThemeBackgroundImage = [WXConvert NSString:styles[@"darkThemeBackgroundImage"]];
     }
+    if (styles[@"lightThemeBackgroundImage"]) {
+        _lightThemeBackgroundImage = [WXConvert NSString:styles[@"lightThemeBackgroundImage"]];
+    }
     
-    if (styles[@"backgroundImage"] || styles[@"darkThemeBackgroundImage"]) {
-        if (_backgroundImage || _darkThemeBackgroundImage) {
+    if (styles[@"backgroundImage"] ||
+        styles[@"darkThemeBackgroundImage"] ||
+        styles[@"lightThemeBackgroundImage"]) {
+        if (_backgroundImage || _darkThemeBackgroundImage || _lightThemeBackgroundImage) {
             [self setGradientLayer];
         }
     }
@@ -344,11 +368,18 @@
     WX_BOARD_COLOR_RESET(borderLeftColor);
     WX_BOARD_COLOR_RESET(borderRightColor);
     WX_BOARD_COLOR_RESET(borderBottomColor);
+    
     WX_BOARD_RADIUS_DARK_THEME_COLOR_RESET_ALL(darkThemeBorderColor);
     WX_BOARD_COLOR_RESET(darkThemeBorderTopColor);
     WX_BOARD_COLOR_RESET(darkThemeBorderLeftColor);
     WX_BOARD_COLOR_RESET(darkThemeBorderRightColor);
     WX_BOARD_COLOR_RESET(darkThemeBorderBottomColor);
+    
+    WX_BOARD_RADIUS_LIGHT_THEME_COLOR_RESET_ALL(lightThemeBorderColor);
+    WX_BOARD_COLOR_RESET(lightThemeBorderTopColor);
+    WX_BOARD_COLOR_RESET(lightThemeBorderLeftColor);
+    WX_BOARD_COLOR_RESET(lightThemeBorderRightColor);
+    WX_BOARD_COLOR_RESET(lightThemeBorderBottomColor);
 }
 
 - (void)_resetStyles:(NSArray *)styles
@@ -361,6 +392,10 @@
         self.darkThemeBackgroundColor = nil;
         [self setNeedsDisplay];
     }
+    if (styles && [styles containsObject:@"lightThemeBackgroundColor"]) {
+        self.lightThemeBackgroundColor = nil;
+        [self setNeedsDisplay];
+    }
     
     if (styles && [styles containsObject:@"boxShadow"]) {
         _lastBoxShadow = _boxShadow;
@@ -371,6 +406,10 @@
         _darkThemeBoxShadow = nil;
         [self setNeedsDisplay];
     }
+    if (styles && [styles containsObject:@"lightThemeBoxShadow"]) {
+        _lightThemeBoxShadow = nil;
+        [self setNeedsDisplay];
+    }
     
     if (styles && [styles containsObject:@"backgroundImage"]) {
         _backgroundImage = nil;
@@ -378,7 +417,12 @@
     if (styles && [styles containsObject:@"darkThemeBackgroundImage"]) {
         _darkThemeBackgroundImage = nil;
     }
-    if (styles && ([styles containsObject:@"backgroundImage"] || [styles containsObject:@"darkThemeBackgroundImage"])) {
+    if (styles && [styles containsObject:@"lightThemeBackgroundImage"]) {
+        _lightThemeBackgroundImage = nil;
+    }
+    if (styles && ([styles containsObject:@"backgroundImage"] ||
+                   [styles containsObject:@"darkThemeBackgroundImage"] ||
+                   [styles containsObject:@"lightThemeBackgroundImage"])) {
         [self setGradientLayer];
     }