major update using flex
This commit is contained in:
parent
bb0d78e4ef
commit
6e69d5218d
9 changed files with 60 additions and 65 deletions
|
@ -1,15 +1,18 @@
|
||||||
(ns brut.main
|
(ns brut.main
|
||||||
(:require [hiccup.core :as h]))
|
(:require [hiccup.core :as h]
|
||||||
|
[babashka.fs :as fs]
|
||||||
|
))
|
||||||
|
|
||||||
(defn nav []
|
(defn nav [rel-pref]
|
||||||
|
(let [to (fn [path] (str rel-pref path))]
|
||||||
[:div
|
[:div
|
||||||
[:nav.nav {:tabindex "-1" :onclick "this.focus()"}
|
[:nav.nav {:tabindex "-1" :onclick "this.focus()"}
|
||||||
[:div.container
|
[:div.container
|
||||||
[:a.pagename {:href "index.html"} "BRUT"]
|
[:a.pagename {:href (to "index.html")} "BRUT"]
|
||||||
[:a {:href "h/docs.html"} "Docs"]
|
[:a {:href (to "h/docs.html")} "Docs"]
|
||||||
[:a {:href "h/download.html"} "Download"]
|
[:a {:href (to "h/download.html")} "Download"]
|
||||||
[:a {:href "https://gitea.esy.fun/yogsototh/brutcss"} "Code"]]]
|
[:a {:href "https://gitea.esy.fun/yogsototh/brutcss"} "Code"]]]
|
||||||
[:button.btn.sn.btn-close "×"]])
|
[:button.btn.sn.btn-close "×"]]))
|
||||||
|
|
||||||
(defn footer []
|
(defn footer []
|
||||||
[:div.row
|
[:div.row
|
||||||
|
@ -18,47 +21,68 @@
|
||||||
[:a {:href "https://yannesposito.com"}
|
[:a {:href "https://yannesposito.com"}
|
||||||
"Yann Esposito"]]]])
|
"Yann Esposito"]]]])
|
||||||
|
|
||||||
(defn mk-page [title content]
|
(defn mk-page [rel-pref {:keys [title] :as _metas} content]
|
||||||
(h/html
|
(h/html
|
||||||
[:head
|
[:head
|
||||||
[:meta {:http-equiv "Content-Type" :content "text/html; charset=UTF-8"}]
|
[:meta {:http-equiv "Content-Type" :content "text/html; charset=UTF-8"}]
|
||||||
[:meta {:name "viewport" :content "width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no"}]
|
[:meta {:name "viewport" :content "width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no"}]
|
||||||
[:title "BRUT"]
|
[:title title]
|
||||||
[:link {:href "brut-nocolors.min.css" :rel "stylesheet" :type "text/css"}]]
|
[:link {:href (str rel-pref "brut-nocolors.min.css") :rel "stylesheet" :type "text/css"}]]
|
||||||
[:body
|
[:body.col
|
||||||
(nav)
|
(nav rel-pref)
|
||||||
[:div.container
|
|
||||||
content
|
content
|
||||||
(footer)]]))
|
(footer)]))
|
||||||
|
|
||||||
(defn index []
|
(defn gen-page [file-path metas content-fn]
|
||||||
(let [hero [:div.hero.bg-neutral
|
(let [{:keys [title]} metas
|
||||||
|
depth (or (some-> file-path
|
||||||
|
fs/parent
|
||||||
|
fs/components
|
||||||
|
count)
|
||||||
|
0)
|
||||||
|
rel-pref (apply str (repeat depth "../"))
|
||||||
|
html (mk-page rel-pref metas (content-fn rel-pref metas))]
|
||||||
|
(println "Generates: " file-path)
|
||||||
|
(spit file-path html)))
|
||||||
|
|
||||||
|
(defn index-content [rel-pref _metas]
|
||||||
|
(let [to (fn [path] (str rel-pref path))
|
||||||
|
hero [:div.hero.bg-neutral
|
||||||
[:div.row
|
[:div.row
|
||||||
[:div.col.block.c3 [:img {:src "h/img/brutalism.webp" :alt "brutalism"}]]
|
[:div.col.block.c3 [:img {:src (to "h/img/brutalism.webp") :alt "brutalism"}]]
|
||||||
[:div.col.block.c6
|
[:div.col.block.c6
|
||||||
[:h1.title "BRUT"]
|
[:h1.title "BRUT"]
|
||||||
[:h4 "A Brutalist and Minimalist CSS Framework"]
|
[:h4 "A Brutalist and Minimalist CSS Framework"]
|
||||||
[:p (str "This CSS framework is ideal to be used for admin interface where you"
|
[:p (str "This CSS framework is ideal to be used for admin interface where you"
|
||||||
"want to make it clear, this is not for any kind of end user but only"
|
"want to make it clear, this is not for any kind of end user but only"
|
||||||
"advanced technical people.")]]
|
"advanced technical people.")]]
|
||||||
[:div.col.block.c3 [:img {:src "h/img/brutalism.webp" :alt "brutalism"}]]]]
|
[:div.col.block.c3 [:img {:src (to "h/img/brutalism.webp") :alt "brutalism"}]]]]
|
||||||
cards [:div.row
|
cards [:div.row
|
||||||
[:div.col.block
|
[:div.col.block
|
||||||
[:div.card
|
[:div.card
|
||||||
[:h3 "Docs"]
|
[:h3 "Docs"]
|
||||||
[:p "Docs"]
|
[:p "Docs"]
|
||||||
[:p "Docs"]
|
[:p "Docs"]
|
||||||
[:a.btn.err.big.push {:href "h/docs.html"}
|
[:a.btn.err.big.push {:href (to "h/docs.html")}
|
||||||
"Docs"]]]
|
"Docs"]]]
|
||||||
[:div.col.block
|
[:div.col.block
|
||||||
[:div.card
|
[:div.card
|
||||||
[:h3 "Download"]
|
[:h3 "Download"]
|
||||||
[:div.block
|
[:div.block
|
||||||
[:p "Download BRUT"]]
|
[:p "Download BRUT"]]
|
||||||
[:a.btn.err.big.push {:href "h/download.html"}
|
[:a.btn.err.big.push {:href (to "h/download.html")}
|
||||||
"Download"]]]]]
|
"Download"]]]]]
|
||||||
(mk-page "BRUT" [:div hero cards])))
|
[:div hero cards]))
|
||||||
|
|
||||||
|
(defn download-content [rel-pref _metas]
|
||||||
|
(let [to (fn [path] (str rel-pref path))]
|
||||||
|
[:div.central.fill
|
||||||
|
{:style (str "background:url('" (to "h/img/brutalism.webp") "')")}
|
||||||
|
[:a.btn.warn.huge {:href (to "brut.min.css")}
|
||||||
|
"Download BRUT"]])
|
||||||
|
)
|
||||||
|
|
||||||
(defn -main [& _args]
|
(defn -main [& _args]
|
||||||
(println "Generate index.html")
|
(gen-page "index.html" "BRUT" index-content)
|
||||||
(spit "index.html" (index)))
|
(gen-page "h/download.html" "BRUT - download" download-content)
|
||||||
|
)
|
||||||
|
|
1
brut-nocolors.min.css
vendored
1
brut-nocolors.min.css
vendored
|
@ -1 +0,0 @@
|
||||||
:root{--bg:#fff;--fg:#000;--bg2:#eee;--darken:rgba(0, 0, 0, 0.1);--nl:#d9d9d9;--n0:#999;--n1:#8c8c8c;--n2:#808080;--shadow:rgba(0, 0, 0, 0.75);--cnt:#fff;--na:#333;--nb:#000}@media(prefers-color-scheme:dark){:root{--bg:#000;--fg:#ccc;--bg2:#333;--darken:rgba(255, 255, 255, 0.1);--nl:#666666;--n0:#808080;--n1:#8c8c8c;--n2:#999999;--shadow:rgba(128, 128, 128, 0.3);--cnt:#000;--na:#eee;--nb:#fff}}.neutral{color:var(--n0)}.bg-neutral{background:var(--nl)}a{color:var(--fg)}html{font-size:12px}body,textarea,input,select{background:var(--bg);color:var(--fg);border-radius:0;font-family:Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;font-size:1rem;margin:0}*{box-sizing:border-box}.addon,.sm,.nav,textarea,input,select{outline:0;font-size:10px}.tb,.btn,.nav a{text-decoration:none}.container{padding:0 20px;width:auto}@media(min-width:1310px){.container{margin:auto;width:1270px}}pre{background:var(--bg2);padding:10px}code{background:var(--darken);border:solid 1px var(--darken);padding:1px}img{max-width:100%}.big{font-size:2em}.huge{font-size:3em}.tb{font-weight:700;cursor:pointer;padding:2px}.tb:before,.tb:after{opacity:.3;display:inline-block}.tb:before{content:"〈"}.tb:after{content:"〉"}.tb:hover{text-decoration:underline}.tb:hover::before,.tb:hover::after{opacity:1}.tb:active:before{content:"《"}.tb:active:after{content:"》"}.btn{background:var(--n0);border:solid 2px #000;color:#fff;font-weight:700;cursor:pointer;display:inline-block;margin:2px 0;padding:1rem 2rem;box-shadow:4px 4px var(--shadow);text-align:center}.btn:hover{background:var(--n1);color:#fff}.btn:active,.btn:focus{color:#fff;background:var(--n2);box-shadow:1px 1px #000;position:relative;top:3px;left:3px}.btn.sm{padding:.5rem 1rem}.btn.std{width:12rem}.btn.big.std{width:20rem}.btn.huge.std{width:24rem}.col,.row{display:flex;flex-direction:row;justify-content:stretch;align-items:stretch;flex-wrap:wrap}.row>*{flex:1}.col>*{flex:0}.col{flex-direction:column}.table,.c12{width:100%;flex:12}.c11{flex:11;width:91.66%}.c10{flex:10;width:83.33%}.c9{flex:9;width:75%}.c8{flex:8;width:66.66%}.c7{flex:7;width:58.33%}.c6{flex:6;width:50%}.c5{flex:5;width:41.66%}.c4{flex:4;width:33.33%}.c3{flex:3;width:25%}.c2{flex:2;width:16.66%}.c1{flex:1;width:8.33%}@media(max-width:870px){.row .col{flex:0 1 100%;width:100%}}.card,.block{padding:5px;border:solid 2px}.card{border-color:var(--nl)}.block{border-color:transparent}.central{display:flex;align-items:center;justify-content:center;background-size:cover;min-height:100vh}button~.central{min-height:calc(100vh - 50px)}.hero{padding:2rem;outline-style:double;outline-width:.5rem;margin:1rem}.push{justify-self:flex-end;margin-top:auto}h1,h2,h3,h4,h5,h6{display:table;padding:.25rem;font-size:1rem;margin:0;border:0;outline:0}h1:before,h2:before,h3:before,h4:before,h5:before,h6:before{content:"== "}h1:after,h2:after,h3:after,h4:after,h5:after,h6:after{content:" =="}h1{background:var(--fg);color:var(--bg)}h2{background:var(--n0);color:var(--bg)}h3{text-decoration:underline}h4{text-decoration:underline;text-decoration-color:var(--n0)}.ico{font:20px Arial Unicode MS,Lucida Sans Unicode;line-height:10px;vertical-align:top}label>*{display:inline}form>*{display:block;margin-bottom:10px}textarea,input,select{border:2px solid;padding:8px}textarea,input[type=text]{-webkit-appearance:none;width:13em;outline:0;border:2px solid}.addon{padding:8px 12px;border-width:2px;border-style:solid none solid solid}textarea:focus,input:focus,select:focus{border-color:var(--i1)}.nav{background:var(--bg2);border-bottom:solid 1px var(--darken)}.nav{height:50px;padding:11px 0 15px}.nav a{opacity:.7;padding-right:1em;position:relative;top:-1px}.nav a:hover{opacity:1}.nav .pagename{opacity:1;font-weight:700;font-size:22px;top:1px}.btn.btn-close{float:right;font-size:25px;margin:-51px 10px;display:none;border:none;box-shadow:none;background:0 0}@media(max-width:500px){.btn.btn-close{display:block}.nav{overflow:hidden}.pagename{margin-top:-11px}.nav:active,.nav:focus{height:auto}.nav div:before{background:var(--bg2);border-bottom:11px double;border-top:3px solid;content:'';float:right;height:4px;position:relative;right:3px;top:14px;width:20px}.nav a{display:block;padding:.5em 0;width:50%}}.table th,.table td{padding:.5em;text-align:left}.table tbody>:nth-child(2n-1){background:var(--bg2)}.msg{background:var(--nl);border-left:5px solid var(--n0);padding:1.5em}
|
|
1
brut.min.css
vendored
1
brut.min.css
vendored
File diff suppressed because one or more lines are too long
|
@ -1,24 +1 @@
|
||||||
<!DOCTYPE html>
|
<head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /><meta content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no" name="viewport" /><title></title><link href="../brut-nocolors.min.css" rel="stylesheet" type="text/css" /></head><body class="col"><div><nav class="nav" onclick="this.focus()" tabindex="-1"><div class="container"><a class="pagename" href="../index.html">BRUT</a><a href="../h/docs.html">Docs</a><a href="../h/download.html">Download</a><a href="https://gitea.esy.fun/yogsototh/brutcss">Code</a></div></nav><button class="btn sn btn-close">×</button></div><div class="central fill" style="background:url('../h/img/brutalism.webp')"><a class="btn warn huge" href="../brut.min.css">Download BRUT</a></div><div class="row"><div class="block"><span>By<a href="https://yannesposito.com">Yann Esposito</a></span></div></div></body>
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<title>BRUT - download</title>
|
|
||||||
<link href="../brut.min.css" rel="stylesheet" type="text/css" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<nav class="nav" tabindex="-1" onclick="this.focus()">
|
|
||||||
<div class="container">
|
|
||||||
<a class="pagename" href="../index.html">BRUT</a>
|
|
||||||
<a href="docs.html">Docs</a>
|
|
||||||
<a class="current" href="#">Download</a>
|
|
||||||
<a href="https://gitea.esy.fun/yogsototh/brutcss">Code</a>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
<button class="btn sm btn-close">×</button>
|
|
||||||
<div class="central" style="background-image:url('img/brutalism.webp')">
|
|
||||||
<a class="btn warn huge" href="../brut.min.css">Download BRUT</a>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1 +1 @@
|
||||||
<head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /><meta content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no" name="viewport" /><title>BRUT</title><link href="brut-nocolors.min.css" rel="stylesheet" type="text/css" /></head><body><div><nav class="nav" onclick="this.focus()" tabindex="-1"><div class="container"><a class="pagename" href="index.html">BRUT</a><a href="h/docs.html">Docs</a><a href="h/download.html">Download</a><a href="https://gitea.esy.fun/yogsototh/brutcss">Code</a></div></nav><button class="btn sn btn-close">×</button></div><div class="container"><div><div class="hero bg-neutral"><div class="row"><div class="col block c3"><img alt="brutalism" src="h/img/brutalism.webp" /></div><div class="col block c6"><h1 class="title">BRUT</h1><h4>A Brutalist and Minimalist CSS Framework</h4><p>This CSS framework is ideal to be used for admin interface where youwant to make it clear, this is not for any kind of end user but onlyadvanced technical people.</p></div><div class="col block c3"><img alt="brutalism" src="h/img/brutalism.webp" /></div></div></div><div class="row"><div class="col block"><div class="card"><h3>Docs</h3><p>Docs</p><p>Docs</p><a class="btn err big push" href="h/docs.html">Docs</a></div></div><div class="col block"><div class="card"><h3>Download</h3><div class="block"><p>Download BRUT</p></div><a class="btn err big push" href="h/download.html">Download</a></div></div></div></div><div class="row"><div class="block"><span>By<a href="https://yannesposito.com">Yann Esposito</a></span></div></div></div></body>
|
<head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /><meta content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no" name="viewport" /><title></title><link href="brut-nocolors.min.css" rel="stylesheet" type="text/css" /></head><body class="col"><div><nav class="nav" onclick="this.focus()" tabindex="-1"><div class="container"><a class="pagename" href="index.html">BRUT</a><a href="h/docs.html">Docs</a><a href="h/download.html">Download</a><a href="https://gitea.esy.fun/yogsototh/brutcss">Code</a></div></nav><button class="btn sn btn-close">×</button></div><div><div class="hero bg-neutral"><div class="row"><div class="col block c3"><img alt="brutalism" src="h/img/brutalism.webp" /></div><div class="col block c6"><h1 class="title">BRUT</h1><h4>A Brutalist and Minimalist CSS Framework</h4><p>This CSS framework is ideal to be used for admin interface where youwant to make it clear, this is not for any kind of end user but onlyadvanced technical people.</p></div><div class="col block c3"><img alt="brutalism" src="h/img/brutalism.webp" /></div></div></div><div class="row"><div class="col block"><div class="card"><h3>Docs</h3><p>Docs</p><p>Docs</p><a class="btn err big push" href="h/docs.html">Docs</a></div></div><div class="col block"><div class="card"><h3>Download</h3><div class="block"><p>Download BRUT</p></div><a class="btn err big push" href="h/download.html">Download</a></div></div></div></div><div class="row"><div class="block"><span>By<a href="https://yannesposito.com">Yann Esposito</a></span></div></div></body>
|
|
@ -1,3 +1,4 @@
|
||||||
|
.tb, .btn { text-decoration: none; }
|
||||||
.tb { font-weight: bold;
|
.tb { font-weight: bold;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding: 2px; }
|
padding: 2px; }
|
||||||
|
|
|
@ -28,4 +28,5 @@ button ~ .central {
|
||||||
margin: 1rem;
|
margin: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fill { flex-grow: 1; }
|
||||||
.push { justify-self: flex-end; margin-top: auto;}
|
.push { justify-self: flex-end; margin-top: auto;}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
html { font-size: 12px; }
|
html,body { font-size: 12px; min-height: 100vh; margin: 0; padding:0; border: 0; outline: 0;}
|
||||||
|
* { box-sizing: border-box; }
|
||||||
body, textarea, input, select {
|
body, textarea, input, select {
|
||||||
background: var(--bg);
|
background: var(--bg);
|
||||||
color: var(--fg);
|
color: var(--fg);
|
||||||
|
@ -7,16 +8,10 @@ body, textarea, input, select {
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
img { max-width: 100%; }
|
||||||
* { box-sizing: border-box; }
|
|
||||||
|
|
||||||
.addon, .sm, .nav, textarea, input, select {
|
.addon, .sm, .nav, textarea, input, select {
|
||||||
outline: 0;
|
outline: 0;
|
||||||
font-size: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tb, .btn, .nav a {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
|
@ -24,7 +19,7 @@ body, textarea, input, select {
|
||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media(min-width:1310px) {
|
@media only screen and (min-width:1310px) {
|
||||||
.container {
|
.container {
|
||||||
margin: auto;
|
margin: auto;
|
||||||
width: 1270px;
|
width: 1270px;
|
||||||
|
@ -39,7 +34,5 @@ code { background: var(--darken);
|
||||||
padding: 1px;
|
padding: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
img { max-width: 100%; }
|
|
||||||
|
|
||||||
.big { font-size: 2em; }
|
.big { font-size: 2em; }
|
||||||
.huge { font-size: 3em; }
|
.huge { font-size: 3em; }
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav a {
|
.nav a {
|
||||||
|
text-decoration: none;
|
||||||
opacity: 0.7;
|
opacity: 0.7;
|
||||||
padding-right: 1em;
|
padding-right: 1em;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
Loading…
Reference in a new issue