[Polymer] Custom Elements: Styling

Code:

<dom-module id="business-card">
    <template>
        <div class="card">
            <h1>Joe Maddalone</h1>
            <h2>Instructor</h2>
            <h3>egghead.io</h3>
        </div>
        <style>
            .card{
                background-color: #e8e8e8;
                box-shadow: 0 0 1px #e8e8e8;
                position: relative;
                font-family: monospace;
                display: flex;
                width: 350px;
                height: 200px;
                flex-flow: column wrap;
                margin: 20px;
            }
            .card:before, .card:after {
                z-index: -1;
                position: absolute;
                content: "";
                bottom: 15px;
                left: 10px;
                width: 50%;
                top: 80%;
                max-width:300px;
                background: rgba(0, 0, 0, 0.7);
                box-shadow: 0 15px 10px rgba(0, 0, 0, 0.7);
                transform: rotate(-3deg);
            }
            .card:after {
                transform: rotate(3deg);
                right: 10px;
                left: auto;
            }
            .card h1,.card h2,.card h3 {
                font-weight: normal;
                color: var(--custom-text-color,--text-color)
            }
            .card h1 {
                flex:4;
                padding-top: 50px;
                font-size: 24px;
                align-self: center;
            }
            .card h2 {
                flex:3;
                margin-top: -30px;
                align-self: center;
                font-size: 12px;
            }
            .card h3 {
                flex:1;
                font-size: 14px;
                align-self: flex-end;
                margin-right: 20px;
            }
        </style>
    </template>
    <script>
        Polymer( {
            is: "business-card"
        } )
    </script>
</dom-module>

Using parent compoment in css :host

  • remove the <div class="host"></div>
  • change .card class to :host, which can be consider as <div class=":host"><h1>..</h1><h2>..</h2><h3>..</h3></div>
<dom-module id="business-card">
    <template>
        <h1>Joe Maddalone</h1>
        <h2>Instructor</h2>
        <h3>egghead.io</h3>
        <style>
            :host {
                background-color: #e8e8e8;
                box-shadow: 0 0 1px #e8e8e8;
                position: relative;
                font-family: monospace;
                display: flex;
                width: 350px;
                height: 200px;
                flex-flow: column wrap;
                margin: 20px;
            }

            :host:before, :host:after {
                z-index: -1;
                position: absolute;
                content: "";
                bottom: 15px;
                left: 10px;
                width: 50%;
                top: 80%;
                max-width: 300px;
                background: rgba(0, 0, 0, 0.7);
                box-shadow: 0 15px 10px rgba(0, 0, 0, 0.7);
                transform: rotate(-3deg);
            }

            :host:after {
                transform: rotate(3deg);
                right: 10px;
                left: auto;
            }

            h1, h2, h3 {
                font-weight: normal;
                color: var(--custom-text-color, --text-color)
            }

            h1 {
                flex: 4;
                padding-top: 50px;
                font-size: 24px;
                align-self: center;
            }

            h2 {
                flex: 3;
                margin-top: -30px;
                align-self: center;
                font-size: 12px;
            }

            h3 {
                flex: 1;
                font-size: 14px;
                align-self: flex-end;
                margin-right: 20px;
            }
        </style>
    </template>
    <script>
        Polymer( {
            is: "business-card"
        } )
    </script>
</dom-module>

Create variable in css:

:host{
                --card-color: #e8e8e8;
                --text-color: #222;
            }
            :host {
                background-color: var(--card-color);
                box-shadow: 0 0 1px var(--card-color);
                ...
            }    

Default value:

                background-color: var(--custom-card-color, --card-color);
                box-shadow: 0 0 1px var(--custom-card-color, --card-color);

--card-color will be the default value if --custom-card-color not exists.

------------------------------

index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Polymer</title>
    <script src="bower_components/webcomponentsjs/webcomponents-lite.js"></script>
    <link rel="import" href="bower_components/polymer/polymer.html">
    <link rel="import" href="my-card.html">
</head>
<body>
<my-card></my-card>
</body>
</html>

my-card.html:

<link rel="import" href="./business-card.html">
<dom-module id="my-card">
    <template>
        <business-card></business-card>
        <business-card class="red"></business-card>
        <style>
            .red{
                --custom-card-color: red;
                --custom-text-color: white;
            }
        </style>
    </template>
    <script>
        Polymer( {
            is: "my-card"
        } )
    </script>
</dom-module>

busniess-card.html:

<dom-module id="business-card">
    <template>
        <h1>Joe Maddalone</h1>
        <h2>Instructor</h2>
        <h3>egghead.io</h3>
        <style>
            :host{
                --card-color: #e8e8e8;
                --text-color: #222;
            }
            :host {
                background-color: var(--custom-card-color, --card-color);
                box-shadow: 0 0 1px var(--custom-card-color, --card-color);
                position: relative;
                font-family: monospace;
                display: flex;
                width: 350px;
                height: 200px;
                flex-flow: column wrap;
                margin: 20px;
            }

            :host:before, :host:after {
                z-index: -1;
                position: absolute;
                content: "";
                bottom: 15px;
                left: 10px;
                width: 50%;
                top: 80%;
                max-width: 300px;
                background: rgba(0, 0, 0, 0.7);
                box-shadow: 0 15px 10px rgba(0, 0, 0, 0.7);
                transform: rotate(-3deg);
            }

            :host:after {
                transform: rotate(3deg);
                right: 10px;
                left: auto;
            }

            h1, h2, h3 {
                font-weight: normal;
                color: var(--custom-text-color, --text-color)
            }

            h1 {
                flex: 4;
                padding-top: 50px;
                font-size: 24px;
                align-self: center;
            }

            h2 {
                flex: 3;
                margin-top: -30px;
                align-self: center;
                font-size: 12px;
            }

            h3 {
                flex: 1;
                font-size: 14px;
                align-self: flex-end;
                margin-right: 20px;
            }
        </style>
    </template>
    <script>
        Polymer( {
            is: "business-card"
        } )
    </script>
</dom-module>

时间: 2024-10-13 23:29:49

[Polymer] Custom Elements: Styling的相关文章

自定义元素(custom elements)

记录下自定义html自定义元素的相关心得: 浏览器将自定义元素保留在 DOM 之中,但不会任何语义.除此之外,自定义元素与标准元素都一致 事实上,浏览器提供了一个HTMLUnknownElement,HTMLElement对象,所有自定义元素都是该对象的实例. var tabs=document.createElement("tabs"); console.log(tabs instanceof HTMLUnknownElement);//true console.log(tabs i

Web Components之Custom Elements

什么是Web Component? Web Components 包含了多种不同的技术.你可以把Web Components当做是用一系列的Web技术创建的.可重用的用户界面组件的统称.Web Components使开发人员拥有扩展浏览器标签的能力,可以自由的进行定制组件.但截至本文时间,Web Components依然是W3C工作组的一个草案,并为被正式纳入标准,但这并不妨碍我们去学习它. Web组件 何为Web组件?Web组件相对于Web开发者来说并不陌生,Web组件是一套封装好的HTML,

使用custom elements和Shadow DOM自定义标签

具体的api我就不写 官网上面多  如果不知道这个的话也可以搜索一下 目前感觉这个还是相当好用的直接上码. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"&g

Knockoutjs:Component and Custom Elements(翻译文章)

Knockoutjs 的Components 是一种自定义的组件,它以一种强大.简介的方式将你自己的ui代码组织成一种单独的.可重用的模块,自定义的组件(Component)有以下特点: 1.可以替代单独的widgit或者控制逻辑,或者你自己application的整个模块: 2.包含自己的view,通常也包含了自己的viewModel(这个viewModel也可以不进行定义) 3.可以预加载,可以通过AMD或者其他模块系统的方式根据需要异步加载 4.可以接收参数,根据需要选择性的对这些参数进行

初识Polymer框架

什么是polymer? polymer由谷歌的Palm webOS团队打造,并在2013 Google I/O大会上推出,旨在实现Web Components,用最少的代码,解除框架间的限制的UI 框架. polymer的核心思想是"Everything is an element",一切皆组件. polymer 可以通过Twitter的包管理器bower,方便的进行组件(Elements)及包的依赖管理,不必自己从git上下载组件. polymer分层结构: 元素层(Elemets)

Google Polymer以及Web UI框架

时代在进步,原本前端只是用来简单的数据显示以及提交数据到后端处理逻辑的地方,而随着SPA的发展,前端的逻辑也越来越是庞大,恰巧,今天看微博的时候,发现一个概念讨论的比较多,就是 Web Components,顺藤摸瓜,做了一些了解,发现 Polymer 这样一个或许是未来的东东,至少有一点,chrome将会原生支持.收集了一些资料,多家学习. 1. Polymer Polymer由以下几层组成: 基础层(Foundation)——platform.js:基本构建块,其中大部分API最终将成为原生

【JavaScript】谈谈Google Polymer以及Web UI框架的未来

摘要:开发者Axel Rauschmayer在自己的博客上详解了Google Polymer的设计理念与组成架构,深得Polymer开发者的认同.他认为Polymer这样高互操作性的设计才应该是Web开发的未来. 虽然今年的Google I/O也已结束,但会上揭晓的新技术.新工具仍然让开发者兴奋不已.其中Web开发方面尤以Ploymer和Web Components为重. Polymer由加盟Google的原Palm webOS开发团队打造,是一套以“一切皆组件.最少化代码量.最少框架限制”为设

【转】Polymer API开发指南 (一)(翻译)

原文转自:http://segmentfault.com/blog/windwhinny/1190000000592324 翻译的不好,轻拍 Polymer是google的一款前端开发框架,其基于Shadow DOM.Custom Elements.MDV等最新浏览器特性构建,代表了下一代Web框架的方向:一切皆组件.尽量减少代码量.尽量减少框架限制. 名词解释 Attribute: 元素声明或者创建时需要的属性. Property: 属性.元素或者类向外提供的数据区域,例如js对象的属性. P

Facebook React 和 Web Components(Polymer)对比优势和劣势

目录结构 译者前言 Native vs. Compiled 原生语言对决预编译语言 Internal vs. External DSLs 内部与外部 DSLs 的对决 Types of DSLs - explanation DSLs 的种类 - 解释 Data binding 数据绑定 Native vs. VM 原生对决 VM(虚拟机) 译者前言 这是一篇来自 StackOverflow 的问答,提问的人认为 React 相比 WebComponents 有一些"先天不足"之处,列举