CSS3 and GWT in perfect harmony (4).pdf - Google Drive

4 downloads 94 Views 3MB Size Report
There was a problem previewing this document. Retrying... Download. Connect more apps... Try one of the apps below to op
GWT.create 2015

CSS3 and GWT in perfect harmony JULIEN DRAMAIX

Julien Dramaix Software Engineer at Arcbees +JulienDramaix @jDramaix

What is this about?

What is this about ?

New syntax for CssResource based on GSS

Why?

Why ?

DRY principle is missing with CSS.

Why ?

Missing CSS3 support.

What is Closurestylesheets?

What is Closure-stylesheets?

It’s an extension to CSS

What is Closure-stylesheets?

It’s an extension to CSS

Write gss and compile to CSS

What is Closure-stylesheets?

Support variables, conditionals, mixing...

What is Closure-stylesheets?

Support minification, linting, RTL flipping, renaming

What is Closure-stylesheets?

Full CSS3 support!

What is Closure-stylesheets?

Open Source project written and maintained by Google!

Example: @def BG_COLOR rgb(235, 239, 249); @defmixin size(WIDTH, HEIGHT) { width: WIDTH; height: HEIGHT; } body { background-color: BG_COLOR; }

.logo { @mixin size(150px, 55px); background-image: url('http://www.google.com/images/logo_sm.gif'); }

Compile to: body { background-color: #ebeff9; } .logo { width: 150px; height: 55px; background-image: url('http://www.google. com/images/logo_sm.gif'); }

How to use it?

How to use it ?

1. Create a GSS file.

myFirstGss.gss: @def BG_COLOR rgb(235, 239, 249); @defmixin size(WIDTH, HEIGHT) { width: WIDTH; height: HEIGHT; } body { background-color: BG_COLOR; }

.logo { @mixin size(150px, 55px); background-image: url('http://www.google.com/images/logo_sm.gif'); }

How to use it ?

2. Create your CssResource interface as usual.

public interface MyFirstGss extends CssResource { String foo(); } public interface Resources extends ClientBundle { MyFirstGss myFirstGss(); }

public interface MyFirstGss extends CssResource { String foo(); } public interface Resources extends ClientBundle { @Source("myFirstGss.gss") MyFirstGss css(); }

How to use it ?

3. Enable GSS in your GWT module file.



How to use it ?

4. For UiBinder, use the attribute GSS in your inline style.

/* Constants*/ @def PADDING_RIGHT 50px; @def PADDING_LEFT 50px; /*mixin */ @defmixin size(WIDTH, HEIGHT) { width: WIDTH; height: HEIGHT; } /* … */

How to use it ?

GSS will be the default syntax in GWT 2.8.

Features and syntax.

Features and syntax

Constants.

@def BG_COLOR rgb(235, 239, 249); @def PADDING_RIGHT 15px; @def CONTAINER_COLOR BG_COLOR;

@def BG_COLOR rgb(235, 239, 249); @def PADDING_RIGHT 15px; @def CONTAINER_COLOR BG_COLOR;

Constant name in UPPERCASE !

Features and syntax

Runtime evaluation.

@def BLUE eval("com.foo.bar.client.resource.Colors.BLUE"); .red { color: eval("com.foo.bar.client.resource.Colors.RED"); }

@def BLUE eval("com.foo.bar.client.resource.Colors.BLUE"); .red { color: eval("com.foo.bar.client.resource.Colors.RED"); }

Any valid Java expression

Features and syntax

Functions.

.content { position: absolute; margin-left: add(LEFT_PADDING, /* padding left */ LEFT_HAND_NAV_WIDTH, RIGHT_PADDING); /* padding right */ }

FUNCTIONS

Built-in arithmetic functions

➔ ➔ ➔ ➔ ➔ ➔

add() sub() mult() divide() min() max()

FUNCTIONS

Built-in color manipulation function

➔ ➔ ➔ ➔ ➔ ➔

blendColorsHsb(startColor, endColor) blendColorsRgb(startColor, endColor) makeMutedColor(backgroundColor, foregroundColor [, saturationLoss]) addHsbToCssColor(baseColor, hueToAdd, saturationToAdd, brightnessToAdd) makeContrastingColor(color, similarityIndex) adjustBrightness(color, brightness)

FUNCTIONS

You can define your own function...

FUNCTIONS

… or not.

FUNCTIONS

Should be available in GWT 2.8 Stay tuned!

… or not.

Features and syntax

Mixins.

@defmixin size(WIDTH, HEIGHT) { width: WIDTH; height: HEIGHT; } .container { @mixin size(550px, 500px); }

Compile to: .container { width: 550px; height: 500px; }

@defmixin borderradius(TOP_RIGHT, BOTTOM_RIGHT, BOTTOM_LEFT, TOP_LEFT) { -webkit-border-top-right-radius: TOP_RIGHT; -webkit-border-bottom-right-radius: BOTTOM_RIGHT; -webkit-border-bottom-left-radius: BOTTOM_LEFT; -webkit-border-top-left-radius: TOP_LEFT; -moz-border-radius-topright: TOP_RIGHT; -moz-border-radius-bottomright: BOTTOM_RIGHT; -moz-border-radius-bottomleft: BOTTOM_LEFT; -moz-border-radius-topleft: TOP_LEFT; border-top-right-radius: TOP_RIGHT; border-bottom-right-radius: BOTTOM_RIGHT; border-bottom-left-radius: BOTTOM_LEFT; border-top-left-radius: TOP_LEFT; }

.foo { @mixin borderradius(5px, 0, 5px, 0) }

http://dev.arcbees.com/gsss/mixins/

Css animations done with GSSS: visit http://www.arcbees.com

Features and syntax

Conditional CSS.

CONDITIONAL CSS

Compile time conditional versus Runtime conditional.

CONDITIONAL CSS

Conditional evaluated at compile time.

CONDITIONAL CSS

Conditional evaluated at compile time.

Based on permutations or properties you define in your module file.

@if (is("ie8") || is("ie9") && !is("locale", "en")) { .foo{ /* … */ } } @elseif (is("safari")) { .foo{ /* … */ } } @elseif is("customProperty", "customValue") { .foo{ /* … */ } } @else { .foo{ /* … */ } }

CONDITIONAL CSS

Special case: single boolean value configuration property defined in uppercase.



@if (USE_EXTERNAL) { @external '*'; }

CONDITIONAL CSS

Conditional evaluated at runtime.

@if (eval("com.foo.Bar.FOO")) { /* ... */ } @elseif (eval('com.foo.Bar.foo("foo")')) { /* ... */ }

@if (eval("com.foo.Bar.FOO")) { /* ... */ } @elseif (eval('com.foo.Bar.foo("foo")')) { /* ... */ }

Any valid Java expression returning a boolean.

CONDITIONAL CSS

Differences between runtime and compile-time conditionals.

This is valid

@if (is("ie8") || is("ie9")) { @def PADDING 15px; } @else { @def PADDING 0; }

This is not

@if (eval("com.foo.Bar.useLargePadding()")) { @def PADDING 15px; } @else { @def PADDING 0; }

This is valid

@if (USE_EXTERNAL) { @external '*'; }

This is not

@if (eval("com.foo.Bar.useExternal()")) { @external '*';' }

CONDITIONAL CSS

Runtime conditionals can only contain CSS rules.

Features and syntax

Resources Url

public interface Resources extends ClientBundle { ImageResource iconPrintWhite(); ImageResource logout(); $ java -cp $CONVERTER_CLASS_PATH \ com.google.gwt.resources. converter.Css2Gss /path/to/cssFileToconvert.css

THE CONVERTER

Batch conversion.

$ CONVERTER_CLASS_PATH="/path/to/gwt-user.jar:/path/to/gwt-dev. jar" $ java -cp $CONVERTER_CLASS_PATH \ com.google.gwt.resources.converter.Css2Gss -r /path/to/project

THE CONVERTER

Converter Web Application: http://css2gss.appspot.com

How to migrate

Support of legacy?



SUPPORT OF LEGACY

Two conversion modes: strict or lenient

SUPPORT OF LEGACY

Two conversion mode: strict or lenient => Use strict only

How to migrate

Migration path.

MIGRATION PATH

➔ Enable GSS and the auto-conversion in strict mode. ➔ Fix issues. ➔ Use the converter and convert all your css files ➔ Set back auto-conversion to off.

Configuration

CONFIGURATION

CssResource.obfuscationPrefix



CssResource.obfuscationPrefix

Disable the obfuscation prefix if your page contains only one GWT application.



CONFIGURATION

CssResource.allowedAtRules