HTML
CSS
Babel
Result
Skip Results Iframe
EDIT ON
Live
Live
Live
This Pen is owned by
Ken Lane
on
CodePen
.
See more by @kenlane22 on CodePen
External CSS
https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.10.2/css/all.min.css
https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css
External JavaScript
https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css
https://unpkg.com/react@15.4.2/dist/react.js
https://unpkg.com/react-dom@15.4.2/dist/react-dom.js
{"__browser":{"country":"US","device":"unknown_device","mobile":false,"name":"unknown browser","platform":"unknown_platform","version":"0"},"__constants":{},"__CPDATA":{"domain_iframe":"https://cdpn.io","environment":"production","host":"codepen.io","iframe_allow":"accelerometer *; ambient-light-sensor *; camera *; display-capture *; encrypted-media *; geolocation *; gyroscope *; microphone *; midi *; payment *; vr *; web-share *; serial *; xr-spatial-tracking *","iframe_sandbox":"allow-downloads allow-forms allow-modals allow-pointer-lock allow-popups-to-escape-sandbox allow-popups allow-presentation allow-same-origin allow-scripts allow-top-navigation-by-user-activation"},"__graphql":{"data":{"errors":[{"message":"Cannot return null for non-nullable field Query.sessionUser"}],"data":null},"url":"https://codepen.io/graphql","api":"cprails"},"__pay_stripe_public_key":"pk_live_2GndomDfiklqpSNQn8FrGuwZSMIMzha7DkLJqlYe7IR0ihKAlKdiHg68JJc5eVPt68rzAjzAAVXcUwjySHRCsgjQQ00gtRBUFNH","__pay_braintree_env":"production","__boomboom":{"serve_url":"https://cdpn.io/cpe/boomboom","store_url":"https://codepen.io/cpe/boomboom/store"},"__pageType":"embed","__item":"{\"editor_settings\":{\"auto_run\":true,\"autocomplete\":false,\"code_folding\":true,\"css_pre_processor\":\"none\",\"css_prefix\":\"neither\",\"css_starter\":\"neither\",\"emmet_active\":true,\"font_size\":14,\"font_type\":\"system\",\"format_on_save\":false,\"html_pre_processor\":\"none\",\"indent_with\":\"spaces\",\"js_pre_processor\":\"none\",\"key_bindings\":\"normal\",\"line_numbers\":true,\"line_wrapping\":true,\"match_brackets\":true,\"snippets\":{\"markupSnippets\":{},\"stylesheetSnippets\":{}},\"tab_size\":2,\"theme\":\"twilight\",\"id\":\"BaBZMQw\",\"auto_save\":true},\"hashid\":\"BaBZMQw\",\"itemType\":\"pen\",\"resources\":[{\"url\":\"https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css\",\"order\":0,\"resource_type\":\"js\",\"par_content\":\"\"},{\"url\":\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.10.2/css/all.min.css\",\"order\":0,\"resource_type\":\"css\",\"par_content\":\"\"},{\"url\":\"https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css\",\"order\":1,\"resource_type\":\"css\",\"par_content\":\"\"},{\"url\":\"https://unpkg.com/react@15.4.2/dist/react.js\",\"order\":1,\"resource_type\":\"js\",\"par_content\":\"\"},{\"url\":\"https://unpkg.com/react-dom@15.4.2/dist/react-dom.js\",\"order\":2,\"resource_type\":\"js\",\"par_content\":\"\"}],\"tags\":[\"bootstrap\",\"card\",\"grid\",\"hover\"],\"id\":39632289,\"user_id\":681306,\"html\":\"<!------ Include the above in your HEAD tag ---------->\\n<div class=\\\"container\\\">\\n <div class=\\\"row\\\">\\n <div id=\\\"root\\\"></div>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-sm-6 col-md-4 col-lg-3 mt-4\\\">\\n <div class=\\\"card\\\">\\n <img class=\\\"card-img-top\\\" src=\\\"https://picsum.photos/200/150/?random\\n\\\">\\n <div class=\\\"float-right m-1\\\" style=\\\"position:absolute;right:0\\\">\\n <button type=\\\"button\\\" class=\\\"btn btn-light m-0 text-left\\\" style=\\\"border:#444444\\\">\\n <i class=\\\"fas fa-ellipsis-v\\\"></i>\\n </button>\\n </div>\\n <div class=\\\"whenhovered\\\">\\n <div class=\\\"float-right mr-0\\\">\\n <button type=\\\"button\\\" class=\\\"btn btn-light m-0 text-left\\\">\\n MORE\\n <i class=\\\"fas fa-ellipsis-v pl-2\\\"></i>\\n </button>\\n </div>\\n <div class=\\\"mt-5 pt-5\\\">\\n <button type=\\\"button\\\" class=\\\"btn btn-light w-75 m-3 mt-5 text-left\\\">\\n <i class=\\\"fas fa-eye pr-2\\\"></i>\\n VIEW BOARD\\n </button>\\n </div>\\n <div>\\n <button type=\\\"button\\\" class=\\\"btn btn-light w-75 m-3 text-left\\\">\\n <i class=\\\"fas fa-thumbtack pr-2\\\"></i>\\n PIN\\n </button>\\n </div>\\n <div>\\n <button type=\\\"button\\\" class=\\\"btn btn-light w-75 m-3 text-left\\\">\\n <i class=\\\"fas fa-share pr-2\\\"></i>\\n SHARE\\n </button>\\n </div>\\n </div>\\n\\n <div class=\\\"card-block\\\">\\n <h4 class=\\\"card-title\\\">Title Text</h4>\\n <div class=\\\"meta\\\">\\n <a href=\\\"#\\\">Friends</a>\\n </div>\\n <div class=\\\"card-text\\\">\\n Lorem ipsum dolor sit amet, consectetur.\\n </div>\\n </div>\\n <div class=\\\"card-footer\\\">\\n <span class=\\\"float-right\\\">Joined in 2013</span>\\n <span><i class=\\\"\\\"></i>75 Friends</span>\\n </div>\\n </div>\\n </div>\\n <div class=\\\"col-sm-6 col-md-4 col-lg-3 mt-4\\\">\\n <div class=\\\"card\\\">\\n <img class=\\\"card-img-top\\\" src=\\\"https://picsum.photos/200/150/?random\\\">\\n <div class=\\\"card-block\\\">\\n <h5 class=\\\"text-bold\\\">Title Text</h5>\\n </div>\\n <CardHoverMenus/>\\n </div>\\n </div>\\n <div class=\\\"col-sm-6 col-md-4 col-lg-3 mt-4\\\">\\n <div class=\\\"card\\\">\\n <img class=\\\"card-img-top\\\" src=\\\"https://picsum.photos/200/150/?random\\n\\\">\\n <p class=\\\"card-block\\\">\\n Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quam velit quisquam veniam excepturi temporibus inventore corporis dicta sit culpa veritatis placeat earum, dolorum asperiores, delectus dolore voluptatibus, at magnam nobis!\\n </p>\\n </div>\\n </div>\\n <div class=\\\"col-sm-6 col-md-4 col-lg-3 mt-4\\\">\\n <div class=\\\"card\\\">\\n <img class=\\\"card-img-top\\\" src=\\\"https://picsum.photos/200/150/?random\\n\\\">\\n <div class=\\\"card-block\\\">\\n <figure class=\\\"profile\\\">\\n <img src=\\\"https://picsum.photos/200/150/?random\\\" class=\\\"profile-avatar\\\" alt=\\\"\\\">\\n </figure>\\n <h4 class=\\\"card-title mt-3\\\">Title Text</h4>\\n <div class=\\\"meta\\\">\\n <a>Friends</a>\\n </div>\\n <div class=\\\"card-text\\\">\\n Lorem ipsum dolor sit amet, consectetur.\\n </div>\\n </div>\\n <div class=\\\"card-footer\\\">\\n <small>Last updated 3 mins ago</small>\\n <button class=\\\"btn btn-secondary float-right btn-sm\\\">show</button>\\n </div>\\n </div>\\n </div>\\n </div>\\n <div class=\\\"row mb-5\\\">\\n <div class=\\\"col-sm-6 col-md-4 col-lg-3 mt-4\\\">\\n <div class=\\\"card card-inverse card-primary \\\">\\n <img class=\\\"card-img-top\\\" src=\\\"https://picsum.photos/200/150/?random\\\">\\n <blockquote class=\\\"card-blockquote p-3\\\">\\n <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat.</p>\\n <footer>\\n <small>\\n Someone famous in <cite title=\\\"Source Title\\\">Source Title</cite>\\n </small>\\n </footer>\\n </blockquote>\\n </div>\\n </div>\\n <div class=\\\"col-sm-6 col-md-4 col-lg-3 mt-4\\\">\\n <div class=\\\"card card-inverse card-info\\\">\\n <img class=\\\"card-img-top\\\" src=\\\"https://picsum.photos/200/150/?random\\\">\\n <div class=\\\"card-block\\\">\\n <figure class=\\\"profile\\\">\\n <img src=\\\"https://picsum.photos/200/150/?random\\\" class=\\\"profile-avatar\\\" alt=\\\"\\\">\\n </figure>\\n <h4 class=\\\"card-title mt-3\\\">Title Text</h4>\\n <div class=\\\"meta card-text\\\">\\n <a>Friends</a>\\n </div>\\n <div class=\\\"card-text\\\">\\n Lorem ipsum dolor sit amet, consectetur.\\n </div>\\n </div>\\n <div class=\\\"card-footer\\\">\\n <small>Last updated 3 mins ago</small>\\n <button class=\\\"btn btn-info float-right btn-sm\\\">Follow</button>\\n </div>\\n </div>\\n </div>\\n <div class=\\\"col-sm-6 col-md-4 col-lg-3 mt-4\\\">\\n <div class=\\\"card card-inverse card-info\\\">\\n <img class=\\\"card-img-top\\\" src=\\\"https://picsum.photos/200/150/?random\\\">\\n <div class=\\\"card-block\\\">\\n <figure class=\\\"profile profile-inline\\\">\\n <img src=\\\"https://picsum.photos/200/150/?random\\\" class=\\\"profile-avatar\\\" alt=\\\"\\\">\\n </figure>\\n <h4 class=\\\"card-title\\\">Title Text</h4>\\n <div class=\\\"card-text\\\">\\n Lorem ipsum dolor sit amet, consectetur.\\n </div>\\n </div>\\n <div class=\\\"card-footer\\\">\\n <small>Last updated 3 mins ago</small>\\n <button class=\\\"btn btn-info float-right btn-sm\\\">Follow</button>\\n </div>\\n </div>\\n </div>\\n <div class=\\\"col-sm-6 col-md-4 col-lg-3 mt-4\\\">\\n <div class=\\\"card card-inverse card-info\\\">\\n <img class=\\\"card-img-top\\\" src=\\\"https://picsum.photos/200/150/?random\\\">\\n <div class=\\\"card-block\\\">\\n <figure class=\\\"profile profile-inline\\\">\\n <img src=\\\"https://picsum.photos/200/150/?random\\\" class=\\\"profile-avatar\\\" alt=\\\"\\\">\\n </figure>\\n <h4 class=\\\"card-title\\\">Title Text</h4>\\n <div class=\\\"card-text\\\">\\n Lorem ipsum dolor sit amet, consectetur.\\n </div>\\n </div>\\n <div class=\\\"card-footer\\\">\\n <button class=\\\"btn btn-info btn-sm\\\">Follow</button>\\n </div>\\n </div>\\n </div>\\n </div>\\n</div>\\n\\n<div class=\\\"container\\\">\\n <div class=\\\"card-deck\\\">\\n <div class=\\\"card mb-4\\\">\\n <img class=\\\"card-img-top img-fluid\\\" src=\\\"//placehold.it/500x280\\\" alt=\\\"Card image cap\\\">\\n <div class=\\\"card-body\\\">\\n <h4 class=\\\"card-title\\\">1 Card title</h4>\\n <p class=\\\"card-text\\\">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>\\n <p class=\\\"card-text\\\"><small class=\\\"text-muted\\\">Last updated 3 mins ago</small></p>\\n </div>\\n </div>\\n <div class=\\\"card mb-4\\\">\\n <img class=\\\"card-img-top img-fluid\\\" src=\\\"//placehold.it/500x280\\\" alt=\\\"Card image cap\\\">\\n <div class=\\\"card-body\\\">\\n <h4 class=\\\"card-title\\\">2 Card title</h4>\\n <p class=\\\"card-text\\\">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>\\n <p class=\\\"card-text\\\"><small class=\\\"text-muted\\\">Last updated 3 mins ago</small></p>\\n </div>\\n </div>\\n <div class=\\\"w-100 d-none d-sm-block d-md-none\\\">\\n <!-- wrap every 2 on sm-->\\n </div>\\n <div class=\\\"card mb-4\\\">\\n <img class=\\\"card-img-top img-fluid\\\" src=\\\"//placehold.it/500x280\\\" alt=\\\"Card image cap\\\">\\n <div class=\\\"card-body\\\">\\n <h4 class=\\\"card-title\\\">3 Card title</h4>\\n <p class=\\\"card-text\\\">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>\\n <p class=\\\"card-text\\\"><small class=\\\"text-muted\\\">Last updated 3 mins ago</small></p>\\n </div>\\n </div>\\n <div class=\\\"w-100 d-none d-md-block d-lg-none\\\">\\n <!-- wrap every 3 on md-->\\n </div>\\n <div class=\\\"card mb-4\\\">\\n <img class=\\\"card-img-top img-fluid\\\" src=\\\"//placehold.it/500x280\\\" alt=\\\"Card image cap\\\">\\n <div class=\\\"card-body\\\">\\n <h4 class=\\\"card-title\\\">4 Card title</h4>\\n <p class=\\\"card-text\\\">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>\\n <p class=\\\"card-text\\\"><small class=\\\"text-muted\\\">Last updated 3 mins ago</small></p>\\n </div>\\n </div>\\n <div class=\\\"w-100 d-none d-sm-block d-md-none\\\">\\n <!-- wrap every 2 on sm-->\\n </div>\\n <div class=\\\"w-100 d-none d-lg-block d-xl-none\\\">\\n <!-- wrap every 4 on lg-->\\n </div>\\n <div class=\\\"card mb-4\\\">\\n <img class=\\\"card-img-top img-fluid\\\" src=\\\"//placehold.it/500x280\\\" alt=\\\"Card image cap\\\">\\n <div class=\\\"card-body\\\">\\n <h4 class=\\\"card-title\\\">5 Card title</h4>\\n <p class=\\\"card-text\\\">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>\\n <p class=\\\"card-text\\\"><small class=\\\"text-muted\\\">Last updated 3 mins ago</small></p>\\n </div>\\n </div>\\n <div class=\\\"w-100 d-none d-xl-block\\\">\\n <!-- wrap every 5 on xl-->\\n </div>\\n <div class=\\\"card mb-4\\\">\\n <img class=\\\"card-img-top img-fluid\\\" src=\\\"//placehold.it/500x300\\\" alt=\\\"Card image cap\\\">\\n <div class=\\\"card-body\\\">\\n <h4 class=\\\"card-title\\\">6 Card title</h4>\\n <p class=\\\"card-text\\\">This card has supporting text below as a natural lead-in to additional content.</p>\\n <p class=\\\"card-text\\\"><small class=\\\"text-muted\\\">Last updated 3 mins ago</small></p>\\n </div>\\n </div>\\n <div class=\\\"w-100 d-none d-sm-block d-md-none\\\">\\n <!-- wrap every 2 on sm-->\\n </div>\\n <div class=\\\"w-100 d-none d-md-block d-lg-none\\\">\\n <!-- wrap every 3 on md-->\\n </div>\\n <div class=\\\"card mb-4\\\">\\n <img class=\\\"card-img-top img-fluid\\\" src=\\\"//placehold.it/500x270\\\" alt=\\\"Card image cap\\\">\\n <div class=\\\"card-body\\\">\\n <h4 class=\\\"card-title\\\">7 Card title</h4>\\n <p class=\\\"card-text\\\">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>\\n <p class=\\\"card-text\\\"><small class=\\\"text-muted\\\">Last updated 3 mins ago</small></p>\\n </div>\\n </div>\\n <div class=\\\"card mb-4\\\">\\n <img class=\\\"card-img-top img-fluid\\\" src=\\\"//placehold.it/500x300\\\" alt=\\\"Card image cap\\\">\\n <div class=\\\"card-body\\\">\\n <h4 class=\\\"card-title\\\">8 Card title</h4>\\n <p class=\\\"card-text\\\">This card has supporting text below as a natural lead-in to additional content.</p>\\n <p class=\\\"card-text\\\"><small class=\\\"text-muted\\\">Last updated 3 mins ago</small></p>\\n </div>\\n </div>\\n <div class=\\\"w-100 d-none d-sm-block d-md-none\\\">\\n <!-- wrap every 2 on sm-->\\n </div>\\n <div class=\\\"w-100 d-none d-lg-block d-xl-none\\\">\\n <!-- wrap every 4 on lg-->\\n </div>\\n <div class=\\\"card mb-4\\\">\\n <img class=\\\"card-img-top img-fluid\\\" src=\\\"//placehold.it/500x270\\\" alt=\\\"Card image cap\\\">\\n <div class=\\\"card-body\\\">\\n <h4 class=\\\"card-title\\\">Card title</h4>\\n <p class=\\\"card-text\\\">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>\\n <p class=\\\"card-text\\\"><small class=\\\"text-muted\\\">Last updated 3 mins ago</small></p>\\n </div>\\n </div>\\n <div class=\\\"w-100 d-none d-md-block d-lg-none\\\">\\n <!-- wrap every 3 on md-->\\n </div>\\n <div class=\\\"card mb-4\\\">\\n <img class=\\\"card-img-top img-fluid\\\" src=\\\"//placehold.it/500x270\\\" alt=\\\"Card image cap\\\">\\n <div class=\\\"card-body\\\">\\n <h4 class=\\\"card-title\\\">10 Card title</h4>\\n <p class=\\\"card-text\\\">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.This is a wider card with supporting text below as a natural lead-in\\n to additional content. This card has even longer content than the first to show that equal height action.</p>\\n <p class=\\\"card-text\\\"><small class=\\\"text-muted\\\">Last updated 3 mins ago</small></p>\\n </div>\\n </div>\\n </div>\\n</div>\",\"css\":\"html {\\n font-family: Lato, 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n font-size: 14px;\\n}\\n\\nh5 {\\n font-size: 1.28571429em;\\n font-weight: 700;\\n line-height: 1.2857em;\\n margin: 0;\\n}\\n\\n.card {\\n font-size: 1em;\\n overflow: hidden;\\n padding: 0;\\n border: none;\\n border-radius: .28571429rem;\\n box-shadow: 0 1px 3px 0 #d4d4d5, 0 0 0 1px #d4d4d5;\\n}\\n\\n.card-block {\\n font-size: 1em;\\n position: relative;\\n margin: 0;\\n padding: 1em;\\n border: none;\\n border-top: 1px solid rgba(34, 36, 38, .1);\\n box-shadow: none;\\n}\\n\\n.card-img-top {\\n display: block;\\n width: 100%;\\n height: auto;\\n}\\n\\n.card-title {\\n font-size: 1.28571429em;\\n font-weight: 700;\\n line-height: 1.2857em;\\n}\\n\\n.card-text {\\n clear: both;\\n margin-top: .5em;\\n color: rgba(0, 0, 0, .68);\\n}\\n\\n.card-footer {\\n font-size: 1em;\\n position: static;\\n top: 0;\\n left: 0;\\n max-width: 100%;\\n padding: .75em 1em;\\n color: rgba(0, 0, 0, .4);\\n border-top: 1px solid rgba(0, 0, 0, .05) !important;\\n background: #fff;\\n}\\n\\n.card-inverse .btn {\\n border: 1px solid rgba(0, 0, 0, .05);\\n}\\n\\n.profile {\\n position: absolute;\\n top: -12px;\\n display: inline-block;\\n overflow: hidden;\\n box-sizing: border-box;\\n width: 25px;\\n height: 25px;\\n margin: 0;\\n border: 1px solid #fff;\\n border-radius: 50%;\\n}\\n\\n.profile-avatar {\\n display: block;\\n width: 100%;\\n height: 100%;\\n border-radius: 50%;\\n}\\n\\n.profile-inline {\\n position: relative;\\n top: 0;\\n display: inline-block;\\n}\\n\\n.profile-inline ~ .card-title {\\n display: inline-block;\\n margin-left: 4px;\\n vertical-align: top;\\n}\\n\\n.text-bold {\\n font-weight: 700;\\n}\\n\\n.meta {\\n font-size: 1em;\\n color: rgba(0, 0, 0, .4);\\n}\\n\\n.meta a {\\n text-decoration: none;\\n color: rgba(0, 0, 0, .4);\\n}\\n\\n.meta a:hover {\\n color: rgba(0, 0, 0, .87);\\n}\\n\\n.card {\\n position:relative;\\n overflow:hidden;\\n}\\n \\n.whenhovered {\\n position:absolute;\\n top:-100%;\\n right:0;\\n background:rgba(0, 0, 0, 0);\\n width:100%;\\n height:100%;\\n padding:2%;\\n text-align:center;\\n color:#fff !important;\\n z-index:2;\\n -webkit-transition: all 0.2s ease-in-out;\\n -moz-transition: all 0.2s ease-in-out;\\n -o-transition: all 0.2s ease-in-out;\\n -ms-transition: all 0.2s ease-in-out;\\n transition: all 0.2s ease-in-out;\\n}\\n.card:hover .whenhovered {\\n top:0%;\\n background:rgba(0, 0, 0, 0.75);\\n}\",\"js\":\"class CardMoreMenuBtn extends React.Component {\\n render() { \\n const p = this.props;\\n const clsD = (p.isRight) ? \\\"float-right mr-0\\\" : \\\"\\\";\\n const clsB = (p.isRight) ? \\\" m-0\\\" : \\\" w-100 p-3\\\";\\n const clsI = (p.isRight) ? \\\" pl-2\\\" : \\\" pr-3 pl-4\\\";\\n const iconTag = <i className={\\\"fas fa-\\\" + this.props.icon + clsI} />;\\n return (\\n <div className={clsD}>\\n <button type=\\\"button\\\" \\n className={\\\"btn btn-light text-left \\\" + clsB}\\n onClick={this.props.clicked}>\\n {p.isRight || <div>{iconTag}{p.txt}</div>}\\n {p.isRight && <div>{p.txt}{iconTag}</div>}\\n </button>\\n </div>\\n )}\\n}\\n\\nclass CardMoreMenu extends React.Component {\\n render = ()=>{\\n const p = this.props;\\n return p.hidden ? (\\n <CardMoreMenuBtn clicked={p.toggle} \\n isRight={true} \\n icon=\\\"ellipsis-v\\\" txt=\\\"MORE\\\" \\n />\\n ) : (\\n <div style={{ background: \\\"white\\\",maxWidth:300,float:\\\"right\\\" }} className=\\\"mr-1\\\">\\n <CardMoreMenuBtn clicked={p.funcs.pinAny} \\n icon=\\\"thumbtack\\\" txt=\\\"Pin card to any board\\\" \\n />\\n <CardMoreMenuBtn clicked={p.funcs.pinHere} \\n icon=\\\"thumbs-up\\\" txt=\\\"Pin card to this board\\\" \\n />\\n <CardMoreMenuBtn clicked={p.funcs.notInterested} \\n icon=\\\"thumbs-down\\\" txt=\\\"Not interested in this card\\\" \\n />\\n <CardMoreMenuBtn clicked={p.funcs.shareCard} \\n icon=\\\"share\\\" txt=\\\"Share this card\\\" \\n />\\n <CardMoreMenuBtn clicked={p.funcs.viewBoard} \\n icon=\\\"eye\\\" txt=\\\"View board\\\"\\n />\\n </div>\\n );\\n }\\n}\\nconst CardHoverButton = (p)=>{return(\\n <div>\\n <button type=\\\"button\\\" onClick={p.clicked}\\n className=\\\"btn btn-light w-75 m-3 text-left\\\">\\n <i className={\\\"fas fa-\\\"+p.icon+\\\" pr-2\\\"}></i>\\n {p.txt}\\n </button>\\n </div>\\n)}\\nconst evStop = (ev)=>{\\n ev.preventDefault()\\n ev.stopPropagation();\\n ev.nativeEvent.stopImmediatePropagation();\\n}\\nclass CardHoverMenus extends React.Component {\\n state = { hiddenPopupMenu: true }\\n toggle = ()=>{ this.setState({ hiddenPopupMenu: ! this.state.hiddenPopupMenu }); } clkBtn = (ev, msg) => {\\n evStop(ev);\\n this.props.flash(msg);\\n };\\n render() {\\n const p = {\\n funcs: {\\n viewBoard: e => this.clkBtn(e, \\\"viewBoard\\\"),\\n pinAny: e => this.clkBtn(e, \\\"pinAny\\\"),\\n pinHere: e => this.clkBtn(e, \\\"pinHere\\\"),\\n notInterested: e => this.clkBtn(e, \\\"notInterested\\\"),\\n shareCard: e => this.clkBtn(e, \\\"shareCard\\\")\\n }\\n };\\n //Above is hardwired for demo. Normally, const p = this.props;\\n return (\\n <div className=\\\"whenhovered\\\" onClick={this.toggle}>\\n <CardMoreMenu funcs={p.funcs} \\n hidden={this.state.hiddenPopupMenu} toggle={this.toggle}/>\\n { this.state.hiddenPopupMenu && (\\n <div>\\n <div className=\\\"mt-5 pt-5\\\"></div>\\n <div className=\\\"mt-5\\\"></div>\\n <CardHoverButton txt=\\\"VIEW BOARD\\\" \\n icon=\\\"eye\\\" clicked={p.funcs.viewBoard}/>\\n <CardHoverButton txt=\\\"PIN\\\"\\n icon=\\\"thumbtack\\\" clicked={p.funcs.pinAny}/>\\n <CardHoverButton txt=\\\"SHARE\\\"\\n icon=\\\"share\\\" clicked={p.funcs.shareCard}/>\\n </div>)}\\n </div>\\n )}\\n}\\n\\nclass Card extends React.Component {\\n moreBtn = ( \\n <div className=\\\"float-right m-1\\\" style={{position:\\\"absolute\\\",right:0}}>\\n <button type=\\\"button\\\" \\n className=\\\"btn btn-light m-0 text-left\\\"\\n style={{border:\\\"#444444\\\"}}\\n >\\n <i className=\\\"fas fa-ellipsis-v\\\" />\\n </button>\\n </div>\\n )\\n render() { return (\\n /*<div className=\\\"col-sm-6 col-md-4 col-lg-3 mt-4\\\" id={\\\"card\\\"+this.props.id}>*/\\n <div className=\\\"col-sm-6 col-md-6 col-lg-4 mt-4\\\">\\n <div className=\\\"card\\\">\\n <img\\n className=\\\"card-img-top\\\"\\n src=\\\"https://picsum.photos/200/150/?random\\\"/>\\n {this.moreBtn}\\n <CardHoverMenus flash={this.props.flash}/>\\n <div className=\\\"card-block\\\">\\n <h4 className=\\\"card-title\\\">Title Text</h4>\\n <div className=\\\"meta\\\">\\n <a href=\\\"#\\\">Friends</a>\\n </div>\\n <div className=\\\"card-text\\\">\\n Lorem ipsum dolor sit amet, consectetur.\\n </div>\\n </div>\\n <div className=\\\"card-footer\\\">\\n <span className=\\\"float-right\\\">Joined in 2013</span>\\n <span>\\n <i className=\\\"\\\" />75 Friends\\n </span>\\n </div>\\n </div>\\n </div>\\n )}\\n}\\n\\nclass Cards extends React.Component{ \\n state={msg:null}\\n flash=(m)=>{\\n this.setState({msg:m})\\n setTimeout(()=>{this.setState({msg:null})},2000)\\n }\\n render() { return(\\n <div>\\n <h5>{this.state.msg || \\\"_\\\"}</h5>\\n <div className=\\\"row\\\">\\n {Array(8).fill(42).map( (x,i) => <Card key={i} flash={this.flash}/>) }\\n </div> \\n </div>\\n )}\\n}\\n\\nReactDOM.render(<Cards />, document.getElementById(\\\"root\\\"));\\n\",\"html_pre_processor\":\"none\",\"css_pre_processor\":\"none\",\"js_pre_processor\":\"babel\",\"html_classes\":\"\",\"css_starter\":\"neither\",\"js_library\":null,\"created_at\":\"2019-08-29T20:26:09.000Z\",\"updated_at\":\"2019-09-11T16:40:43.000Z\",\"title\":\"Bootstrap Card Grid\",\"description\":\"\",\"slug_hash\":\"BaBZMQw\",\"head\":\"\",\"private\":false,\"has_animation\":true,\"team_id\":0,\"css_prefix\":\"neither\",\"template\":false,\"parent_id\":0,\"comments_count\":0,\"custom_screenshot_filename\":null,\"loves_count\":0,\"pick\":false,\"popularity_score\":0,\"views_count\":0,\"pick_visible_at\":null,\"cpid\":\"016cdf0e-8ee8-74ba-b6d9-75406da22633\",\"is_new_editor_pen\":false,\"protected\":false,\"access\":\"Public\",\"pen_hash\":null}","__processorsMap":{"autoprefixer":"autoprefixer-10","babel":"babel-7","coffeescript":"coffeescript-2","format-1":"format-1","flutter":"flutter-1","haml":"haml-4","less":"less-3","lint-1":"lint-1","livescript":"livescript-1","markdown":"markdown-11","postcss":"postcss-7","pug":"pug-2","sass":"sass-1","scss":"sass-1","sass-ruby-3":"sass-ruby-3","sass-ruby-compass-3":"sass-ruby-compass-3","slim":"slim-3","stylus":"stylus-0","typescript":"typescript-4","vue":"vue-2","vue3":"vue-3"},"__favicon_mask_icon":"https://cpwebassets.codepen.io/assets/favicon/logo-pin-b4b4269c16397ad2f0f7a01bcdf513a1994f4c94b8af2f191c09eb0d601762b1.svg","__favicon_shortcut_icon":"https://cpwebassets.codepen.io/assets/favicon/favicon-aec34940fbc1a6e787974dcd360f2c6b63348d4b1f4e06c77743096d55480f33.ico","__path_to_iframe_console_runner":"https://cpwebassets.codepen.io/assets/editor/iframe/iframeConsoleRunner-6d8bf8b4b479137260842506acbb12717dace0823c023e08b96360e60b0840d9.js","__path_to_iframe_refresh_css":"https://cpwebassets.codepen.io/assets/editor/iframe/iframeRefreshCSS-44fe83e49b63affec96918c9af88c0d80b209a862cf87ac46bc933074b8c557d.js","__path_to_iframe_runtime_errors":"https://cpwebassets.codepen.io/assets/editor/iframe/iframeRuntimeErrors-4f205f2c14e769b448bcf477de2938c681660d5038bc464e3700256713ebe261.js","__path_to_processor_worker":"https://cpwebassets.codepen.io/assets/packs/router.js","__path_to_stop_execution_on_timeout":"https://cpwebassets.codepen.io/assets/common/stopExecutionOnTimeout-2c7831bb44f98c1391d6a4ffda0e1fd302503391ca806e7fcc7b9b87197aec26.js","__pen_normalize_css_url":"https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css","__pen_prefix_free_url":"https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js","__pen_reset_css_url":"https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css","__path_to_infinite_loop_detection":"https://cpwebassets.codepen.io/assets/packs/js/infiniteLoopDetection-22d4d33aab19e5279e72.js"}