initial commit
This commit is contained in:
commit
5a9c6947bc
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
yarn-error.log
|
||||||
|
.yarncache
|
||||||
|
node_modules
|
||||||
|
# compiled sass
|
||||||
|
css
|
39
README.md
Normal file
39
README.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
|
||||||
|
## Objectif
|
||||||
|
|
||||||
|
Rendre un tableau sans utiliser de balises <table>,
|
||||||
|
en utilisant des balises <div> + du positionnement flexbox
|
||||||
|
et qui adopte un positionnement responsive
|
||||||
|
avec basculement pour les 3 tailles large (L), medium (M) et small (S).
|
||||||
|
|
||||||
|
Taille par défaut: Large.
|
||||||
|
|
||||||
|
La solution prévoit de gérer avec du javascript l'entête (thead) qui se déploie différemment pour les tailles M et S
|
||||||
|
|
||||||
|
## Nodejs
|
||||||
|
* mise en place de sass
|
||||||
|
* bash docker-node.sh
|
||||||
|
* yarn install
|
||||||
|
* compiler les fichiers sass
|
||||||
|
* yarn run scss
|
||||||
|
|
||||||
|
## Let's go
|
||||||
|
* lancer un serveur web
|
||||||
|
* bash run.sh
|
||||||
|
* http://localhost:8000/index3.html
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
* prévoir plusieurs tableaux sur une seule page
|
||||||
|
* se rapprocher davantage de la structure html d'un tableau (ajouter thead et tbody)
|
||||||
|
* BUG: js l.57: la règle 'not small' est jouée pour écran L, alors qu'elle est prévue pour le basculement de S vers M
|
||||||
|
|
||||||
|
## Limites
|
||||||
|
* En taille par défaut (L), la largeur des colonnes du tableau est déterminée par des propriétés flex côté css, pour personnaliser il faut donc surcharger en insérant dans le html :
|
||||||
|
```html
|
||||||
|
<style>
|
||||||
|
#my-table .td:nth-child(1) { flex: 1; }
|
||||||
|
#my-table .td:nth-child(2) { flex: 4; }
|
||||||
|
#my-table .td:nth-child(3) { flex: 6; }
|
||||||
|
#my-table .td:nth-child(4) { flex: 2; }
|
||||||
|
</style>
|
||||||
|
```
|
20
docker-node.sh
Normal file
20
docker-node.sh
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
cd $(dirname $0)
|
||||||
|
|
||||||
|
if [ $# -eq 0 ]
|
||||||
|
then
|
||||||
|
cmd=bash
|
||||||
|
else
|
||||||
|
cmd="${@}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
docker run \
|
||||||
|
--rm \
|
||||||
|
--interactive \
|
||||||
|
--tty \
|
||||||
|
--user $(id -u):$(id -g) \
|
||||||
|
--volume ${PWD}:/app \
|
||||||
|
--workdir /app \
|
||||||
|
--env YARN_CACHE_FOLDER=/app/.yarncache \
|
||||||
|
node:14 ${cmd}
|
104
index.html
Normal file
104
index.html
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" dir="ltr">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<link rel="stylesheet" href="css/styles.css">
|
||||||
|
<title>Flexbox test 1</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Flexbox test 1</h1>
|
||||||
|
|
||||||
|
<div id="t1" class="test">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Prénom</th>
|
||||||
|
<th>Nom</th>
|
||||||
|
<th>Action</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>Marcel</td>
|
||||||
|
<td>Aimé</td>
|
||||||
|
<td>Voir | Editer</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Robert</td>
|
||||||
|
<td>Pirate</td>
|
||||||
|
<td>Voir | Editer</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="t2" class="test">
|
||||||
|
<div class="table">
|
||||||
|
<div class="row">
|
||||||
|
<div class="cell">ID </div>
|
||||||
|
<div class="cell">Nr </div>
|
||||||
|
<div class="cell">Header 1 </div>
|
||||||
|
<div class="cell span4-5"> Header 2 </div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="cell">1</div>
|
||||||
|
<div class="cell">2</div>
|
||||||
|
<div class="cell">Content</div>
|
||||||
|
<div class="cell">Content</div>
|
||||||
|
<div class="cell">Content</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="cell">2</div>
|
||||||
|
<div class="cell">3</div>
|
||||||
|
<div class="cell span3-5">Content</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="cell">1</div>
|
||||||
|
<div class="cell">2</div>
|
||||||
|
<div class="cell span3-4">Content</div>
|
||||||
|
<div class="cell">Content</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="t3" class="test">
|
||||||
|
<div class="container">
|
||||||
|
<div class="item">Left<br>high</div>
|
||||||
|
<div class="item">Middle/Left - is wider</div>
|
||||||
|
<div class="item">Middle/Right</div>
|
||||||
|
<div class="item">Right</div>
|
||||||
|
|
||||||
|
<div class="item">Left</div>
|
||||||
|
<div class="item">Middle/Left</div>
|
||||||
|
<div class="item">Middle/Right</div>
|
||||||
|
<div class="item">Right</div>
|
||||||
|
|
||||||
|
<div class="item">Left</div>
|
||||||
|
<div class="item">Middle/Left</div>
|
||||||
|
<div class="item">Middle/Right<br>higher<br>higher</div>
|
||||||
|
<div class="item">Right</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="t4" class="test">
|
||||||
|
<div class="thegrid">
|
||||||
|
<!-- [HEAD] -->
|
||||||
|
<div class="head">Column 1</div>
|
||||||
|
<div class="head">Column 2</div>
|
||||||
|
<div class="head">Column 3</div>
|
||||||
|
<div class="head">Column 4</div>
|
||||||
|
<!-- [ROWS] -->
|
||||||
|
<div class="cell">Row 1 col 1</div>
|
||||||
|
<div class="cell">Row 1 col 2</div>
|
||||||
|
<div class="cell">Row 1 col 3</div>
|
||||||
|
<div class="cell">Row 1 col 4</div>
|
||||||
|
<!-- [ROWS] -->
|
||||||
|
<div class="cell">Row 2 col 1</div>
|
||||||
|
<div class="cell">Row 2 col 2</div>
|
||||||
|
<div class="cell">Row 2 col 3</div>
|
||||||
|
<div class="cell">Row 2 col 4</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
93
index2.html
Normal file
93
index2.html
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" dir="ltr">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<link rel="stylesheet" href="css/styles2.css">
|
||||||
|
<title>Flexbox test 2</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Flexbox test 2</h1>
|
||||||
|
<div class="test">
|
||||||
|
|
||||||
|
<table role="table">
|
||||||
|
<thead role="rowgroup">
|
||||||
|
<tr role="row">
|
||||||
|
<th role="columnheader">First Name</th>
|
||||||
|
<th role="columnheader">Last Name</th>
|
||||||
|
<th role="columnheader">Job Title</th>
|
||||||
|
<th role="columnheader">Favorite Color</th>
|
||||||
|
<th role="columnheader">Wars or Trek?</th>
|
||||||
|
<th role="columnheader">Secret Alias</th>
|
||||||
|
<th role="columnheader">Date of Birth</th>
|
||||||
|
<th role="columnheader">Dream Vacation City</th>
|
||||||
|
<th role="columnheader">GPA</th>
|
||||||
|
<th role="columnheader">Arbitrary Data</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody role="rowgroup">
|
||||||
|
<tr role="row">
|
||||||
|
<td role="cell" data-header="First Name">James</td>
|
||||||
|
<td role="cell" data-header="Last Name">Matman</td>
|
||||||
|
<td role="cell" data-header="Job Title">Chief Sandwich Eater</td>
|
||||||
|
<td role="cell" data-header="Favorite Color">Lettuce Green</td>
|
||||||
|
<td role="cell" data-header="Wars or Trek?">Trek</td>
|
||||||
|
<td role="cell" data-header="Secret Alias">Digby Green</td>
|
||||||
|
<td role="cell" data-header="Date of Birth">January 13, 1979</td>
|
||||||
|
<td role="cell" data-header="Dream Vacation City">Gotham City</td>
|
||||||
|
<td role="cell" data-header="GPA">3.1</td>
|
||||||
|
<td role="cell" data-header="Arbitrary Data">RBX-12</td>
|
||||||
|
</tr>
|
||||||
|
<tr role="row">
|
||||||
|
<td role="cell">The</td>
|
||||||
|
<td role="cell">Tick</td>
|
||||||
|
<td role="cell">Crimefighter Sorta</td>
|
||||||
|
<td role="cell">Blue</td>
|
||||||
|
<td role="cell">Wars</td>
|
||||||
|
<td role="cell">John Smith</td>
|
||||||
|
<td role="cell">July 19, 1968</td>
|
||||||
|
<td role="cell">Athens</td>
|
||||||
|
<td role="cell">N/A</td>
|
||||||
|
<td role="cell">Edlund, Ben (July 1996).</td>
|
||||||
|
</tr>
|
||||||
|
<tr role="row">
|
||||||
|
<td role="cell">Jokey</td>
|
||||||
|
<td role="cell">Smurf</td>
|
||||||
|
<td role="cell">Giving Exploding Presents</td>
|
||||||
|
<td role="cell">Smurflow</td>
|
||||||
|
<td role="cell">Smurf</td>
|
||||||
|
<td role="cell">Smurflane Smurfmutt</td>
|
||||||
|
<td role="cell">Smurfuary Smurfteenth, 1945</td>
|
||||||
|
<td role="cell">New Smurf City</td>
|
||||||
|
<td role="cell">4.Smurf</td>
|
||||||
|
<td role="cell">One</td>
|
||||||
|
</tr>
|
||||||
|
<tr role="row">
|
||||||
|
<td role="cell">Cindy</td>
|
||||||
|
<td role="cell">Beyler</td>
|
||||||
|
<td role="cell">Sales Representative</td>
|
||||||
|
<td role="cell">Red</td>
|
||||||
|
<td role="cell">Wars</td>
|
||||||
|
<td role="cell">Lori Quivey</td>
|
||||||
|
<td role="cell">July 5, 1956</td>
|
||||||
|
<td role="cell">Paris</td>
|
||||||
|
<td role="cell">3.4</td>
|
||||||
|
<td role="cell">3451</td>
|
||||||
|
</tr>
|
||||||
|
<tr role="row">
|
||||||
|
<td role="cell">Captain</td>
|
||||||
|
<td role="cell">Cool</td>
|
||||||
|
<td role="cell">Tree Crusher</td>
|
||||||
|
<td role="cell">Blue</td>
|
||||||
|
<td role="cell">Wars</td>
|
||||||
|
<td role="cell">Steve 42nd</td>
|
||||||
|
<td role="cell">December 13, 1982</td>
|
||||||
|
<td role="cell">Las Vegas</td>
|
||||||
|
<td role="cell">1.9</td>
|
||||||
|
<td role="cell">Under the couch</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
100
index3.html
Normal file
100
index3.html
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" dir="ltr">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<link rel="stylesheet" href="css/styles3.css">
|
||||||
|
<title>Flexbox test 3</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Flexbox test 3</h1>
|
||||||
|
<div class="table" id="my-table">
|
||||||
|
<div class="tr header">
|
||||||
|
<div class="td">ID</div>
|
||||||
|
<div class="td">Column 1</div>
|
||||||
|
<div class="td">Column 2</div>
|
||||||
|
<div class="td">Column 3</div>
|
||||||
|
<div class="td">Action</div>
|
||||||
|
</div>
|
||||||
|
<div class="tr">
|
||||||
|
<div class="td">1</div>
|
||||||
|
<div class="td">Content Lorem ipsum dolor sit amet, consectetur adipiscing elit.</div>
|
||||||
|
<div class="td">Content sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div>
|
||||||
|
<div class="td">Content Posuere morbi leo urna molestie.</div>
|
||||||
|
<div class="td">show | edit</div>
|
||||||
|
</div>
|
||||||
|
<div class="tr">
|
||||||
|
<div class="td">2</div>
|
||||||
|
<div class="td">Content Posuere morbi leo urna molestie.</div>
|
||||||
|
<div class="td">Content sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div>
|
||||||
|
<div class="td">Dolor sit amet, consectetur adipiscing elit.</div>
|
||||||
|
<div class="td">show | edit</div>
|
||||||
|
</div>
|
||||||
|
<div class="tr">
|
||||||
|
<div class="td">3</div>
|
||||||
|
<div class="td">Content sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div>
|
||||||
|
<div class="td">Content Lorem ipsum dolor sit amet, consectetur adipiscing elit.</div>
|
||||||
|
<div class="td">Leo urna molestie.</div>
|
||||||
|
<div class="td">show | edit</div>
|
||||||
|
</div>
|
||||||
|
<div class="tr">
|
||||||
|
<div class="td">4</div>
|
||||||
|
<div class="td">Content Lorem ipsum dolor sit amet, consectetur adipiscing elit.</div>
|
||||||
|
<div class="td">Content morbi leo urna molestie. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div>
|
||||||
|
<div class="td">Content Posuere </div>
|
||||||
|
<div class="td">show | edit</div>
|
||||||
|
</div>
|
||||||
|
<div class="tr">
|
||||||
|
<div class="td">5</div>
|
||||||
|
<div class="td">Content Posuere morbi leo urna molestie.</div>
|
||||||
|
<div class="td">Content sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div>
|
||||||
|
<div class="td">Dolor sit amet, consectetur adipiscing elit.</div>
|
||||||
|
<div class="td">show | edit</div>
|
||||||
|
</div>
|
||||||
|
<div class="tr">
|
||||||
|
<div class="td">6</div>
|
||||||
|
<div class="td">Content Lorem ipsum dolor sit amet, consectetur adipiscing elit.</div>
|
||||||
|
<div class="td">Content sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div>
|
||||||
|
<div class="td">Content Posuere morbi leo urna molestie.</div>
|
||||||
|
<div class="td">show | edit</div>
|
||||||
|
</div>
|
||||||
|
<div class="tr">
|
||||||
|
<div class="td">7</div>
|
||||||
|
<div class="td">Content Lorem ipsum dolor sit amet, consectetur adipiscing elit.</div>
|
||||||
|
<div class="td">Content morbi leo urna molestie. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div>
|
||||||
|
<div class="td">Content Posuere </div>
|
||||||
|
<div class="td">show | edit</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- ajouter une autre
|
||||||
|
div class="table" id="other-table">
|
||||||
|
<div class="tr header">
|
||||||
|
<div class="td">ID</div>
|
||||||
|
<div class="td">Column 1</div>
|
||||||
|
<div class="td">Column 2</div>
|
||||||
|
<div class="td">Column 3</div>
|
||||||
|
<div class="td">Action</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tr">
|
||||||
|
<div class="td">6</div>
|
||||||
|
<div class="td">Content</div>
|
||||||
|
<div class="td">Content</div>
|
||||||
|
<div class="td">Content</div>
|
||||||
|
<div class="td">show | edit</div>
|
||||||
|
</div>
|
||||||
|
<div class="tr">
|
||||||
|
<div class="td">7</div>
|
||||||
|
<div class="td">Content</div>
|
||||||
|
<div class="td">Content</div>
|
||||||
|
<div class="td">Content</div>
|
||||||
|
<div class="td">show | edit</div>
|
||||||
|
</div>
|
||||||
|
</div-->
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
const table = document.querySelector("#my-table");
|
||||||
|
</script>
|
||||||
|
<script src="js/index3.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
78
js/index3.js
Normal file
78
js/index3.js
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
|
||||||
|
const max800 = window.matchMedia("(max-width: 800px)");
|
||||||
|
const max450 = window.matchMedia("(max-width: 450px)");
|
||||||
|
|
||||||
|
const theadContent = i => {
|
||||||
|
const header = table.querySelectorAll(".header .td");
|
||||||
|
let content;
|
||||||
|
header.forEach((item, j) => {
|
||||||
|
if (i === j) {
|
||||||
|
content = item.textContent;
|
||||||
|
}
|
||||||
|
}, i);
|
||||||
|
return content;
|
||||||
|
};
|
||||||
|
|
||||||
|
const createThead = (cell, i) => {
|
||||||
|
const elem = document.createElement("div");
|
||||||
|
elem.classList.add("thead");
|
||||||
|
elem.innerHTML = theadContent(i);
|
||||||
|
cell.appendChild(elem);
|
||||||
|
}
|
||||||
|
|
||||||
|
const mediumScreen = rule => {
|
||||||
|
if (rule.matches) {
|
||||||
|
console.log('medium');
|
||||||
|
const rows = [...table.querySelectorAll(".tr")];
|
||||||
|
rows.shift();
|
||||||
|
rows.forEach(row => {;
|
||||||
|
const cells = row.querySelectorAll(".td");
|
||||||
|
cells.forEach((cell, i) => {
|
||||||
|
createThead(cell, i);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
console.log('not medium');
|
||||||
|
const theads = table.querySelectorAll(".thead");
|
||||||
|
theads.forEach(element => {
|
||||||
|
element.parentNode.removeChild(element);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const smallScreen = (rule) => {
|
||||||
|
if (rule.matches) {
|
||||||
|
console.log('small');
|
||||||
|
const rows = [...table.querySelectorAll(".tr")];
|
||||||
|
rows.shift();
|
||||||
|
rows.forEach(row => {;
|
||||||
|
const cells = row.querySelectorAll(".td");
|
||||||
|
cells.forEach((cell, i) => {
|
||||||
|
let thead = cell.querySelector('.thead');
|
||||||
|
thead.classList.add("td");
|
||||||
|
row.insertBefore(thead, cell);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
console.log('not small'); // large is not small, donc il passe ici !! pas normal
|
||||||
|
const rows = [...table.querySelectorAll(".tr")];
|
||||||
|
rows.shift();
|
||||||
|
rows.forEach(row => {;
|
||||||
|
const theads = row.querySelectorAll(".thead");
|
||||||
|
theads.forEach((thead) => {
|
||||||
|
thead.classList.remove("td");
|
||||||
|
thead.parentNode.removeChild(thead);
|
||||||
|
});
|
||||||
|
const cells = row.querySelectorAll(".td");
|
||||||
|
cells.forEach((cell, i) => {
|
||||||
|
createThead(cell, i);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
mediumScreen(max800);
|
||||||
|
max800.addListener(mediumScreen);
|
||||||
|
|
||||||
|
smallScreen(max450);
|
||||||
|
max450.addListener(smallScreen);
|
9
package.json
Normal file
9
package.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"dependencies": {
|
||||||
|
"node-sass": "^6.0.0",
|
||||||
|
"sass-loader": "^11.1.1"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"scss": "node-sass --watch scss -o css"
|
||||||
|
}
|
||||||
|
}
|
107
scss/styles.scss
Normal file
107
scss/styles.scss
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
body {
|
||||||
|
padding: 1em;
|
||||||
|
div.test {
|
||||||
|
border: 1px solid grey;
|
||||||
|
padding: 1em;
|
||||||
|
margin: 0 2em 1em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
div#t1 {
|
||||||
|
table,
|
||||||
|
td,
|
||||||
|
th {
|
||||||
|
border: 1px solid lightgrey;
|
||||||
|
padding: 0.5em;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
div#t2 {
|
||||||
|
div.table {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
div.row {
|
||||||
|
display: flex;
|
||||||
|
min-height: 50px;
|
||||||
|
}
|
||||||
|
div.cell {
|
||||||
|
flex: 4;
|
||||||
|
border: 1px solid lightgrey;
|
||||||
|
}
|
||||||
|
div.cell:nth-child(1) {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
div.cell:nth-child(2) {
|
||||||
|
flex: 2;
|
||||||
|
}
|
||||||
|
div.cell.span4-5 {
|
||||||
|
flex: 8 24px; /* col 4,5 flex-grow/border/padding */
|
||||||
|
}
|
||||||
|
div.cell.span3-4 {
|
||||||
|
flex: 8 24px; /* col 3,4 flex-grow/border/padding */
|
||||||
|
}
|
||||||
|
div.cell.span3-5 {
|
||||||
|
flex: 12 36px; /* col 3,4,5 flex-grow/border/padding */
|
||||||
|
}
|
||||||
|
div.row:first-child div.cell {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center; /* center horiz. */
|
||||||
|
align-items: center; /* center vert. */
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
div.row div.cell {
|
||||||
|
padding: 5px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
div#t3 {
|
||||||
|
.container {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap; /* allow items to wrap */
|
||||||
|
justify-content: space-between; /* vertical */
|
||||||
|
align-items: stretch; /* horizontal, is default and can be omitted */
|
||||||
|
}
|
||||||
|
.item {
|
||||||
|
flex-basis: 25%; /* give each item a width */
|
||||||
|
border: 1px solid lightgrey;
|
||||||
|
box-sizing: border-box;
|
||||||
|
flex-shrink: 0; /* prevent from "shrink to fit" */
|
||||||
|
min-width: 0; /* allow to shrink past content width */
|
||||||
|
overflow: hidden; /* hide overflowed content */
|
||||||
|
}
|
||||||
|
.item:nth-child(n+5) {
|
||||||
|
margin-top: 10px; /* from 5th item, add top margin */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
div#t4 {
|
||||||
|
/* (A1) CONTAINER - BIG SCREEN */
|
||||||
|
.thegrid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: auto auto auto auto;
|
||||||
|
/* OR SPECIFY WIDTH
|
||||||
|
*/
|
||||||
|
grid-template-columns: 40% 20% 20% 20%;
|
||||||
|
grid-gap: 5px;
|
||||||
|
}
|
||||||
|
/* (A2) CONTAINER - SMOL SCREEN */
|
||||||
|
@media screen and (max-width:768px) {
|
||||||
|
.thegrid { grid-template-columns: auto auto; }
|
||||||
|
}
|
||||||
|
/* (B) CELLS */
|
||||||
|
.thegrid .head, .thegrid .cell {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
/* (C) HEADER CELLS */
|
||||||
|
.thegrid .head {
|
||||||
|
font-weight: bold;
|
||||||
|
background: #ffe4d1;
|
||||||
|
}
|
||||||
|
/* (D) DATA CELLS */
|
||||||
|
.thegrid .cell {
|
||||||
|
background: #d1f2ff;
|
||||||
|
}
|
||||||
|
}
|
110
scss/styles2.scss
Normal file
110
scss/styles2.scss
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
body {
|
||||||
|
padding: 1em;
|
||||||
|
div.test {
|
||||||
|
border: 1px solid grey;
|
||||||
|
padding: 1em;
|
||||||
|
margin: 0 2em 1em;
|
||||||
|
table,
|
||||||
|
tbody,
|
||||||
|
td,
|
||||||
|
th,
|
||||||
|
thead,
|
||||||
|
tr {
|
||||||
|
border: 1px solid lightgrey;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen
|
||||||
|
and (max-width: 760px), (min-device-width: 768px)
|
||||||
|
and (max-device-width: 1024px) {
|
||||||
|
|
||||||
|
table,
|
||||||
|
tbody,
|
||||||
|
td,
|
||||||
|
th,
|
||||||
|
thead,
|
||||||
|
tr {
|
||||||
|
display: block;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide table headers (but not display: none;, for accessibility) */
|
||||||
|
thead tr {
|
||||||
|
position: absolute;
|
||||||
|
top: -9999px;
|
||||||
|
left: -9999px;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr {
|
||||||
|
margin: 0 0 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:nth-child(odd) {
|
||||||
|
background: #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
/* Behave like a "row" */
|
||||||
|
border: none;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
position: relative;
|
||||||
|
padding-left: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
td:before {
|
||||||
|
/* Now like a table header */
|
||||||
|
position: absolute;
|
||||||
|
/* Top/left values mimic padding */
|
||||||
|
top: 0;
|
||||||
|
left: 6px;
|
||||||
|
width: 45%;
|
||||||
|
padding-right: 10px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Label the data
|
||||||
|
You could also use a data-* attribute and content for this. That way "bloats" the HTML, this way means you need to keep HTML and CSS in sync. Lea Verou has a clever way to handle with text-shadow.
|
||||||
|
*/
|
||||||
|
td:nth-of-type(1):before {
|
||||||
|
content: "First Name";
|
||||||
|
}
|
||||||
|
|
||||||
|
td:nth-of-type(2):before {
|
||||||
|
content: "Last Name";
|
||||||
|
}
|
||||||
|
|
||||||
|
td:nth-of-type(3):before {
|
||||||
|
content: "Job Title";
|
||||||
|
}
|
||||||
|
|
||||||
|
td:nth-of-type(4):before {
|
||||||
|
content: "Favorite Color";
|
||||||
|
}
|
||||||
|
|
||||||
|
td:nth-of-type(5):before {
|
||||||
|
content: "Wars of Trek?";
|
||||||
|
}
|
||||||
|
|
||||||
|
td:nth-of-type(6):before {
|
||||||
|
content: "Secret Alias";
|
||||||
|
}
|
||||||
|
|
||||||
|
td:nth-of-type(7):before {
|
||||||
|
content: "Date of Birth";
|
||||||
|
}
|
||||||
|
|
||||||
|
td:nth-of-type(8):before {
|
||||||
|
content: "Dream Vacation City";
|
||||||
|
}
|
||||||
|
|
||||||
|
td:nth-of-type(9):before {
|
||||||
|
content: "GPA";
|
||||||
|
}
|
||||||
|
|
||||||
|
td:nth-of-type(10):before {
|
||||||
|
content: "Arbitrary Data";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
96
scss/styles3.scss
Normal file
96
scss/styles3.scss
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
|
||||||
|
div.table {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
div.tr {
|
||||||
|
display: flex;
|
||||||
|
min-height: 50px;
|
||||||
|
&:nth-child(1) {
|
||||||
|
border-top: 1px solid grey;
|
||||||
|
}
|
||||||
|
&:nth-child(odd) {
|
||||||
|
background: #dedede;
|
||||||
|
}
|
||||||
|
div.td {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex: 4;
|
||||||
|
border: 1px solid grey;
|
||||||
|
border-top: 0;
|
||||||
|
border-left: 0;
|
||||||
|
&:nth-child(1) {
|
||||||
|
border-left: 1px solid grey;
|
||||||
|
}
|
||||||
|
&:nth-child(1) { flex: 1; } // les largeurs de colonnes
|
||||||
|
&:nth-child(2) { flex: 4; }
|
||||||
|
&:nth-child(3) { flex: 6; }
|
||||||
|
&:nth-child(4) { flex: 2; }
|
||||||
|
&:last-child { flex: 2; }
|
||||||
|
div.thead { // TODO affiché par erreur en grand écran,
|
||||||
|
// car le script applique ici la l.57 du script js
|
||||||
|
// commenter pour voir le problème
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.header div.td {
|
||||||
|
justify-content: center;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
div.td,
|
||||||
|
div.thead {
|
||||||
|
padding: 5px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media only screen
|
||||||
|
and (max-width: 800px) {
|
||||||
|
div.table {
|
||||||
|
margin-right: 0.5em;
|
||||||
|
div.tr {
|
||||||
|
flex-direction: column;
|
||||||
|
padding-left: 37%;
|
||||||
|
&.header {
|
||||||
|
position: absolute;
|
||||||
|
top: -9999px;
|
||||||
|
left: -9999px;
|
||||||
|
}
|
||||||
|
div.td {
|
||||||
|
position: relative;
|
||||||
|
border-left: 1px solid grey;
|
||||||
|
div.thead { // idem l.28
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: -57%;
|
||||||
|
width: 52%;
|
||||||
|
padding-right: 10px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
&:nth-child(1) {
|
||||||
|
//border-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:nth-child(2) {
|
||||||
|
div.td:nth-child(1) {
|
||||||
|
border-top: 1px solid grey;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media only screen
|
||||||
|
and (max-width: 450px) {
|
||||||
|
div.table {
|
||||||
|
div.tr {
|
||||||
|
padding-left: 0;
|
||||||
|
div.td {
|
||||||
|
padding-left: 1.5em;
|
||||||
|
&.thead {
|
||||||
|
font-weight: bold;
|
||||||
|
padding-left: 0.5em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user