From 0b5d8c37192190d8ac1da91e60e629f5d8607cc5 Mon Sep 17 00:00:00 2001 From: Alejandro Sanchez Date: Fri, 29 Jan 2021 19:16:45 -0500 Subject: [PATCH 001/491] Update README.md --- exercises/08-Rounded-Image/README.md | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/exercises/08-Rounded-Image/README.md b/exercises/08-Rounded-Image/README.md index 1e31dd95..22bf00c9 100644 --- a/exercises/08-Rounded-Image/README.md +++ b/exercises/08-Rounded-Image/README.md @@ -9,14 +9,9 @@ The obvious way create a rounded profile picture is to create an image tag and a ## 📝 Instructions: -1. Instead of doing that, the right approach will -be to create a squared div (a.ka: with equal width -and height), assign the image as a background, and -then apply a border-radius to that div. - -2. If the image ends up being bigger than the div -(or with different proportions) we can adjust the -background-position or background-size to choose -what part of the image we want to display inside -of the circle. +In addition to the border-radius you have to use the `object-fit` css property, [here is an explanation](https://www.loom.com/share/15186e456dfd4741887997af40325721). + +If the image ends up being bigger than the div (or with different proportions) we can adjust the object-position to choose what part of the image we want to display inside of the circle. + +You can also read [this great article about object fit](https://css-tricks.com/on-object-fit-and-object-position/) From 883b95b3e7bddcafc9deb6fd6e264b92d95d5ec0 Mon Sep 17 00:00:00 2001 From: Alejandro Sanchez Date: Fri, 29 Jan 2021 19:18:39 -0500 Subject: [PATCH 002/491] Update README.es.md --- exercises/08-Rounded-Image/README.es.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/exercises/08-Rounded-Image/README.es.md b/exercises/08-Rounded-Image/README.es.md index f15c8f37..98d140a0 100644 --- a/exercises/08-Rounded-Image/README.es.md +++ b/exercises/08-Rounded-Image/README.es.md @@ -8,9 +8,8 @@ La forma obvia de crear una imagen de perfil redondeada es crear una etiqueta de ## 📝 Instrucciones: -1. En lugar de hacerlo, el enfoque correcto será crear un div cuadrado (es decir: con igual ancho y alto), asignar la imagen como fondo y luego aplicar un borde-radius a ese div. +Adicionalmente a border-radius tenemos que tambien utilizar la propiedad `object-fit`, [aqui hay una explicación](https://www.loom.com/share/15186e456dfd4741887997af40325721). -2. Si la imagen termina siendo más grande que el div (o con diferentes proporciones), podemos ajustar -el background-position o background-size para elegir - qué parte de la imagen queremos mostrar dentro del círculo. +Si la es mas grande que el div y quieres centrarla o enfocarte en una zona en particular puedes utilizar `object-position`. +En este articulo puedes leer más [sobre la propiedad object fit](https://css-tricks.com/on-object-fit-and-object-position/) From f7bf56e72476b1867f5bc72f3ae1380ffa3ac005 Mon Sep 17 00:00:00 2001 From: Alejandro Sanchez Date: Mon, 8 Feb 2021 16:44:43 +0000 Subject: [PATCH 003/491] migration from breathecode to learnpack --- .gitpod.Dockerfile | 3 +- .gitpod.yml | 2 +- bc.json | 261 ++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 262 insertions(+), 4 deletions(-) diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile index f94c655a..903fd2fc 100644 --- a/.gitpod.Dockerfile +++ b/.gitpod.Dockerfile @@ -3,4 +3,5 @@ FROM gitpod/workspace-full:latest USER gitpod -RUN npm i jest@24.8.0 -g && npm i breathecode-cli@1.2.70 -g +RUN npm i jest@24.8.0 -g +RUN npm i learnpack -g && learnpack plugins:install learnpack-html && learnpack plugins:install learnpack-node diff --git a/.gitpod.yml b/.gitpod.yml index 5a3e1447..c0d54a1d 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -7,7 +7,7 @@ ports: onOpen: open-preview tasks: - command: > - bc run -l css --disable_grading; + learnpack start --disable_grading; github: prebuilds: # enable for the master/default branch (defaults to true) diff --git a/bc.json b/bc.json index fc7f686a..24122c75 100644 --- a/bc.json +++ b/bc.json @@ -1,5 +1,28 @@ { + "port": 3000, + "address": "https://ivory-badger-my28nt2n.ws-us03.gitpod.io", + "editor": "gitpod", + "configPath": { + "config": "bc.json", + "base": ".learn", + "exercises": "./exercises", + "output": ".learn/dist" + }, + "outputPath": "./.learn/dist", + "publicPath": "/preview", + "grading": "isolated", + "ignoreRegex": {}, + "webpack_template": null, + "disable_grading": true, + "onCompilerSuccess": "open-browser", "language": "css", + "compiler": "webpack", + "tester": "jest", + "actions": [ + "build", + "test", + "reset" + ], "preview": "https://github.com/4GeeksAcademy/css-tutorial-exercises-course/blob/master/preview.png?raw=true", "repository": "https://github.com/4GeeksAcademy/css-tutorial-exercises-course", "title": "Learn CSS Interactively", @@ -8,5 +31,239 @@ "duration": 8, "difficulty": "easy", "video-solutions": true, - "graded": true -} + "graded": true, + "session": 6577320023859397000, + "exercises": [ + { + "slug": "00-Welcome", + "title": "00-Welcome", + "done": false, + "path": "exercises/00-Welcome", + "translations": [ + "es", + "us" + ], + "graded": false + }, + { + "slug": "01-Hello-World", + "title": "01-Hello-World", + "done": false, + "path": "exercises/01-Hello-World", + "translations": [ + "es", + "us" + ], + "graded": false + }, + { + "slug": "01.1-The-Style-Tag", + "title": "01.1-The-Style-Tag", + "done": false, + "path": "exercises/01.1-The-Style-Tag", + "translations": [ + "es", + "us" + ], + "graded": false + }, + { + "slug": "01.2-Your-First-Style", + "title": "01.2-Your-First-Style", + "done": false, + "path": "exercises/01.2-Your-First-Style", + "translations": [ + "es", + "us" + ], + "graded": true + }, + { + "slug": "01.3-Your-Second-Style", + "title": "01.3-Your-Second-Style", + "done": false, + "path": "exercises/01.3-Your-Second-Style", + "translations": [ + "es", + "us" + ], + "graded": true + }, + { + "slug": "02-Separate-Stylesheet", + "title": "02-Separate-Stylesheet", + "done": false, + "path": "exercises/02-Separate-Stylesheet", + "translations": [ + "es", + "us" + ], + "graded": true + }, + { + "slug": "02.1-Background", + "title": "02.1-Background", + "done": false, + "path": "exercises/02.1-Background", + "translations": [ + "es", + "us" + ], + "graded": true + }, + { + "slug": "03-Inline-Styles", + "title": "03-Inline-Styles", + "done": false, + "path": "exercises/03-Inline-Styles", + "translations": [ + "es", + "us" + ], + "graded": true + }, + { + "slug": "04-Class-Selector", + "title": "04-Class-Selector", + "done": false, + "path": "exercises/04-Class-Selector", + "translations": [ + "es", + "us" + ], + "graded": false + }, + { + "slug": "04.1-Combined-Rules", + "title": "04.1-Combined-Rules", + "done": false, + "path": "exercises/04.1-Combined-Rules", + "translations": [ + "es", + "us" + ], + "graded": true + }, + { + "slug": "04.2-Apply-several-classes", + "title": "04.2-Apply-several-classes", + "done": false, + "path": "exercises/04.2-Apply-several-classes", + "translations": [ + "es", + "us" + ], + "graded": false + }, + { + "slug": "04.3-id-Selector", + "title": "04.3-id-Selector", + "done": false, + "path": "exercises/04.3-id-Selector", + "translations": [ + "es", + "us" + ], + "graded": false + }, + { + "slug": "05-Specificity", + "title": "05-Specificity", + "done": false, + "path": "exercises/05-Specificity", + "translations": [ + "es", + "us" + ], + "graded": true + }, + { + "slug": "06-Practicing-Rules", + "title": "06-Practicing-Rules", + "done": false, + "path": "exercises/06-Practicing-Rules", + "translations": [ + "es", + "us" + ], + "graded": true + }, + { + "slug": "07-Very-Specific-Rules", + "title": "07-Very-Specific-Rules", + "done": false, + "path": "exercises/07-Very-Specific-Rules", + "translations": [ + "es", + "us" + ], + "graded": true + }, + { + "slug": "08-Rounded-Image", + "title": "08-Rounded-Image", + "done": false, + "path": "exercises/08-Rounded-Image", + "translations": [ + "es", + "us" + ], + "graded": true + }, + { + "slug": "09-Anchor-Styles", + "title": "09-Anchor-Styles", + "done": false, + "path": "exercises/09-Anchor-Styles", + "translations": [ + "es", + "us" + ], + "graded": true + }, + { + "slug": "10-Your-Own-Font", + "title": "10-Your-Own-Font", + "done": false, + "path": "exercises/10-Your-Own-Font", + "translations": [ + "es", + "us" + ], + "graded": true + }, + { + "slug": "11-Font-Awesome-Icons", + "title": "11-Font-Awesome-Icons", + "done": false, + "path": "exercises/11-Font-Awesome-Icons", + "translations": [ + "es", + "us" + ], + "graded": true + }, + { + "slug": "12-Relative-Length-EM-REM", + "title": "12-Relative-Length-EM-REM", + "done": false, + "path": "exercises/12-Relative-Length-EM-REM", + "translations": [ + "es", + "us" + ], + "graded": true + }, + { + "slug": "13-Anchor-Like-Button", + "title": "13-Anchor-Like-Button", + "done": false, + "path": "exercises/13-Anchor-Like-Button", + "translations": [ + "es", + "us" + ], + "graded": true + } + ] +} \ No newline at end of file From 616e827488bc84d2a1a645ce065edf5a04d5c250 Mon Sep 17 00:00:00 2001 From: Alejandro Sanchez Date: Mon, 8 Feb 2021 16:51:44 +0000 Subject: [PATCH 004/491] disable grading flag was wrong --- .gitpod.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitpod.yml b/.gitpod.yml index c0d54a1d..c83d6cc1 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -6,8 +6,7 @@ ports: - port: 3000 onOpen: open-preview tasks: - - command: > - learnpack start --disable_grading; + - command: learnpack start --disableGrading; github: prebuilds: # enable for the master/default branch (defaults to true) From 3a2d1dd03f58167a5a4894155af2d3aa4d41d647 Mon Sep 17 00:00:00 2001 From: Alejandro Sanchez Date: Mon, 8 Feb 2021 16:56:18 +0000 Subject: [PATCH 005/491] published to learnpack marketplace --- bc.json | 263 +------------------------------------------------------- 1 file changed, 4 insertions(+), 259 deletions(-) diff --git a/bc.json b/bc.json index 24122c75..eb6139f0 100644 --- a/bc.json +++ b/bc.json @@ -1,28 +1,7 @@ { - "port": 3000, - "address": "https://ivory-badger-my28nt2n.ws-us03.gitpod.io", - "editor": "gitpod", - "configPath": { - "config": "bc.json", - "base": ".learn", - "exercises": "./exercises", - "output": ".learn/dist" - }, - "outputPath": "./.learn/dist", - "publicPath": "/preview", - "grading": "isolated", - "ignoreRegex": {}, - "webpack_template": null, - "disable_grading": true, - "onCompilerSuccess": "open-browser", - "language": "css", - "compiler": "webpack", - "tester": "jest", - "actions": [ - "build", - "test", - "reset" - ], + "language": "html", + "slug": "css-tutorial-exercises-course", + "skills": ["css-styling"], "preview": "https://github.com/4GeeksAcademy/css-tutorial-exercises-course/blob/master/preview.png?raw=true", "repository": "https://github.com/4GeeksAcademy/css-tutorial-exercises-course", "title": "Learn CSS Interactively", @@ -31,239 +10,5 @@ "duration": 8, "difficulty": "easy", "video-solutions": true, - "graded": true, - "session": 6577320023859397000, - "exercises": [ - { - "slug": "00-Welcome", - "title": "00-Welcome", - "done": false, - "path": "exercises/00-Welcome", - "translations": [ - "es", - "us" - ], - "graded": false - }, - { - "slug": "01-Hello-World", - "title": "01-Hello-World", - "done": false, - "path": "exercises/01-Hello-World", - "translations": [ - "es", - "us" - ], - "graded": false - }, - { - "slug": "01.1-The-Style-Tag", - "title": "01.1-The-Style-Tag", - "done": false, - "path": "exercises/01.1-The-Style-Tag", - "translations": [ - "es", - "us" - ], - "graded": false - }, - { - "slug": "01.2-Your-First-Style", - "title": "01.2-Your-First-Style", - "done": false, - "path": "exercises/01.2-Your-First-Style", - "translations": [ - "es", - "us" - ], - "graded": true - }, - { - "slug": "01.3-Your-Second-Style", - "title": "01.3-Your-Second-Style", - "done": false, - "path": "exercises/01.3-Your-Second-Style", - "translations": [ - "es", - "us" - ], - "graded": true - }, - { - "slug": "02-Separate-Stylesheet", - "title": "02-Separate-Stylesheet", - "done": false, - "path": "exercises/02-Separate-Stylesheet", - "translations": [ - "es", - "us" - ], - "graded": true - }, - { - "slug": "02.1-Background", - "title": "02.1-Background", - "done": false, - "path": "exercises/02.1-Background", - "translations": [ - "es", - "us" - ], - "graded": true - }, - { - "slug": "03-Inline-Styles", - "title": "03-Inline-Styles", - "done": false, - "path": "exercises/03-Inline-Styles", - "translations": [ - "es", - "us" - ], - "graded": true - }, - { - "slug": "04-Class-Selector", - "title": "04-Class-Selector", - "done": false, - "path": "exercises/04-Class-Selector", - "translations": [ - "es", - "us" - ], - "graded": false - }, - { - "slug": "04.1-Combined-Rules", - "title": "04.1-Combined-Rules", - "done": false, - "path": "exercises/04.1-Combined-Rules", - "translations": [ - "es", - "us" - ], - "graded": true - }, - { - "slug": "04.2-Apply-several-classes", - "title": "04.2-Apply-several-classes", - "done": false, - "path": "exercises/04.2-Apply-several-classes", - "translations": [ - "es", - "us" - ], - "graded": false - }, - { - "slug": "04.3-id-Selector", - "title": "04.3-id-Selector", - "done": false, - "path": "exercises/04.3-id-Selector", - "translations": [ - "es", - "us" - ], - "graded": false - }, - { - "slug": "05-Specificity", - "title": "05-Specificity", - "done": false, - "path": "exercises/05-Specificity", - "translations": [ - "es", - "us" - ], - "graded": true - }, - { - "slug": "06-Practicing-Rules", - "title": "06-Practicing-Rules", - "done": false, - "path": "exercises/06-Practicing-Rules", - "translations": [ - "es", - "us" - ], - "graded": true - }, - { - "slug": "07-Very-Specific-Rules", - "title": "07-Very-Specific-Rules", - "done": false, - "path": "exercises/07-Very-Specific-Rules", - "translations": [ - "es", - "us" - ], - "graded": true - }, - { - "slug": "08-Rounded-Image", - "title": "08-Rounded-Image", - "done": false, - "path": "exercises/08-Rounded-Image", - "translations": [ - "es", - "us" - ], - "graded": true - }, - { - "slug": "09-Anchor-Styles", - "title": "09-Anchor-Styles", - "done": false, - "path": "exercises/09-Anchor-Styles", - "translations": [ - "es", - "us" - ], - "graded": true - }, - { - "slug": "10-Your-Own-Font", - "title": "10-Your-Own-Font", - "done": false, - "path": "exercises/10-Your-Own-Font", - "translations": [ - "es", - "us" - ], - "graded": true - }, - { - "slug": "11-Font-Awesome-Icons", - "title": "11-Font-Awesome-Icons", - "done": false, - "path": "exercises/11-Font-Awesome-Icons", - "translations": [ - "es", - "us" - ], - "graded": true - }, - { - "slug": "12-Relative-Length-EM-REM", - "title": "12-Relative-Length-EM-REM", - "done": false, - "path": "exercises/12-Relative-Length-EM-REM", - "translations": [ - "es", - "us" - ], - "graded": true - }, - { - "slug": "13-Anchor-Like-Button", - "title": "13-Anchor-Like-Button", - "done": false, - "path": "exercises/13-Anchor-Like-Button", - "translations": [ - "es", - "us" - ], - "graded": true - } - ] + "graded": true } \ No newline at end of file From e9306618337e7e04e55ed39bbdf4a5ca6b2e2817 Mon Sep 17 00:00:00 2001 From: Alejandro Sanchez Date: Mon, 8 Feb 2021 17:11:53 +0000 Subject: [PATCH 006/491] learnpack adjustments on instructions, some images, etc. --- .gitignore | 1 + .learn/assets/einstein.png | Bin 0 -> 146291 bytes .learn/assets/logo.ico | Bin 0 -> 19814 bytes README.md | 22 +++++++++++++--------- exercises/04.1-Combined-Rules/styles.css | 2 +- exercises/04.1-Combined-Rules/tests.js | 3 +-- exercises/06-Practicing-Rules/tests.js | 2 +- exercises/08-Rounded-Image/index.html | 2 +- bc.json => learn.json | 0 9 files changed, 18 insertions(+), 14 deletions(-) create mode 100644 .learn/assets/einstein.png create mode 100644 .learn/assets/logo.ico rename bc.json => learn.json (100%) diff --git a/.gitignore b/.gitignore index dd558c24..8f255a69 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ !.gitpod.yml !.gitpod.Dockerfile !bc.json +!learn.json !README.md !/exercises diff --git a/.learn/assets/einstein.png b/.learn/assets/einstein.png new file mode 100644 index 0000000000000000000000000000000000000000..e0681fd039d35b747632b9a4e475cd711cd1285c GIT binary patch literal 146291 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�XGEK%Sk!0$vY{Z~o{_>Jg)CxB>s`Lc&sgU&%_H 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 A!~g&Q literal 0 HcmV?d00001 diff --git a/.learn/assets/logo.ico b/.learn/assets/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..3583e2a98dfe1a88530855beaaec65c32d1bdc0f GIT binary patch literal 19814 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 538d206a..85a71775 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ - +

CSS Exercises Tutorial at 4Geeks Academy

@@ -33,22 +33,26 @@ Complete selection of autograded CSS exercises, anyone interested in learning CS ## Manual installation -1) After downloading the exercise, make sure you have the [breathecode-cli](https://github.com/breatheco-de/breathecode-cli) installed and `node.js` version 8+ +1) Install the learnpack package manager for education and the html plugin to compile an test html exercises: + ``` -This is the command to install the breathecode-cli -$ npm i breathecode-cli -g +$ npm i learnpack -g +$ learnpack plugins:install learnpack-html ``` -2) Clone or download this repository. Once you finish downloading, you will find a new folder with a subdirectory "exercises" that contains all the exercises within. +2) Download the exercises + +```bash +$ learnpack install css-tutorial-exercises-course +``` -Note: Once you finish downloading, you will find a "exercises" folder that contains all the exercises within. +Note: Once you finish downloading, you will need to `cd` into the exercises folder and you will find a "exercises" folder that contains all the exercises within. -3) Start the tutorial/exercises by running the following command at the same level were your bc.json file is: +3) Start the tutorial/exercises by running the following command at the same level were your learn.json file is: ```sh $ npm i jest@24.8.0 -g -$ cd ./css-exercises -$ breathecode run +$ learnpack start ```

diff --git a/exercises/04.1-Combined-Rules/styles.css b/exercises/04.1-Combined-Rules/styles.css index 3c54a57d..6313a1bc 100644 --- a/exercises/04.1-Combined-Rules/styles.css +++ b/exercises/04.1-Combined-Rules/styles.css @@ -7,7 +7,7 @@ padding-bottom: 50px; background: rgb(189, 189, 189); - background-image: url(https://assets.breatheco.de/apis/img/funny/baby.jpg); + background-image: url(https://github.com/4GeeksAcademy/css-tutorial-exercises-course/blob/3a2d1dd03f58167a5a4894155af2d3aa4d41d647/.learn/assets/baby.jpg?raw=true); background-position-x: 100px; background-repeat: no-repeat; background-size: contain; diff --git a/exercises/04.1-Combined-Rules/tests.js b/exercises/04.1-Combined-Rules/tests.js index effb2c8f..3971bb19 100644 --- a/exercises/04.1-Combined-Rules/tests.js +++ b/exercises/04.1-Combined-Rules/tests.js @@ -130,8 +130,7 @@ describe("All the styles should be applied", function () { expect(orangeHoverSelector).toContain('#bdbdbd'); expect(orangeHoverSelector).toContain('no-repeat'); expect(orangeHoverSelector).toContain('100px'); - expect(orangeHoverSelector).toContain('url(https://assets.breatheco.de/apis/img/funny/baby.jpg)'); - // expect(orangeHoverSelector).toBe('#bdbdbd url(https://assets.breatheco.de/img/funny/scared-baby.jpg) no-repeat 100px'); + expect(orangeHoverSelector).toContain('url(https://github.com/4GeeksAcademy/css-tutorial-exercises-course/blob/3a2d1dd03f58167a5a4894155af2d3aa4d41d647/.learn/assets/baby.jpg?raw=true)'); }); it("the padding should include the shorthand property in the right order (top, right, bottom, left)", function () { diff --git a/exercises/06-Practicing-Rules/tests.js b/exercises/06-Practicing-Rules/tests.js index d3450b3c..65c75a18 100644 --- a/exercises/06-Practicing-Rules/tests.js +++ b/exercises/06-Practicing-Rules/tests.js @@ -26,7 +26,7 @@ describe("All the styles should be applied", function () { let body=document.querySelector("body"); let styles=window.getComputedStyle(body); expect(styles["background"]).toBe( - `url(http://assets.breatheco.de/apis/img/bg/background-vertical.jpg) repeat-y` + `url(https://github.com/4GeeksAcademy/css-tutorial-exercises-course/blob/3a2d1dd03f58167a5a4894155af2d3aa4d41d647/.learn/assets/background-vertical.jpg?raw=true) repeat-y` ); }); it("the font-family should be 'Times New Roman'", function () { diff --git a/exercises/08-Rounded-Image/index.html b/exercises/08-Rounded-Image/index.html index f8637953..95931a07 100644 --- a/exercises/08-Rounded-Image/index.html +++ b/exercises/08-Rounded-Image/index.html @@ -8,6 +8,6 @@ - + diff --git a/bc.json b/learn.json similarity index 100% rename from bc.json rename to learn.json From 648c81f697cb672869a3b9cb1f0312cbb3a18b9c Mon Sep 17 00:00:00 2001 From: Alejandro Sanchez Date: Tue, 9 Feb 2021 11:19:53 -0500 Subject: [PATCH 007/491] Update .gitpod.Dockerfile --- .gitpod.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile index 903fd2fc..31389fd0 100644 --- a/.gitpod.Dockerfile +++ b/.gitpod.Dockerfile @@ -4,4 +4,4 @@ FROM gitpod/workspace-full:latest USER gitpod RUN npm i jest@24.8.0 -g -RUN npm i learnpack -g && learnpack plugins:install learnpack-html && learnpack plugins:install learnpack-node +RUN npm i learnpack@0.0.88 -g && learnpack plugins:install learnpack-html@0.0.17 From df6eed148c1cb447f3996ad434a8c736e85e114b Mon Sep 17 00:00:00 2001 From: Elvira Quiroz <63673743+ElviraQDP@users.noreply.github.com> Date: Thu, 11 Mar 2021 19:46:20 -0300 Subject: [PATCH 008/491] css badge uploaded to updated README.md --- css-badge.png | Bin 0 -> 13530 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 css-badge.png diff --git a/css-badge.png b/css-badge.png new file mode 100644 index 0000000000000000000000000000000000000000..31fa011db88a701d1a7a172bdc44daf834145ff1 GIT binary patch literal 13530 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.noreply.github.com> Date: Wed, 14 Apr 2021 16:36:43 -0400 Subject: [PATCH 009/491] Update README.es.md --- exercises/06-Practicing-Rules/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/06-Practicing-Rules/README.es.md b/exercises/06-Practicing-Rules/README.es.md index 61dfd055..2991fe70 100644 --- a/exercises/06-Practicing-Rules/README.es.md +++ b/exercises/06-Practicing-Rules/README.es.md @@ -6,7 +6,7 @@ 1. Establece esta URL como la imagen de fondo de la página y repítela solo verticalmente: https://github.com/4GeeksAcademy/css-tutorial-exercises-course/blob/master/.learn/assets/background-vertical.jpg?raw=true -2. Cambia el tipo de fuente (font-size) del h1 a Courier +2. Cambia el tipo de fuente (font-type) del h1 a Courier y el resto del sitio web a Times New Roman. 3. Cambia el color del h1 a rojo. From 7a2a5a76eef1e9bf7e5292e053beb8bd3d5174a8 Mon Sep 17 00:00:00 2001 From: Elvira Quiroz <63673743+ElviraQDP@users.noreply.github.com> Date: Wed, 14 Apr 2021 16:41:22 -0400 Subject: [PATCH 010/491] missing word added --- exercises/08-Rounded-Image/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/08-Rounded-Image/README.es.md b/exercises/08-Rounded-Image/README.es.md index 98d140a0..c2aade86 100644 --- a/exercises/08-Rounded-Image/README.es.md +++ b/exercises/08-Rounded-Image/README.es.md @@ -10,6 +10,6 @@ La forma obvia de crear una imagen de perfil redondeada es crear una etiqueta de Adicionalmente a border-radius tenemos que tambien utilizar la propiedad `object-fit`, [aqui hay una explicación](https://www.loom.com/share/15186e456dfd4741887997af40325721). -Si la es mas grande que el div y quieres centrarla o enfocarte en una zona en particular puedes utilizar `object-position`. +Si la imagen es mas grande que el div y quieres centrarla o enfocarte en una zona en particular puedes utilizar `object-position`. En este articulo puedes leer más [sobre la propiedad object fit](https://css-tricks.com/on-object-fit-and-object-position/) From e930df0b0d6a0b0d1b6d38a4b505941144ab52e9 Mon Sep 17 00:00:00 2001 From: Elvira Quiroz Date: Sun, 4 Jul 2021 18:32:46 +0000 Subject: [PATCH 011/491] reviewing instructions --- exercises/00-Welcome/README.es.md | 6 +++--- exercises/00-Welcome/README.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/exercises/00-Welcome/README.es.md b/exercises/00-Welcome/README.es.md index 11e4bc74..84ce3fea 100644 --- a/exercises/00-Welcome/README.es.md +++ b/exercises/00-Welcome/README.es.md @@ -5,18 +5,18 @@ intro: "https://www.youtube.com/watch?v=BDKdUPDez-U" # ¡¡Bienvenido a los ejercicios de CSS!! Mi nombre es Alejandro Sanchez [@alesanchezr](https://twitter.com/alesanchezr) ¡Estoy muy contento de que estén aquí! 🎉 😂 -Aprender a programar es dificil ¡Necesitas coaching! Envíame un DM vía Twitter si tienes alguna pregunta. +Aprender a programar es dificil ¡Probablemente necesitarás coaching! Envíame un DM vía Twitter si tienes alguna duda. Durante este curso aprenderás los siguientes conceptos: 1. Cómo aplicar CSS a tu sitio web de tres formas diferentes: Inline, agrupando todo dentro de la etiqueta ` + + + Hello! I am an anchor in red, change my color to yellow + + diff --git a/.learn/resets/01.3-Your-Second-Style/index.html b/.learn/resets/01.3-Your-Second-Style/index.html new file mode 100644 index 00000000..998d973a --- /dev/null +++ b/.learn/resets/01.3-Your-Second-Style/index.html @@ -0,0 +1,11 @@ + + + + + + + Hello! My background should be blue! + + diff --git a/.learn/resets/02-Separate-Stylesheet/index.html b/.learn/resets/02-Separate-Stylesheet/index.html new file mode 100644 index 00000000..a7be7a61 --- /dev/null +++ b/.learn/resets/02-Separate-Stylesheet/index.html @@ -0,0 +1,9 @@ + + + + + + + My background should be blue. + + diff --git a/.learn/resets/02.1-Background/index.html b/.learn/resets/02.1-Background/index.html new file mode 100644 index 00000000..ce03ce24 --- /dev/null +++ b/.learn/resets/02.1-Background/index.html @@ -0,0 +1,10 @@ + + + + + 02 Background + + + My background should be an image with th size "contain" + + diff --git a/.learn/resets/03-Inline-Styles/index.html b/.learn/resets/03-Inline-Styles/index.html new file mode 100644 index 00000000..ab36cc54 --- /dev/null +++ b/.learn/resets/03-Inline-Styles/index.html @@ -0,0 +1,17 @@ + + + + 03 Inline Styles + + + + + + + + + + +
Hello
My brother
+ + diff --git a/.learn/resets/04-Class-Selector/index.html b/.learn/resets/04-Class-Selector/index.html new file mode 100644 index 00000000..e3abd1bd --- /dev/null +++ b/.learn/resets/04-Class-Selector/index.html @@ -0,0 +1,14 @@ + + + + + + 04 Class selector + + + + +

Hello!

+

World!

+ + diff --git a/.learn/resets/04.1-Combined-Rules/index.html b/.learn/resets/04.1-Combined-Rules/index.html new file mode 100644 index 00000000..2af5a24c --- /dev/null +++ b/.learn/resets/04.1-Combined-Rules/index.html @@ -0,0 +1,13 @@ + + + + + + 04 Combined Rules + + + + +
Hello!
+ + diff --git a/.learn/resets/04.2-Apply-several-classes/index.html b/.learn/resets/04.2-Apply-several-classes/index.html new file mode 100644 index 00000000..a64723af --- /dev/null +++ b/.learn/resets/04.2-Apply-several-classes/index.html @@ -0,0 +1,13 @@ + + + + + + 04 Class selector + + + + +
9
+ + diff --git a/.learn/resets/04.3-id-Selector/index.html b/.learn/resets/04.3-id-Selector/index.html new file mode 100644 index 00000000..5b9a773d --- /dev/null +++ b/.learn/resets/04.3-id-Selector/index.html @@ -0,0 +1,13 @@ + + + + + + 04.3 ID selector + + + + + I should look like a button + + diff --git a/.learn/resets/05-Specificity/index.html b/.learn/resets/05-Specificity/index.html new file mode 100644 index 00000000..3d68946c --- /dev/null +++ b/.learn/resets/05-Specificity/index.html @@ -0,0 +1,18 @@ + + + + + + + 05 Specificity + + +
    +
  • My first item of the list
  • +
  • My second item of the list
  • +
  • My third item of the list
  • +
  • My forth item of the list
  • +
  • My fifth item of the list
  • +
+ + diff --git a/.learn/resets/06-Practicing-Rules/index.html b/.learn/resets/06-Practicing-Rules/index.html new file mode 100644 index 00000000..4119acb5 --- /dev/null +++ b/.learn/resets/06-Practicing-Rules/index.html @@ -0,0 +1,34 @@ + + + + + + + 06 Practicing Rules + + + +

The learning essay

+

3 reasons you know you are learning

+

+ We are going to explain in this pharagraph the 3 most comon signs that you should look into yourself to recognize if you are learning. +

+
    +
  1. You are able to complete the exercises by yourself.
  2. +
  3. You understand what the teacher is talking about
  4. +
  5. Your are able to have conversations about the topic
  6. +
+

3 reasons you know love what you are learning

+
    +
  • Time passes fast.
  • +
  • + You are anxious to finish this excercise and start the next one. +
  • +
  • Is 12am and you don't want to go to sleep.
  • +
+

+ If you can't sleep, what better than watching videos of cats? + click here +

+ + \ No newline at end of file diff --git a/.learn/resets/07-Very-Specific-Rules/index.html b/.learn/resets/07-Very-Specific-Rules/index.html new file mode 100644 index 00000000..9c691446 --- /dev/null +++ b/.learn/resets/07-Very-Specific-Rules/index.html @@ -0,0 +1,82 @@ + + + + + + + 07 Very Specific Rules + + +

The learning essay

+

3 reasons you know you are learning

+

+ We are going to explain in this pharagraph the 3 most comon signs that you should look into yourself to recognize if you are learning. +

+
    +
  1. You are able to complete the exercises by yourself.
  2. +
  3. You understand what the teacher is talking about
  4. +
  5. Your are able to have conversations about the topic
  6. +
+

3 reasons you know love what you are learning

+
    +
  • Time passes fast.
  • +
  • You are anxious to finish this excercise and start the next one.
  • +
  • Is 12am and you don't want to go to sleep.
  • +
+

+ If you can't sleep, what better than watching videos of cats? + click here +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AgeGender
12 yearsMale
22 yearsFemale
11 yearsMale
21 yearsMale
22 yearsFemale
10 yearsMale
13 yearsFemale
13 yearsMale
10 yearsMale
11 yearsMale
11 yearsMale
+ + diff --git a/.learn/resets/08-Rounded-Image/index.html b/.learn/resets/08-Rounded-Image/index.html new file mode 100644 index 00000000..95931a07 --- /dev/null +++ b/.learn/resets/08-Rounded-Image/index.html @@ -0,0 +1,13 @@ + + + + + + + 08 Rounded Image + + + + + + diff --git a/.learn/resets/09-Anchor-Styles/index.html b/.learn/resets/09-Anchor-Styles/index.html new file mode 100644 index 00000000..984ca01e --- /dev/null +++ b/.learn/resets/09-Anchor-Styles/index.html @@ -0,0 +1,13 @@ + + + + + + + 09 Anchor Styles + + + + Click me + + diff --git a/.learn/resets/10-Your-Own-Font/index.html b/.learn/resets/10-Your-Own-Font/index.html new file mode 100644 index 00000000..a0e7f25a --- /dev/null +++ b/.learn/resets/10-Your-Own-Font/index.html @@ -0,0 +1,15 @@ + + + + + + + + + + 10 Your Own Font + + +

My unique font

+ + diff --git a/.learn/resets/11-Font-Awesome-Icons/index.html b/.learn/resets/11-Font-Awesome-Icons/index.html new file mode 100644 index 00000000..a619ff63 --- /dev/null +++ b/.learn/resets/11-Font-Awesome-Icons/index.html @@ -0,0 +1,14 @@ + + + + + + + 11 Font Awesome + + +
    +
  • Hello
  • +
+ + diff --git a/.learn/resets/12-Relative-Length-EM-REM/index.html b/.learn/resets/12-Relative-Length-EM-REM/index.html new file mode 100644 index 00000000..60a98594 --- /dev/null +++ b/.learn/resets/12-Relative-Length-EM-REM/index.html @@ -0,0 +1,21 @@ + + + + + + + 12 Relative Length EM REM + + +
+

First h2 heading

+

First h3 heading

+

Here is some nice fake content

+
+
+

Second h2 heading

+

Second h3 heading

+

More fake content but now in the second container

+
+ + diff --git a/.learn/resets/13-Anchor-Like-Button/index.html b/.learn/resets/13-Anchor-Like-Button/index.html new file mode 100644 index 00000000..aaaa7740 --- /dev/null +++ b/.learn/resets/13-Anchor-Like-Button/index.html @@ -0,0 +1,12 @@ + + + + + + + 13 Anchor Like Button + + + Beautiful Button + + diff --git a/exercises/01.2-Your-First-Style/tests.js b/exercises/01.2-Your-First-Style/tests.js index 8c42761d..cdccc97a 100644 --- a/exercises/01.2-Your-First-Style/tests.js +++ b/exercises/01.2-Your-First-Style/tests.js @@ -26,13 +26,8 @@ describe("All the styles should be applied", function() { // console.log(bodyInlineStyle[0].style._values.background); }); it("You should not change the existing head tag elements", function () { - - let meta1 = document.getElementsByTagName('head')[0].innerHTML.toString().indexOf("-1).toBeFalsy(); + it("You should not change the existing head tag elements", function () { + let meta = document.querySelector('head').querySelector("meta") + let link = document.querySelector('link').href + + expect(meta).toBe(null) + expect(link).toBe('http://localhost/styles.css') }) }); diff --git a/exercises/02.1-Background/tests.js b/exercises/02.1-Background/tests.js index 2e3da762..0c19450a 100644 --- a/exercises/02.1-Background/tests.js +++ b/exercises/02.1-Background/tests.js @@ -51,16 +51,14 @@ describe("All the styles should be applied", function () { let styles=window.getComputedStyle(body); expect(styles["background-repeat"]).toBe("inherit"); }); - it("You should not change the head tag", function () { - - let meta1 = document.getElementsByTagName('head')[0].innerHTML.toString().indexOf("-1).toBeFalsy(); + it("You should not change the existing head tag elements", function () { + let head = document.querySelector('head'); + let meta = head.querySelector("meta") + let link = head.querySelector('link').href + let title = head.querySelector('title').innerHTML + + expect(meta).toBe(null) + expect(link).toBe('http://localhost/styles.css') + expect(title).toBe('02 Background') }) }); diff --git a/exercises/03-Inline-Styles/tests.js b/exercises/03-Inline-Styles/tests.js index dee4f6fa..8192affe 100644 --- a/exercises/03-Inline-Styles/tests.js +++ b/exercises/03-Inline-Styles/tests.js @@ -1,7 +1,6 @@ -const fs = require("fs"); -const path = require("path"); -const html = fs.readFileSync(path.resolve(__dirname, "./index.html"), "utf8"); -const css = fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +const fs=require("fs"); +const path=require("path"); +const html=fs.readFileSync(path.resolve(__dirname, "./index.html"), "utf8"); jest.dontMock("fs"); @@ -13,20 +12,13 @@ describe("The Table tag should contain inline style background: green", function afterEach(() => { jest.resetModules(); }); - it("The styles.css file should be empty", function() { - expect(css.toString() === "").toBeTruthy(); - }); - it("You should not change the head tag", function () { - - let meta1 = document.getElementsByTagName('head')[0].innerHTML.toString().indexOf("-1).toBeFalsy(); + it("You should not change the existing head tag elements", function () { + let head = document.querySelector('head'); + let meta = head.querySelector("meta") + let title = head.querySelector('title').innerHTML + + expect(meta).toBe(null) + expect(title).toBe('03 Inline Styles') }) it("The background should be green", function() { diff --git a/exercises/04.1-Combined-Rules/tests.js b/exercises/04.1-Combined-Rules/tests.js index 3971bb19..c69652cb 100644 --- a/exercises/04.1-Combined-Rules/tests.js +++ b/exercises/04.1-Combined-Rules/tests.js @@ -160,16 +160,14 @@ describe("All the styles should be applied", function () { expect(padBottom).toBeFalsy(); expect(padLeft).toBeFalsy(); }); - it("You should not change the head tag", function () { - - let meta1 = document.getElementsByTagName('head')[0].innerHTML.toString().indexOf("-1).toBeFalsy(); + it("You should not change the existing head tag elements", function () { + let head = document.querySelector('head'); + let meta = head.querySelector("meta") + let link = head.querySelector('link').href + let title = head.querySelector('title') + + expect(meta).toBe(null) + expect(link).toBe('http://localhost/styles.css') + expect(title).not.toBe(null) }) }); diff --git a/exercises/05-Specificity/tests.js b/exercises/05-Specificity/tests.js index 407a91f8..e53f47cd 100644 --- a/exercises/05-Specificity/tests.js +++ b/exercises/05-Specificity/tests.js @@ -16,22 +16,15 @@ describe("All the styles should be applied", function () { }); - it("You should not change the head tag", function () { - - let meta1 = document.getElementsByTagName('head')[0].innerHTML.toString().indexOf("-1).toBeFalsy(); - - - - - + it("You should not change the existing head tag elements", function () { + let head = document.querySelector('head'); + let meta = head.querySelector("meta") + let link = head.querySelector('link').href + let title = head.querySelector('title') + + expect(meta).not.toBe(null) + expect(link).toBe('http://localhost/styles.css') + expect(title).not.toBe(null) }) it("You should not delete or edit the existing code", function () { diff --git a/exercises/06-Practicing-Rules/tests.js b/exercises/06-Practicing-Rules/tests.js index 65c75a18..79cc8e0e 100644 --- a/exercises/06-Practicing-Rules/tests.js +++ b/exercises/06-Practicing-Rules/tests.js @@ -131,17 +131,15 @@ describe("All the styles should be applied", function () { } expect(orangeHoverSelector).toBe('green'); }); - it("You should not change the head tag", function () { - - let meta1 = document.getElementsByTagName('head')[0].innerHTML.toString().indexOf("-1).toBeFalsy(); + it("You should not change the existing head tag elements", function () { + let head = document.querySelector('head'); + let meta = head.querySelector("meta") + let link = head.querySelector('link').href + let title = head.querySelector('title') + + expect(meta).not.toBe(null) + expect(link).toBe('http://localhost/styles.css') + expect(title).not.toBe(null) }) }); diff --git a/exercises/07-Very-Specific-Rules/tests.js b/exercises/07-Very-Specific-Rules/tests.js index 5f68ba04..ef3fa28e 100644 --- a/exercises/07-Very-Specific-Rules/tests.js +++ b/exercises/07-Very-Specific-Rules/tests.js @@ -77,17 +77,15 @@ describe("All the styles should be applied", function () { expect(cssBody).toBe("body"); } ) - it("You should not change the head tag", function () { - - let meta1 = document.getElementsByTagName('head')[0].innerHTML.toString().indexOf("-1).toBeFalsy(); + it("You should not change the existing head tag elements", function () { + let head = document.querySelector('head'); + let meta = head.querySelector("meta") + let link = head.querySelector('link').href + let title = head.querySelector('title') + + expect(meta).not.toBe(null) + expect(link).toBe('http://localhost/styles.css') + expect(title).not.toBe(null) }) diff --git a/exercises/08-Rounded-Image/tests.js b/exercises/08-Rounded-Image/tests.js index d2c7c36f..3b84c476 100644 --- a/exercises/08-Rounded-Image/tests.js +++ b/exercises/08-Rounded-Image/tests.js @@ -83,16 +83,14 @@ describe("All the styles should be applied", function() { let idTagStyles = window.getComputedStyle(divTag); expect(idTagStyles["background-image"]).toBeTruthy(); }); - it("You should not change the head tag", function () { - - let meta1 = document.getElementsByTagName('head')[0].innerHTML.toString().indexOf("-1).toBeFalsy(); + it("You should not change the existing head tag elements", function () { + let head = document.querySelector('head'); + let meta = head.querySelector("meta") + let link = head.querySelector('link').href + let title = head.querySelector('title') + + expect(meta).not.toBe(null) + expect(link).toBe('http://localhost/styles.css') + expect(title).not.toBe(null) }) }); diff --git a/exercises/09-Anchor-Styles/tests.js b/exercises/09-Anchor-Styles/tests.js index 8e4baa92..82d9c456 100644 --- a/exercises/09-Anchor-Styles/tests.js +++ b/exercises/09-Anchor-Styles/tests.js @@ -51,17 +51,15 @@ describe("All the styles should be applied", function () { expect(orangeHoverSelector).toBe("#000 #aaa #aaa #000"); }); - it("You should not change the head tag", function () { - - let meta1 = document.getElementsByTagName('head')[0].innerHTML.toString().indexOf("-1).toBeFalsy(); + it("You should not change the existing head tag elements", function () { + let head = document.querySelector('head'); + let meta = head.querySelector("meta") + let link = head.querySelector('link').href + let title = head.querySelector('title') + + expect(meta).not.toBe(null) + expect(link).toBe('http://localhost/styles.css') + expect(title).not.toBe(null) }) }); diff --git a/exercises/12-Relative-Length-EM-REM/tests.js b/exercises/12-Relative-Length-EM-REM/tests.js index 33fd71a0..1344fed0 100644 --- a/exercises/12-Relative-Length-EM-REM/tests.js +++ b/exercises/12-Relative-Length-EM-REM/tests.js @@ -52,17 +52,15 @@ describe("All the styles should be applied", function () { expect(cssArray).toBe("#the-second-one"); } ) - it("You should not change the head tag", function () { - - let meta1 = document.getElementsByTagName('head')[0].innerHTML.toString().indexOf("-1).toBeFalsy(); + it("You should not change the existing head tag elements", function () { + let head = document.querySelector('head'); + let meta = head.querySelector("meta") + let link = head.querySelector('link').href + let title = head.querySelector('title') + + expect(meta).not.toBe(null) + expect(link).toBe('http://localhost/styles.css') + expect(title).not.toBe(null) }) }); diff --git a/exercises/13-Anchor-Like-Button/tests.js b/exercises/13-Anchor-Like-Button/tests.js index a3de631a..0b53d9f6 100644 --- a/exercises/13-Anchor-Like-Button/tests.js +++ b/exercises/13-Anchor-Like-Button/tests.js @@ -90,22 +90,15 @@ describe("All the styles should be applied", function () { expect(cssArray).toBe(".orange-btn"); } ) -it("You should not change the head tag", function () { - - let meta1 = document.getElementsByTagName('head')[0].innerHTML.toString().indexOf("-1).toBeFalsy(); - - - - - + it("You should not change the existing head tag elements", function () { + let head = document.querySelector('head'); + let meta = head.querySelector("meta") + let link = head.querySelector('link').href + let title = head.querySelector('title') + + expect(meta).not.toBe(null) + expect(link).toBe('http://localhost/styles.css') + expect(title).not.toBe(null) }) }); From 57814557bd2a5c59ff9f62a7073860c7c54605b9 Mon Sep 17 00:00:00 2001 From: Elvira Quiroz Date: Mon, 16 Aug 2021 19:43:58 +0000 Subject: [PATCH 024/491] fixing issue from learnpack --- exercises/06-Practicing-Rules/tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/06-Practicing-Rules/tests.js b/exercises/06-Practicing-Rules/tests.js index 79cc8e0e..62263d92 100644 --- a/exercises/06-Practicing-Rules/tests.js +++ b/exercises/06-Practicing-Rules/tests.js @@ -26,7 +26,7 @@ describe("All the styles should be applied", function () { let body=document.querySelector("body"); let styles=window.getComputedStyle(body); expect(styles["background"]).toBe( - `url(https://github.com/4GeeksAcademy/css-tutorial-exercises-course/blob/3a2d1dd03f58167a5a4894155af2d3aa4d41d647/.learn/assets/background-vertical.jpg?raw=true) repeat-y` + `url(../../.learn/assets/background-vertical.jpg?raw=true) repeat-y` ); }); it("the font-family should be 'Times New Roman'", function () { From 502bdde39fe7cbe290543fc121d44ac5670b3559 Mon Sep 17 00:00:00 2001 From: Alejandro Sanchez Date: Tue, 31 Aug 2021 10:55:32 -0400 Subject: [PATCH 025/491] Update .gitpod.Dockerfile --- .gitpod.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile index 79f4ef46..33ad46d7 100644 --- a/.gitpod.Dockerfile +++ b/.gitpod.Dockerfile @@ -4,4 +4,4 @@ FROM gitpod/workspace-full:latest USER gitpod RUN npm i jest@24.8.0 -g -RUN npm i learnpack@0.1.14 -g && learnpack plugins:install learnpack-html@0.0.20 +RUN npm i learnpack@0.1.17 -g && learnpack plugins:install learnpack-html@0.0.20 From cb69126ba6b68a9f91e3b7fd7aab0e6b0b932e9b Mon Sep 17 00:00:00 2001 From: Alejandro Sanchez Date: Tue, 31 Aug 2021 10:55:46 -0400 Subject: [PATCH 026/491] Update learn.json --- learn.json | 1 + 1 file changed, 1 insertion(+) diff --git a/learn.json b/learn.json index beeaf7d1..044f86f1 100644 --- a/learn.json +++ b/learn.json @@ -12,6 +12,7 @@ "video-solutions": true, "graded": false, "config": { + "disableGrading": true, "editor": { "version": "1.0.69" } From 832a307549c696b004b55da1c795b84aa2d74d63 Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez Date: Thu, 9 Sep 2021 19:20:35 +0000 Subject: [PATCH 027/491] Issue #349 fixed --- .learn/resets/01-Hello-World/index.html | 1 - .learn/resets/01.1-The-Style-Tag/index.html | 6 -- .../resets/01.2-Your-First-Style/index.html | 14 ---- .../resets/01.3-Your-Second-Style/index.html | 11 --- .../resets/02-Separate-Stylesheet/index.html | 9 -- .learn/resets/02.1-Background/index.html | 10 --- .learn/resets/03-Inline-Styles/index.html | 17 ---- .learn/resets/04-Class-Selector/index.html | 14 ---- .learn/resets/04.1-Combined-Rules/index.html | 13 --- .../04.2-Apply-several-classes/index.html | 13 --- .learn/resets/04.3-id-Selector/index.html | 13 --- .learn/resets/05-Specificity/index.html | 18 ---- .learn/resets/06-Practicing-Rules/index.html | 34 -------- .../resets/07-Very-Specific-Rules/index.html | 82 ------------------- .learn/resets/08-Rounded-Image/index.html | 13 --- .learn/resets/09-Anchor-Styles/index.html | 13 --- .learn/resets/10-Your-Own-Font/index.html | 15 ---- .../resets/11-Font-Awesome-Icons/index.html | 14 ---- .../12-Relative-Length-EM-REM/index.html | 21 ----- .../resets/13-Anchor-Like-Button/index.html | 12 --- exercises/04.1-Combined-Rules/tests.js | 2 +- 21 files changed, 1 insertion(+), 344 deletions(-) delete mode 100644 .learn/resets/01-Hello-World/index.html delete mode 100644 .learn/resets/01.1-The-Style-Tag/index.html delete mode 100644 .learn/resets/01.2-Your-First-Style/index.html delete mode 100644 .learn/resets/01.3-Your-Second-Style/index.html delete mode 100644 .learn/resets/02-Separate-Stylesheet/index.html delete mode 100644 .learn/resets/02.1-Background/index.html delete mode 100644 .learn/resets/03-Inline-Styles/index.html delete mode 100644 .learn/resets/04-Class-Selector/index.html delete mode 100644 .learn/resets/04.1-Combined-Rules/index.html delete mode 100644 .learn/resets/04.2-Apply-several-classes/index.html delete mode 100644 .learn/resets/04.3-id-Selector/index.html delete mode 100644 .learn/resets/05-Specificity/index.html delete mode 100644 .learn/resets/06-Practicing-Rules/index.html delete mode 100644 .learn/resets/07-Very-Specific-Rules/index.html delete mode 100644 .learn/resets/08-Rounded-Image/index.html delete mode 100644 .learn/resets/09-Anchor-Styles/index.html delete mode 100644 .learn/resets/10-Your-Own-Font/index.html delete mode 100644 .learn/resets/11-Font-Awesome-Icons/index.html delete mode 100644 .learn/resets/12-Relative-Length-EM-REM/index.html delete mode 100644 .learn/resets/13-Anchor-Like-Button/index.html diff --git a/.learn/resets/01-Hello-World/index.html b/.learn/resets/01-Hello-World/index.html deleted file mode 100644 index 03ae0584..00000000 --- a/.learn/resets/01-Hello-World/index.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.learn/resets/01.1-The-Style-Tag/index.html b/.learn/resets/01.1-The-Style-Tag/index.html deleted file mode 100644 index 1c51e8e0..00000000 --- a/.learn/resets/01.1-The-Style-Tag/index.html +++ /dev/null @@ -1,6 +0,0 @@ - -

- Coding is a basic literacy in the digital age, and it is important for kids to understand and be able to work with and understand the technology - around them. Having children learn coding at a young age prepares them for the future. Coding helps children with communication, creativity, - math,writing, and confidence. -

diff --git a/.learn/resets/01.2-Your-First-Style/index.html b/.learn/resets/01.2-Your-First-Style/index.html deleted file mode 100644 index 39661132..00000000 --- a/.learn/resets/01.2-Your-First-Style/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - Hello! I am an anchor in red, change my color to yellow - - diff --git a/.learn/resets/01.3-Your-Second-Style/index.html b/.learn/resets/01.3-Your-Second-Style/index.html deleted file mode 100644 index 998d973a..00000000 --- a/.learn/resets/01.3-Your-Second-Style/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - Hello! My background should be blue! - - diff --git a/.learn/resets/02-Separate-Stylesheet/index.html b/.learn/resets/02-Separate-Stylesheet/index.html deleted file mode 100644 index a7be7a61..00000000 --- a/.learn/resets/02-Separate-Stylesheet/index.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - My background should be blue. - - diff --git a/.learn/resets/02.1-Background/index.html b/.learn/resets/02.1-Background/index.html deleted file mode 100644 index ce03ce24..00000000 --- a/.learn/resets/02.1-Background/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - 02 Background - - - My background should be an image with th size "contain" - - diff --git a/.learn/resets/03-Inline-Styles/index.html b/.learn/resets/03-Inline-Styles/index.html deleted file mode 100644 index ab36cc54..00000000 --- a/.learn/resets/03-Inline-Styles/index.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - 03 Inline Styles - - - - - - - - - - -
Hello
My brother
- - diff --git a/.learn/resets/04-Class-Selector/index.html b/.learn/resets/04-Class-Selector/index.html deleted file mode 100644 index e3abd1bd..00000000 --- a/.learn/resets/04-Class-Selector/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - 04 Class selector - - - - -

Hello!

-

World!

- - diff --git a/.learn/resets/04.1-Combined-Rules/index.html b/.learn/resets/04.1-Combined-Rules/index.html deleted file mode 100644 index 2af5a24c..00000000 --- a/.learn/resets/04.1-Combined-Rules/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - 04 Combined Rules - - - - -
Hello!
- - diff --git a/.learn/resets/04.2-Apply-several-classes/index.html b/.learn/resets/04.2-Apply-several-classes/index.html deleted file mode 100644 index a64723af..00000000 --- a/.learn/resets/04.2-Apply-several-classes/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - 04 Class selector - - - - -
9
- - diff --git a/.learn/resets/04.3-id-Selector/index.html b/.learn/resets/04.3-id-Selector/index.html deleted file mode 100644 index 5b9a773d..00000000 --- a/.learn/resets/04.3-id-Selector/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - 04.3 ID selector - - - - - I should look like a button - - diff --git a/.learn/resets/05-Specificity/index.html b/.learn/resets/05-Specificity/index.html deleted file mode 100644 index 3d68946c..00000000 --- a/.learn/resets/05-Specificity/index.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - 05 Specificity - - -
    -
  • My first item of the list
  • -
  • My second item of the list
  • -
  • My third item of the list
  • -
  • My forth item of the list
  • -
  • My fifth item of the list
  • -
- - diff --git a/.learn/resets/06-Practicing-Rules/index.html b/.learn/resets/06-Practicing-Rules/index.html deleted file mode 100644 index 4119acb5..00000000 --- a/.learn/resets/06-Practicing-Rules/index.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - 06 Practicing Rules - - - -

The learning essay

-

3 reasons you know you are learning

-

- We are going to explain in this pharagraph the 3 most comon signs that you should look into yourself to recognize if you are learning. -

-
    -
  1. You are able to complete the exercises by yourself.
  2. -
  3. You understand what the teacher is talking about
  4. -
  5. Your are able to have conversations about the topic
  6. -
-

3 reasons you know love what you are learning

-
    -
  • Time passes fast.
  • -
  • - You are anxious to finish this excercise and start the next one. -
  • -
  • Is 12am and you don't want to go to sleep.
  • -
-

- If you can't sleep, what better than watching videos of cats? - click here -

- - \ No newline at end of file diff --git a/.learn/resets/07-Very-Specific-Rules/index.html b/.learn/resets/07-Very-Specific-Rules/index.html deleted file mode 100644 index 9c691446..00000000 --- a/.learn/resets/07-Very-Specific-Rules/index.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - 07 Very Specific Rules - - -

The learning essay

-

3 reasons you know you are learning

-

- We are going to explain in this pharagraph the 3 most comon signs that you should look into yourself to recognize if you are learning. -

-
    -
  1. You are able to complete the exercises by yourself.
  2. -
  3. You understand what the teacher is talking about
  4. -
  5. Your are able to have conversations about the topic
  6. -
-

3 reasons you know love what you are learning

-
    -
  • Time passes fast.
  • -
  • You are anxious to finish this excercise and start the next one.
  • -
  • Is 12am and you don't want to go to sleep.
  • -
-

- If you can't sleep, what better than watching videos of cats? - click here -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AgeGender
12 yearsMale
22 yearsFemale
11 yearsMale
21 yearsMale
22 yearsFemale
10 yearsMale
13 yearsFemale
13 yearsMale
10 yearsMale
11 yearsMale
11 yearsMale
- - diff --git a/.learn/resets/08-Rounded-Image/index.html b/.learn/resets/08-Rounded-Image/index.html deleted file mode 100644 index 95931a07..00000000 --- a/.learn/resets/08-Rounded-Image/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - 08 Rounded Image - - - - - - diff --git a/.learn/resets/09-Anchor-Styles/index.html b/.learn/resets/09-Anchor-Styles/index.html deleted file mode 100644 index 984ca01e..00000000 --- a/.learn/resets/09-Anchor-Styles/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - 09 Anchor Styles - - - - Click me - - diff --git a/.learn/resets/10-Your-Own-Font/index.html b/.learn/resets/10-Your-Own-Font/index.html deleted file mode 100644 index a0e7f25a..00000000 --- a/.learn/resets/10-Your-Own-Font/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - 10 Your Own Font - - -

My unique font

- - diff --git a/.learn/resets/11-Font-Awesome-Icons/index.html b/.learn/resets/11-Font-Awesome-Icons/index.html deleted file mode 100644 index a619ff63..00000000 --- a/.learn/resets/11-Font-Awesome-Icons/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - 11 Font Awesome - - -
    -
  • Hello
  • -
- - diff --git a/.learn/resets/12-Relative-Length-EM-REM/index.html b/.learn/resets/12-Relative-Length-EM-REM/index.html deleted file mode 100644 index 60a98594..00000000 --- a/.learn/resets/12-Relative-Length-EM-REM/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - 12 Relative Length EM REM - - -
-

First h2 heading

-

First h3 heading

-

Here is some nice fake content

-
-
-

Second h2 heading

-

Second h3 heading

-

More fake content but now in the second container

-
- - diff --git a/.learn/resets/13-Anchor-Like-Button/index.html b/.learn/resets/13-Anchor-Like-Button/index.html deleted file mode 100644 index aaaa7740..00000000 --- a/.learn/resets/13-Anchor-Like-Button/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - 13 Anchor Like Button - - - Beautiful Button - - diff --git a/exercises/04.1-Combined-Rules/tests.js b/exercises/04.1-Combined-Rules/tests.js index c69652cb..d8e05434 100644 --- a/exercises/04.1-Combined-Rules/tests.js +++ b/exercises/04.1-Combined-Rules/tests.js @@ -127,7 +127,7 @@ describe("All the styles should be applied", function () { expect(backImg).toBeFalsy(); expect(backPos).toBeFalsy(); expect(backRepeat).toBeFalsy(); - expect(orangeHoverSelector).toContain('#bdbdbd'); + expect(orangeHoverSelector).toContain('rgb(189, 189, 189)'); expect(orangeHoverSelector).toContain('no-repeat'); expect(orangeHoverSelector).toContain('100px'); expect(orangeHoverSelector).toContain('url(https://github.com/4GeeksAcademy/css-tutorial-exercises-course/blob/3a2d1dd03f58167a5a4894155af2d3aa4d41d647/.learn/assets/baby.jpg?raw=true)'); From ede68d25eba488b20fb933589d23000c648a6713 Mon Sep 17 00:00:00 2001 From: Elvira Quiroz Date: Mon, 13 Sep 2021 20:01:48 +0000 Subject: [PATCH 028/491] checking instructions --- exercises/00-Welcome/README.es.md | 4 ++++ exercises/00-Welcome/README.md | 4 ++++ exercises/01-Hello-World/README.es.md | 10 ++++++---- exercises/01-Hello-World/README.md | 8 +++++--- exercises/01.1-The-Style-Tag/README.es.md | 7 ++++--- exercises/01.1-The-Style-Tag/README.md | 3 ++- exercises/01.2-Your-First-Style/README.es.md | 8 ++++---- exercises/01.2-Your-First-Style/README.md | 4 ++-- exercises/01.3-Your-Second-Style/README.es.md | 3 ++- exercises/01.3-Your-Second-Style/README.md | 1 + exercises/02-Separate-Stylesheet/README.es.md | 3 +-- exercises/02-Separate-Stylesheet/README.md | 2 +- exercises/02.1-Background/README.es.md | 16 ++++++++-------- exercises/03-Inline-Styles/README.es.md | 8 ++++---- exercises/03-Inline-Styles/README.md | 5 +---- exercises/04-Class-Selector/README.es.md | 12 ++++-------- exercises/04-Class-Selector/README.md | 11 ++++++----- exercises/04.1-Combined-Rules/README.es.md | 10 ++++------ exercises/04.1-Combined-Rules/README.md | 14 ++++++-------- .../04.2-Apply-several-classes/README.es.md | 4 +++- exercises/04.2-Apply-several-classes/README.md | 5 ++++- exercises/04.3-id-Selector/README.es.md | 9 ++++----- exercises/04.3-id-Selector/README.md | 9 ++++----- exercises/05-Specificity/README.es.md | 10 ++++------ exercises/05-Specificity/README.md | 6 +++--- exercises/06-Practicing-Rules/README.es.md | 8 +++----- exercises/06-Practicing-Rules/README.md | 6 +++--- exercises/07-Very-Specific-Rules/README.es.md | 3 +-- exercises/09-Anchor-Styles/README.es.md | 2 +- exercises/10-Your-Own-Font/README.es.md | 7 +++---- exercises/10-Your-Own-Font/README.md | 5 ++--- exercises/11-Font-Awesome-Icons/README.es.md | 5 +++-- exercises/11-Font-Awesome-Icons/README.md | 4 ++-- exercises/12-Relative-Length-EM-REM/README.es.md | 15 +++++++++------ exercises/12-Relative-Length-EM-REM/README.md | 14 ++++++++------ exercises/13-Anchor-Like-Button/README.es.md | 16 +++++++++------- exercises/13-Anchor-Like-Button/README.md | 6 ++++-- 37 files changed, 139 insertions(+), 128 deletions(-) diff --git a/exercises/00-Welcome/README.es.md b/exercises/00-Welcome/README.es.md index 84ce3fea..bed6d3a1 100644 --- a/exercises/00-Welcome/README.es.md +++ b/exercises/00-Welcome/README.es.md @@ -11,9 +11,13 @@ Durante este curso aprenderás los siguientes conceptos: 1. Cómo aplicar CSS a tu sitio web de tres formas diferentes: Inline, agrupando todo dentro de la etiqueta ` ``` -## 📝 Instruccciones -Añade una etiqueta ` From 9f3eb5b562ccc23e81e7939df7ca7563e5a3e1fe Mon Sep 17 00:00:00 2001 From: Alejandro Sanchez Date: Tue, 22 Feb 2022 17:05:15 -0500 Subject: [PATCH 066/491] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4100c202..768db291 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ Complete selection of autograded CSS exercises, anyone interested in learning CS

One click installation:

-[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io#https://github.com/4GeeksAcademy/css-tutorial-exercises-course.git) + ## Manual installation @@ -56,7 +56,7 @@ $ learnpack start ```

- +

## How are the exercises organized? From dd753894448ead1ffeb9f5148cd079c3f7041d68 Mon Sep 17 00:00:00 2001 From: Elvira Quiroz Date: Sat, 26 Mar 2022 21:17:05 +0000 Subject: [PATCH 067/491] https://github.com/learnpack/learnpack/issues/811 --- .gitignore | 1 + README.es.md | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 13 ++++++-- 3 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 README.es.md diff --git a/.gitignore b/.gitignore index 8f255a69..d9d6ec86 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ !bc.json !learn.json !README.md +!README.es.md !/exercises !/exercises/* diff --git a/README.es.md b/README.es.md new file mode 100644 index 00000000..b5f569d1 --- /dev/null +++ b/README.es.md @@ -0,0 +1,84 @@ + + + + + +
+

Tutorial de EJercicios de CSS de 4Geeks Academy

+ + + follow on Twitter + +
+ +¡Hola! Soy [Alejandro Sanchez @alesanchezr](https://github.com/alesanchezr), ¡muy emocionado de tenerte aquí! 🎉 😂 Aprender a programar es difícil, ¡necesitas entrenamiento! [Envíame un DM en Twitter] (https://twitter.com/alesanchezr) si tienes alguna pregunta. + +## En este tutorial aprenderás los siguientes conceptos: + +1. Usar cómo aplicar CSS a su sitio web de 3 maneras diferentes: en línea, agrupándolos dentro de una etiqueta ``; let cssArray=document.styleSheets[0].cssRules; - let orangeHoverSelector=""; for (let i=0; i li") { + if (cssArray[i].selectorText==="ul li" || cssArray[i].selectorText==="ul > li") { orangeHoverSelector=cssArray[i].style.color; - } expect(orangeHoverSelector).toBe("red"); } - - }); it("The ul second element background should be green", function () { document.querySelector( @@ -44,7 +37,7 @@ describe("All the styles should be applied", function () { let orangeHoverSelector=""; for (let i=0; i li:nth-child(2)" ) { + if (cssArray[i].selectorText==="ol li:nth-child(2)" || cssArray[i].selectorText==="ol > li:nth-child(2)" ) { orangeHoverSelector=cssArray[i].style['background-color']; } @@ -90,9 +83,4 @@ describe("All the styles should be applied", function () { let title = head.querySelector('title') expect(title).not.toBe(null) }) - - - - - }); \ No newline at end of file diff --git a/learn.json b/learn.json index e11a82b6..6574dcef 100644 --- a/learn.json +++ b/learn.json @@ -11,10 +11,8 @@ "difficulty": "easy", "video-solutions": true, "graded": true, - - "disableGrading": false, - "editor": { - "version": "1.0.73" - } - + "disableGrading": false, + "editor": { + "version": "1.0.73" + } } From aa84d1182fcebac776106e3789b45084478338f6 Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez Date: Thu, 9 Jun 2022 21:26:05 +0000 Subject: [PATCH 091/491] disableGrading set to true --- learn.json | 1 + 1 file changed, 1 insertion(+) diff --git a/learn.json b/learn.json index 6574dcef..3c17442e 100644 --- a/learn.json +++ b/learn.json @@ -11,6 +11,7 @@ "difficulty": "easy", "video-solutions": true, "graded": true, + "disabledActions": ["test"], "disableGrading": false, "editor": { "version": "1.0.73" From 0811f988c1e96f60c271644bf9e536d19e5d411a Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez <56565994+tommygonzaleza@users.noreply.github.com> Date: Tue, 14 Jun 2022 17:29:53 -0400 Subject: [PATCH 092/491] Update learn.json --- learn.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/learn.json b/learn.json index 3c17442e..709ede73 100644 --- a/learn.json +++ b/learn.json @@ -12,7 +12,7 @@ "video-solutions": true, "graded": true, "disabledActions": ["test"], - "disableGrading": false, + "disableGrading": true, "editor": { "version": "1.0.73" } From ce353cfa37b6431829591db9312f53b671f2d502 Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez Date: Wed, 15 Jun 2022 18:17:53 +0000 Subject: [PATCH 093/491] fontawesome link updated --- exercises/11-Font-Awesome-Icons/index.html | 4 ++-- exercises/11-Font-Awesome-Icons/solution.hide.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/exercises/11-Font-Awesome-Icons/index.html b/exercises/11-Font-Awesome-Icons/index.html index b3533f72..1401d5da 100644 --- a/exercises/11-Font-Awesome-Icons/index.html +++ b/exercises/11-Font-Awesome-Icons/index.html @@ -4,12 +4,12 @@ - + 11 Font Awesome
    -
  • Hello
  • +
  • Hello
diff --git a/exercises/11-Font-Awesome-Icons/solution.hide.html b/exercises/11-Font-Awesome-Icons/solution.hide.html index 84c2eb9e..bd68c2a7 100644 --- a/exercises/11-Font-Awesome-Icons/solution.hide.html +++ b/exercises/11-Font-Awesome-Icons/solution.hide.html @@ -4,7 +4,7 @@ - + 11 Font Awesome @@ -14,4 +14,4 @@
  • Heart
  • - \ No newline at end of file + From d67022ace3cc04e14ec4859fa6e02bfca7f107db Mon Sep 17 00:00:00 2001 From: dsilva06 Date: Thu, 16 Jun 2022 15:18:18 +0000 Subject: [PATCH 094/491] changed #myTitle to .myTitle --- exercises/10-Your-Own-Font/README.es.md | 2 +- exercises/10-Your-Own-Font/README.md | 2 +- exercises/10-Your-Own-Font/tests.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/exercises/10-Your-Own-Font/README.es.md b/exercises/10-Your-Own-Font/README.es.md index eab36187..16e4ab9a 100644 --- a/exercises/10-Your-Own-Font/README.es.md +++ b/exercises/10-Your-Own-Font/README.es.md @@ -14,5 +14,5 @@ Después de vincular tu fuente, debes asignar la regla CSS `font-family` a lo qu 1. Enlaza cualquier fuente de google que desee en el sitio web. -2. Aplica esa `font-family` (familia de fuentes) específica a `#myTitle`. +2. Aplica esa `font-family` (familia de fuentes) específica a `.myTitle`. diff --git a/exercises/10-Your-Own-Font/README.md b/exercises/10-Your-Own-Font/README.md index 8c1dfa92..63c24dc3 100644 --- a/exercises/10-Your-Own-Font/README.md +++ b/exercises/10-Your-Own-Font/README.md @@ -14,5 +14,5 @@ After your font is linked you need to assign the `font-family` CSS rule to whate 1. Link any google-font that you like into the website. -2. Apply that specific `font-family` to `#myTitle`. +2. Apply that specific `font-family` to `.myTitle`. diff --git a/exercises/10-Your-Own-Font/tests.js b/exercises/10-Your-Own-Font/tests.js index 6109a451..dd13147d 100644 --- a/exercises/10-Your-Own-Font/tests.js +++ b/exercises/10-Your-Own-Font/tests.js @@ -19,7 +19,7 @@ describe("All the styles should be applied", function () { jest.resetModules(); }); - it("the font-family in the #myTitle should exists", function () { + it("the font-family in the .myTitle should exists", function () { // get computed styles of any element you like let cssArray=document.styleSheets[0].cssRules; // console.log("%%% ", cssArray) From b2e1cfe62f0be2ba030acc57a1903d1275cc50ce Mon Sep 17 00:00:00 2001 From: Rodrigo Cabrera <107075433+Hayder10@users.noreply.github.com> Date: Thu, 16 Jun 2022 21:47:22 -0400 Subject: [PATCH 095/491] Spelling error corrected --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b127fe6b..cd220aea 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Hi! I'm [Alejandro Sanchez @alesanchezr](https://github.com/alesanchezr), really ## You'll be learning the following concepts: -1. Using how to apply CSS to your website in 3 different ways: Inline, by grouping them together inside a ` diff --git a/exercises/01-Hello-World/README.md b/exercises/01-Hello-World/README.md index 9510cd81..35efc390 100644 --- a/exercises/01-Hello-World/README.md +++ b/exercises/01-Hello-World/README.md @@ -18,7 +18,6 @@ Look at this example: ```HTML From 94723357baa5c2e634f78a2991e0af729d600915 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 02:22:23 +0000 Subject: [PATCH 106/491] added solution file --- exercises/01-Hello-World/solution.hide.html | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 exercises/01-Hello-World/solution.hide.html diff --git a/exercises/01-Hello-World/solution.hide.html b/exercises/01-Hello-World/solution.hide.html new file mode 100644 index 00000000..ce422661 --- /dev/null +++ b/exercises/01-Hello-World/solution.hide.html @@ -0,0 +1,7 @@ + + +Click me to open google.com \ No newline at end of file From fbc9af20a17b4911bde9348ef04a147446ae9208 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 02:23:37 +0000 Subject: [PATCH 107/491] added solution file --- exercises/01.1-The-Style-Tag/solution.hide.html | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 exercises/01.1-The-Style-Tag/solution.hide.html diff --git a/exercises/01.1-The-Style-Tag/solution.hide.html b/exercises/01.1-The-Style-Tag/solution.hide.html new file mode 100644 index 00000000..659b76b3 --- /dev/null +++ b/exercises/01.1-The-Style-Tag/solution.hide.html @@ -0,0 +1,12 @@ + + +

    + Coding is a basic literacy in the digital age, and it is important for kids to understand and be able to work with and understand the technology + around them. Having children learn coding at a young age prepares them for the future. Coding helps children with communication, creativity, + math,writing, and confidence. +

    \ No newline at end of file From 52891964f87a80c4beb51eb461a759a5035c33ff Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 02:24:28 +0000 Subject: [PATCH 108/491] added solution file --- exercises/01.2-Your-First-Style/solution.hide.html | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 exercises/01.2-Your-First-Style/solution.hide.html diff --git a/exercises/01.2-Your-First-Style/solution.hide.html b/exercises/01.2-Your-First-Style/solution.hide.html new file mode 100644 index 00000000..3907bb3c --- /dev/null +++ b/exercises/01.2-Your-First-Style/solution.hide.html @@ -0,0 +1,14 @@ + + + + + + + Hello! I am an anchor in red, change my color to yellow + + From 2576920fba4fc84caa335091106c9d3a98a74041 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 02:26:00 +0000 Subject: [PATCH 109/491] added solution file --- .../01.3-Your-Second-Style/solution.hide.html | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 exercises/01.3-Your-Second-Style/solution.hide.html diff --git a/exercises/01.3-Your-Second-Style/solution.hide.html b/exercises/01.3-Your-Second-Style/solution.hide.html new file mode 100644 index 00000000..9b239409 --- /dev/null +++ b/exercises/01.3-Your-Second-Style/solution.hide.html @@ -0,0 +1,14 @@ + + + + + + + Hello! My background should be blue! + + From b6f1b26813408d04a1806748a78cedb404e95f98 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 02:55:01 +0000 Subject: [PATCH 110/491] added solution file --- exercises/02-Separate-Stylesheet/solution.hide.css | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 exercises/02-Separate-Stylesheet/solution.hide.css diff --git a/exercises/02-Separate-Stylesheet/solution.hide.css b/exercises/02-Separate-Stylesheet/solution.hide.css new file mode 100644 index 00000000..779c2c33 --- /dev/null +++ b/exercises/02-Separate-Stylesheet/solution.hide.css @@ -0,0 +1,9 @@ +/* your styles here: + 1. Select the body tag. + 2. Add the background rule equal to blue. + */ + body { + background: blue; + background-size: contain; + background-repeat: inherit; +} \ No newline at end of file From 12c623fc13a695900f690c8a38e071a83d77c7c0 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 02:56:03 +0000 Subject: [PATCH 111/491] improved tests and cghecks for background color blue --- exercises/02-Separate-Stylesheet/tests.js | 59 ++++++----------------- 1 file changed, 14 insertions(+), 45 deletions(-) diff --git a/exercises/02-Separate-Stylesheet/tests.js b/exercises/02-Separate-Stylesheet/tests.js index a583e81e..d07034b6 100644 --- a/exercises/02-Separate-Stylesheet/tests.js +++ b/exercises/02-Separate-Stylesheet/tests.js @@ -1,64 +1,33 @@ const fs=require("fs"); const path=require("path"); -const html=fs.readFileSync(path.resolve(__dirname, "./index.html"), "utf8"); +const html = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf8'); const css=fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +document.documentElement.innerHTML = html.toString(); jest.dontMock("fs"); -describe("All the styles should be applied", function () { - beforeEach(() => { - //here I import the HTML into the document - document.documentElement.innerHTML=html.toString(); - - //apply the styles from the stylesheet if needed - - - - }); - afterEach(() => { - jest.resetModules(); - }); - it("The body tag should not contains any inline style", function () { +describe("All the styles should be applied", ()=>{ + const link = document.querySelector("link"); + const body = document.querySelector("body") + test("The body tag should not contains any inline style", ()=>{ document.querySelector( "head" ).innerHTML=``; - let bodyInlineStyle=document.getElementsByTagName("body"); let emptyBodyInlineStyle={}; - expect(bodyInlineStyle[0].style._values).toEqual(emptyBodyInlineStyle); - // expect(bodyInlineStyle[0].style._values.background - repeat).toBe( - // undefined - // ); - - console.log(bodyInlineStyle[0].style._values); + expect(body.style._values).toEqual(emptyBodyInlineStyle) }); - - it("the background-size should be 'contain' without quotes", function () { - document.querySelector( - "head" - ).innerHTML=``; - // get computed styles of any element you like - const body=document.querySelector("body"); - let styles=window.getComputedStyle(body); - expect(styles["background-size"]).toBe("contain"); - }); - - it("the background-repeat should be 'inherit' without quotes", function () { - document.querySelector( - "head" - ).innerHTML=``; - - const body=document.querySelector("body"); - let styles=window.getComputedStyle(body); - expect(styles["background-repeat"]).toBe("inherit"); - }); - it("You should not change the existing head tag elements", function () { + test("You should not change the existing head tag elements", ()=>{ let head = document.querySelector('head') expect(head).toBeTruthy() let meta = head.querySelector("meta") expect(meta).toBe(null) - const pathname = new URL(document.querySelector('link').href).pathname - expect(pathname).toBe('/styles.css') + let href = link.getAttribute("href") + expect(href).toEqual('./styles.css') + }); + test("Your body tag background color should be blue", ()=>{ + let styles = window.getComputedStyle(body) + expect(styles["background-color"]).toBe("blue") }) }); From 9710f495b9e79966184e840776098520f5af75ac Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 03:08:20 +0000 Subject: [PATCH 112/491] added solution file --- exercises/02.1-Background/solution.hide.css | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 exercises/02.1-Background/solution.hide.css diff --git a/exercises/02.1-Background/solution.hide.css b/exercises/02.1-Background/solution.hide.css new file mode 100644 index 00000000..8c72a684 --- /dev/null +++ b/exercises/02.1-Background/solution.hide.css @@ -0,0 +1,5 @@ +body { + background-image: url(https://4geeksacademy.github.io/exercise-assets/img/bg/small-mosaic.jpg); + background-size: contain; + background-repeat: inherit; +} \ No newline at end of file From 708ce0dd5633e6880e3f08c2a0ec84b62e393788 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 03:09:19 +0000 Subject: [PATCH 113/491] Upgraded test to modern stanndards and made it less repetitive --- exercises/02.1-Background/tests.js | 69 ++++++++++++------------------ 1 file changed, 27 insertions(+), 42 deletions(-) diff --git a/exercises/02.1-Background/tests.js b/exercises/02.1-Background/tests.js index cfde6b1f..375aa45c 100644 --- a/exercises/02.1-Background/tests.js +++ b/exercises/02.1-Background/tests.js @@ -1,67 +1,52 @@ -const fs=require("fs"); -const path=require("path"); -const html=fs.readFileSync(path.resolve(__dirname, "./index.html"), "utf8"); -const css=fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +const fs = require("fs"); +const path = require("path"); +const html = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf8'); +const css = fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +document.documentElement.innerHTML = html.toString(); jest.dontMock("fs"); -describe("All the styles should be applied", function () { - beforeEach(() => { - //here I import the HTML into the document - document.documentElement.innerHTML=html.toString(); - - //apply the styles from the stylesheet if needed - - - - }); - afterEach(() => { - jest.resetModules(); - }); - it("The body tag should not contains any inline style", function () { +describe("All the styles should be applied", ()=>{ + const body = document.querySelector("body"); + const link = document.querySelector("link"); + const title = document.querySelector('title'); + + test("The body tag should not contains any inline style", ()=>{ document.querySelector( "head" - ).innerHTML=``; - let bodyInlineStyle=document.getElementsByTagName("body"); - let emptyBodyInlineStyle={}; - expect(bodyInlineStyle[0].style._values).toEqual(emptyBodyInlineStyle); - // expect(bodyInlineStyle[0].style._values.background - repeat).toBe( - // undefined - // ); - - console.log(bodyInlineStyle[0].style._values); + ).innerHTML = ``; + let emptyBodyInlineStyle = {}; + expect(body.style._values).toEqual(emptyBodyInlineStyle); }); - it("the background-size should be 'contain' without quotes", function () { + test("the background-size should be 'contain' without quotes", ()=>{ document.querySelector( "head" - ).innerHTML=``; + ).innerHTML = ``; // get computed styles of any element you like - const body=document.querySelector("body"); - let styles=window.getComputedStyle(body); + let styles = window.getComputedStyle(body); expect(styles["background-size"]).toBe("contain"); }); - it("the background-repeat should be 'inherit' without quotes", function () { + test("the background-repeat should be 'inherit' without quotes", ()=>{ document.querySelector( "head" - ).innerHTML=``; + ).innerHTML = ``; - const body=document.querySelector("body"); - let styles=window.getComputedStyle(body); + let styles = window.getComputedStyle(body); expect(styles["background-repeat"]).toBe("inherit"); }); - it("You should not change the existing head tag elements", function () { + test("You should not change the existing head tag elements", ()=>{ let head = document.querySelector('head') expect(head).toBeTruthy() - + let meta = head.querySelector("meta") expect(meta).toBe(null) - - const pathname = new URL(document.querySelector('link').href).pathname - expect(pathname).toBe('/styles.css') - let title = head.querySelector('title').innerHTML - expect(title).toBe('02 Background') + const href = link.getAttribute("href") + expect(href).toBe('./styles.css') + + let titleInner = title.innerHTML + expect(titleInner).toBe('02 Background') }) }); From f6cd29ab05b8114d7c795561d4c2b1e5096ab887 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 03:17:38 +0000 Subject: [PATCH 114/491] added solution file --- exercises/03-Inline-Styles/solution.hide.html | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 exercises/03-Inline-Styles/solution.hide.html diff --git a/exercises/03-Inline-Styles/solution.hide.html b/exercises/03-Inline-Styles/solution.hide.html new file mode 100644 index 00000000..1c3a3828 --- /dev/null +++ b/exercises/03-Inline-Styles/solution.hide.html @@ -0,0 +1,17 @@ + + + + 03 Inline Styles + + + + + + + + + + +
    Hello
    My brother
    + + \ No newline at end of file From c6107db9f77cd6e34d78ba5e82072e7b2f07760a Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 03:18:05 +0000 Subject: [PATCH 115/491] upgraded tests to mre modern standard --- exercises/03-Inline-Styles/tests.js | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/exercises/03-Inline-Styles/tests.js b/exercises/03-Inline-Styles/tests.js index 3de572dd..04593d63 100644 --- a/exercises/03-Inline-Styles/tests.js +++ b/exercises/03-Inline-Styles/tests.js @@ -1,24 +1,16 @@ - const fs = require("fs"); const path = require("path"); -const html = fs.readFileSync(path.resolve(__dirname, "./index.html"), "utf8"); - +const html = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf8'); +document.documentElement.innerHTML = html.toString(); jest.dontMock("fs"); -describe("The Table tag should contain inline style background: green", function() { - beforeEach(() => { - //here I import the HTML into the document - document.documentElement.innerHTML = html.toString(); - }); - afterEach(() => { - jest.resetModules(); - }); +describe("The Table tag should contain inline style background: green", ()=>{ - it("You should not change the existing head tag elements", function () { + test("You should not change the existing head tag elements", ()=>{ let head = document.querySelector('head') expect(head).toBeTruthy() - + let meta = head.querySelector("meta") expect(meta).toBe(null) @@ -26,7 +18,7 @@ describe("The Table tag should contain inline style background: green", function expect(title).toBe('03 Inline Styles') }) - it("The background should be green", function() { + test("The background should be green", ()=>{ const table = document.querySelector("table"); // expect(table.style.background === "green").toBeTruthy(); var styles = window.getComputedStyle(table); From 2c3450b2a0ec52a842b06cba491aae4ce18bfdb5 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 03:36:53 +0000 Subject: [PATCH 116/491] exchanged var for let --- exercises/03-Inline-Styles/tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/03-Inline-Styles/tests.js b/exercises/03-Inline-Styles/tests.js index 04593d63..b0b7b629 100644 --- a/exercises/03-Inline-Styles/tests.js +++ b/exercises/03-Inline-Styles/tests.js @@ -21,7 +21,7 @@ describe("The Table tag should contain inline style background: green", ()=>{ test("The background should be green", ()=>{ const table = document.querySelector("table"); // expect(table.style.background === "green").toBeTruthy(); - var styles = window.getComputedStyle(table); + let styles = window.getComputedStyle(table); expect(styles["background"]).toBe("green"); }); }); From a6039f493660a39d9f68dff5950d6971b04d2cc5 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 03:37:28 +0000 Subject: [PATCH 117/491] Added test --- exercises/04-Class-Selector/test.js | 40 +++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 exercises/04-Class-Selector/test.js diff --git a/exercises/04-Class-Selector/test.js b/exercises/04-Class-Selector/test.js new file mode 100644 index 00000000..58c20d17 --- /dev/null +++ b/exercises/04-Class-Selector/test.js @@ -0,0 +1,40 @@ +const fs = require("fs"); +const path = require("path"); +const html = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf8'); +const css = fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +document.documentElement.innerHTML = html.toString(); + +jest.dontMock("fs"); + +describe("Both p tags should have a blue background", () => { + const body = document.querySelector("body") + const p = document.querySelectorAll("p"); + test("You should not change the existing head tag elements", () => { + let head = document.querySelector('head') + expect(head).toBeTruthy() + + let meta = head.querySelector("meta") + expect(meta).toBe(null) + + let title = head.querySelector('title').innerHTML + expect(title).toBe('04 Class selector') + }); + + test("The body tag should not contains any inline style", () => { + document.querySelector( + "head" + ).innerHTML = ``; + let emptyBodyInlineStyle = {}; + expect(body.style._values).toEqual(emptyBodyInlineStyle) + }); + + test("There should be two p tags", () => { + expect(p.length).toBe(2) + }); + test("Both p tags should have a class name 'b-blue' without the quotation marks", () => { + p.forEach(e=>{ + let eClass = e.getAttribute("class"); + expect(eClass).toBe("b-blue") + }) + }); +}); From bd04bceac091b354fa7740258a1ff22b93580ca9 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 03:42:15 +0000 Subject: [PATCH 118/491] added solution file --- exercises/04-Class-Selector/index.html | 4 +--- exercises/04-Class-Selector/solution.hide.html | 12 ++++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 exercises/04-Class-Selector/solution.hide.html diff --git a/exercises/04-Class-Selector/index.html b/exercises/04-Class-Selector/index.html index e3abd1bd..45709afb 100644 --- a/exercises/04-Class-Selector/index.html +++ b/exercises/04-Class-Selector/index.html @@ -2,9 +2,7 @@ - - 04 Class selector - + 04 Class selector diff --git a/exercises/04-Class-Selector/solution.hide.html b/exercises/04-Class-Selector/solution.hide.html new file mode 100644 index 00000000..60e1d67f --- /dev/null +++ b/exercises/04-Class-Selector/solution.hide.html @@ -0,0 +1,12 @@ + + + + + 04 Class selector + + + +

    Hello!

    +

    World!

    + + From a55c1f87deb4fa31967428e93e3586125da8670c Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 03:52:54 +0000 Subject: [PATCH 119/491] added solution file --- exercises/04.1-Combined-Rules/solution.hide.css | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 exercises/04.1-Combined-Rules/solution.hide.css diff --git a/exercises/04.1-Combined-Rules/solution.hide.css b/exercises/04.1-Combined-Rules/solution.hide.css new file mode 100644 index 00000000..e9d46fd5 --- /dev/null +++ b/exercises/04.1-Combined-Rules/solution.hide.css @@ -0,0 +1,8 @@ +.myBox { + width: 50px; + height: 50px; + padding: 10px 190px 50px 30px; + + background: rgb(189, 189, 189) url(https://github.com/4GeeksAcademy/css-tutorial-exercises-course/blob/3a2d1dd03f58167a5a4894155af2d3aa4d41d647/.learn/assets/baby.jpg?raw=true) no-repeat 100px; + background-size: contain; +} \ No newline at end of file From dcbb8369f218d6436c9147abab85f9d0c3027902 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 03:53:26 +0000 Subject: [PATCH 120/491] improved format and minar issue with header --- exercises/04.1-Combined-Rules/tests.js | 170 ++++++++++--------------- 1 file changed, 67 insertions(+), 103 deletions(-) diff --git a/exercises/04.1-Combined-Rules/tests.js b/exercises/04.1-Combined-Rules/tests.js index 16c3296a..d3540732 100644 --- a/exercises/04.1-Combined-Rules/tests.js +++ b/exercises/04.1-Combined-Rules/tests.js @@ -1,126 +1,91 @@ -const fs=require("fs"); -const path=require("path"); -const html=fs.readFileSync(path.resolve(__dirname, "./index.html"), "utf8"); -const css=fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +const fs = require("fs"); +const path = require("path"); +const html = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf8'); +const css = fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +document.documentElement.innerHTML = html.toString(); jest.dontMock("fs"); -describe("All the styles should be applied", function () { - beforeEach(() => { - //here I import the HTML into the document - document.documentElement.innerHTML=html.toString(); - - //apply the styles from the stylesheet if needed - // document.querySelector( - // "head" - // ).innerHTML = ``; - }); - afterEach(() => { - jest.resetModules(); - }); - - // it("The styles.css file should be empty", function () { - // console.log(css); - // expect(css.toString()==="").toBeTruthy(); - // }); - // it("The Head tag should includes a Style tag", function () { - // expect(html.toString().indexOf(`-1).toBeTruthy(); - // }); - it("The body tag should not contains any inline style", function () { +describe("All the styles should be applied", ()=> { + const body = document.querySelector("body"); + const link = document.querySelector("link"); + const title = document.querySelector('title') + test("The body tag should not contains any inline style", ()=> { document.querySelector( "head" - ).innerHTML=``; - let bodyInlineStyle=document.getElementsByTagName("style"); - let emptyBodyInlineStyle={}; - expect(bodyInlineStyle[0].style._values).toEqual(emptyBodyInlineStyle); - console.log("sty: ", bodyInlineStyle[0]); + ).innerHTML = ``; + let emptyBodyInlineStyle = {}; + expect(body.style._values).toEqual(emptyBodyInlineStyle); }); - it("the width should be '50px'", function () { + test("the width should be '50px'", ()=> { // get computed styles of any element you like document.querySelector( "head" - ).innerHTML=``; + ).innerHTML = ``; - let cssArray=document.styleSheets[0].cssRules; + let cssArray = document.styleSheets[0].cssRules; // console.log("$$$:", cssArray) - let orangeHoverSelector=""; - for (let i=0; i< cssArray.length; i++) { + if (cssArray[i].selectorText === ".myBox") { + orangeHoverSelector = cssArray[i].style.width; } } expect(orangeHoverSelector).toBe('50px'); }); - it("the height should be '50px'", function () { + test("the height should be '50px'", ()=> { // get computed styles of any element you like document.querySelector( "head" - ).innerHTML=``; + ).innerHTML = ``; - let cssArray=document.styleSheets[0].cssRules; + let cssArray = document.styleSheets[0].cssRules; // console.log("$$$:", cssArray) - let orangeHoverSelector=""; - for (let i=0; i< cssArray.length; i++) { + if (cssArray[i].selectorText === ".myBox") { + orangeHoverSelector = cssArray[i].style.height; } } expect(orangeHoverSelector).toBe('50px'); }); - // it("the background should be in rgb code rgb(189, 189, 189)", function() { - // // get computed styles of any element you like - // const body = document.querySelector(".myBox"); - // var styles = window.getComputedStyle(body); - // expect(styles["background"]).toBe("rgb(189, 189, 189)"); - // }); - - // it("the padding-top should be deleted", function () { - // // get computed styles of any element you like - // const body=document.querySelector(".myBox"); - // var styles=window.getComputedStyle(body); - // expect(styles["padding-top"]).toBeFalsy(); - // expect(styles["padding-bottom"]).toBeFalsy(); - // expect(styles["padding-right"]).toBeFalsy(); - // expect(styles["padding-left"]).toBeFalsy(); - // }); - - it("the background-size should be contain", function () { + test("the background-size should be contain", ()=> { document.querySelector( "head" - ).innerHTML=``; + ).innerHTML = ``; - let cssArray=document.styleSheets[0].cssRules; + let cssArray = document.styleSheets[0].cssRules; // console.log("$$$:", cssArray) - let orangeHoverSelector=""; - for (let i=0; i< cssArray.length; i++) { + if (cssArray[i].selectorText === ".myBox") { + orangeHoverSelector = cssArray[i].style['background-size']; } } expect(orangeHoverSelector).toBe('contain'); }); - it("the background should include the shorthand property", function () { + test("the background should include the shorthand property", ()=> { document.querySelector( "head" - ).innerHTML=``; + ).innerHTML = ``; - let cssArray=document.styleSheets[0].cssRules; + let cssArray = document.styleSheets[0].cssRules; console.log("$$$:", cssArray) - let orangeHoverSelector=""; + let orangeHoverSelector = ""; let backImg = ""; let backColor = ""; let backPos = ""; let backRepeat = ""; - for (let i=0; i< cssArray.length; i++) { + if (cssArray[i].selectorText === ".myBox") { + orangeHoverSelector = cssArray[i].style.background; + backImg = cssArray[i].style['background-image']; + backColor = cssArray[i].style['background-color']; + backPos = cssArray[i].style['background-position-x']; + backRepeat = cssArray[i].style['background-repeat']; } } expect(backColor).toBeFalsy(); @@ -133,25 +98,25 @@ describe("All the styles should be applied", function () { expect(orangeHoverSelector).toContain('url(https://github.com/4GeeksAcademy/css-tutorial-exercises-course/blob/3a2d1dd03f58167a5a4894155af2d3aa4d41d647/.learn/assets/baby.jpg?raw=true)'); }); - it("the padding should include the shorthand property in the right order (top, right, bottom, left)", function () { + test("the padding should include the shorthand property in the right order (top, right, bottom, left)", ()=> { document.querySelector( "head" - ).innerHTML=``; + ).innerHTML = ``; - let cssArray=document.styleSheets[0].cssRules; + let cssArray = document.styleSheets[0].cssRules; // console.log("$$$:", cssArray) - let orangeHoverSelector=""; - let padTop= ""; - let padRight= ""; - let padBottom= ""; - let padLeft= ""; - for (let i=0; i< cssArray.length; i++) { + if (cssArray[i].selectorText === ".myBox") { + orangeHoverSelector = cssArray[i].style.padding; + padTop = cssArray[i].style['padding-top'] + padRight = cssArray[i].style['padding-right'] + padBottom = cssArray[i].style['padding-bottom'] + padLeft = cssArray[i].style['padding-left'] } } expect(orangeHoverSelector).toBe('10px 190px 50px 30px'); @@ -160,17 +125,16 @@ describe("All the styles should be applied", function () { expect(padBottom).toBeFalsy(); expect(padLeft).toBeFalsy(); }); - it("You should not change the existing head tag elements", function () { + test("You should not change the existing head tag elements", ()=> { let head = document.querySelector('head') expect(head).toBeTruthy() - + let meta = head.querySelector("meta") expect(meta).toBe(null) - - const pathname = new URL(document.querySelector('link').href).pathname - expect(pathname).toBe('/styles.css') - - let title = head.querySelector('title') - expect(title).not.toBe(null) + + const href = link.getAttribute("href") + expect(href).toBe('./styles.css') + + expect(title).toBeTruthy() }) }); From ada8f1038cd20d2e8a697855e8672c48214c3e19 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 04:05:42 +0000 Subject: [PATCH 121/491] fixed titles --- exercises/04.1-Combined-Rules/index.html | 4 +--- exercises/04.2-Apply-several-classes/index.html | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/exercises/04.1-Combined-Rules/index.html b/exercises/04.1-Combined-Rules/index.html index 2af5a24c..1525b6cf 100644 --- a/exercises/04.1-Combined-Rules/index.html +++ b/exercises/04.1-Combined-Rules/index.html @@ -2,9 +2,7 @@ - - 04 Combined Rules - + 04.1 Combined Rules diff --git a/exercises/04.2-Apply-several-classes/index.html b/exercises/04.2-Apply-several-classes/index.html index a64723af..3a293815 100644 --- a/exercises/04.2-Apply-several-classes/index.html +++ b/exercises/04.2-Apply-several-classes/index.html @@ -2,9 +2,7 @@ - - 04 Class selector - + 04.2 Apply several classes From e88ac6cefae7c94702a5ae240777af07fbfae8a7 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 04:06:08 +0000 Subject: [PATCH 122/491] added test to check if the div exists and if it contains the proper classes --- exercises/04.2-Apply-several-classes/test.js | 24 ++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 exercises/04.2-Apply-several-classes/test.js diff --git a/exercises/04.2-Apply-several-classes/test.js b/exercises/04.2-Apply-several-classes/test.js new file mode 100644 index 00000000..2c6ed0d1 --- /dev/null +++ b/exercises/04.2-Apply-several-classes/test.js @@ -0,0 +1,24 @@ +const fs = require("fs"); +const path = require("path"); +const html = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf8'); +document.documentElement.innerHTML = html.toString(); + +jest.dontMock("fs"); + +describe("You should change the class on the div tag", () => { + const div = document.querySelectorAll("div") + test("There should only be 1 div tag", () => { + expect(div.length).toBe(1) + }); + + test("The div class should NOT have the spades class", () => { + div.forEach(e=>{ + expect(e.classList.contains("spade")).toBe(false) + }) + }); + test("The div class should have the heart class", () => { + div.forEach(e=>{ + expect(e.classList.contains("heart")).toBe(true) + }) + }); +}); From 201f86355bbe0f46a664e1b5347d290fe83c1dbf Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 04:07:31 +0000 Subject: [PATCH 123/491] added solution file --- .../04.2-Apply-several-classes/solution.hide.html | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 exercises/04.2-Apply-several-classes/solution.hide.html diff --git a/exercises/04.2-Apply-several-classes/solution.hide.html b/exercises/04.2-Apply-several-classes/solution.hide.html new file mode 100644 index 00000000..95de441b --- /dev/null +++ b/exercises/04.2-Apply-several-classes/solution.hide.html @@ -0,0 +1,11 @@ + + + + + 04.2 Apply several classes + + + +
    9
    + + From 683104fc758e7e94aefa9091ac4593aa57e6600e Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 22:37:51 +0000 Subject: [PATCH 124/491] added missing solution and test files --- exercises/04.3-id-Selector/solution.hide.html | 0 exercises/04.3-id-Selector/test.js | 0 exercises/05-Specificity/solution.hide.css | 0 exercises/06-Practicing-Rules/solution.hide.css | 0 exercises/07-Very-Specific-Rules/solution.hide.css | 0 exercises/08-Rounded-Image/solution.hide.css | 0 exercises/09-Anchor-Styles/solution.hide.css | 0 exercises/10-Your-Own-Font/solution.hide.css | 0 exercises/12-Relative-Length-EM-REM/solution.hide.css | 0 exercises/13-Anchor-Like-Button/solution.hide.css | 0 10 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 exercises/04.3-id-Selector/solution.hide.html create mode 100644 exercises/04.3-id-Selector/test.js create mode 100644 exercises/05-Specificity/solution.hide.css create mode 100644 exercises/06-Practicing-Rules/solution.hide.css create mode 100644 exercises/07-Very-Specific-Rules/solution.hide.css create mode 100644 exercises/08-Rounded-Image/solution.hide.css create mode 100644 exercises/09-Anchor-Styles/solution.hide.css create mode 100644 exercises/10-Your-Own-Font/solution.hide.css create mode 100644 exercises/12-Relative-Length-EM-REM/solution.hide.css create mode 100644 exercises/13-Anchor-Like-Button/solution.hide.css diff --git a/exercises/04.3-id-Selector/solution.hide.html b/exercises/04.3-id-Selector/solution.hide.html new file mode 100644 index 00000000..e69de29b diff --git a/exercises/04.3-id-Selector/test.js b/exercises/04.3-id-Selector/test.js new file mode 100644 index 00000000..e69de29b diff --git a/exercises/05-Specificity/solution.hide.css b/exercises/05-Specificity/solution.hide.css new file mode 100644 index 00000000..e69de29b diff --git a/exercises/06-Practicing-Rules/solution.hide.css b/exercises/06-Practicing-Rules/solution.hide.css new file mode 100644 index 00000000..e69de29b diff --git a/exercises/07-Very-Specific-Rules/solution.hide.css b/exercises/07-Very-Specific-Rules/solution.hide.css new file mode 100644 index 00000000..e69de29b diff --git a/exercises/08-Rounded-Image/solution.hide.css b/exercises/08-Rounded-Image/solution.hide.css new file mode 100644 index 00000000..e69de29b diff --git a/exercises/09-Anchor-Styles/solution.hide.css b/exercises/09-Anchor-Styles/solution.hide.css new file mode 100644 index 00000000..e69de29b diff --git a/exercises/10-Your-Own-Font/solution.hide.css b/exercises/10-Your-Own-Font/solution.hide.css new file mode 100644 index 00000000..e69de29b diff --git a/exercises/12-Relative-Length-EM-REM/solution.hide.css b/exercises/12-Relative-Length-EM-REM/solution.hide.css new file mode 100644 index 00000000..e69de29b diff --git a/exercises/13-Anchor-Like-Button/solution.hide.css b/exercises/13-Anchor-Like-Button/solution.hide.css new file mode 100644 index 00000000..e69de29b From dbbb23158c97950124093004a6a4596978f476cc Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 22:53:08 +0000 Subject: [PATCH 125/491] added solution to file --- exercises/04.3-id-Selector/solution.hide.html | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/exercises/04.3-id-Selector/solution.hide.html b/exercises/04.3-id-Selector/solution.hide.html index e69de29b..a7964559 100644 --- a/exercises/04.3-id-Selector/solution.hide.html +++ b/exercises/04.3-id-Selector/solution.hide.html @@ -0,0 +1,13 @@ + + + + + + 04.3 ID selector + + + + + I should look like a button + + From e2ab5947dda428539cbae8a6d33f7ff7544c54d7 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 22:53:39 +0000 Subject: [PATCH 126/491] added tests to file to check for id name and if span exists --- exercises/04.3-id-Selector/test.js | 32 ++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/exercises/04.3-id-Selector/test.js b/exercises/04.3-id-Selector/test.js index e69de29b..9277e129 100644 --- a/exercises/04.3-id-Selector/test.js +++ b/exercises/04.3-id-Selector/test.js @@ -0,0 +1,32 @@ +const fs = require('fs'); +const path = require('path'); +const html = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf8'); +document.documentElement.innerHTML = html.toString(); + +jest.dontMock('fs'); + +const span = document.querySelector("span"); +const link = document.querySelector("link"); + +test("There should be a span tag", ()=>{ + expect(span).toBeTruthy() +}) +test("The span tag should have id 'button1'", ()=>{ + let id = span.id + expect(id).toBe('button1') +}); +test("The span tag should not contain any inline style", ()=>{ + let emptyBodyInlineStyle = {}; + expect(span.style._values).toEqual(emptyBodyInlineStyle); +}); + +test("You should not change the existing head tag elements", ()=>{ + let head = document.querySelector('head') + expect(head).toBeTruthy() + + let meta = head.querySelector("meta") + expect(meta).toBe(null) + + const href = link.getAttribute("href") + expect(href).toBe('./styles.css') + }); \ No newline at end of file From 76db85ea49b2baa961ae1665be4a0f5aaff4e7d6 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 23:48:34 +0000 Subject: [PATCH 127/491] added solution file --- exercises/05-Specificity/solution.hide.css | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/exercises/05-Specificity/solution.hide.css b/exercises/05-Specificity/solution.hide.css index e69de29b..13374f70 100644 --- a/exercises/05-Specificity/solution.hide.css +++ b/exercises/05-Specificity/solution.hide.css @@ -0,0 +1,11 @@ +ul li { + background: blue; +} + +#thirditem { + background: yellow; +} +/****** DON NOT EDIT ANYTHING ABOVE THIS LINE ****/ +#thirditem { + background: green !important; +} From 1d99ba2853293078fc211db05c4d85aab8d3282a Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 3 Aug 2022 23:48:49 +0000 Subject: [PATCH 128/491] improved tests --- exercises/05-Specificity/tests.js | 57 +++++++++++++------------------ 1 file changed, 24 insertions(+), 33 deletions(-) diff --git a/exercises/05-Specificity/tests.js b/exercises/05-Specificity/tests.js index e58651a4..9e6d52d6 100644 --- a/exercises/05-Specificity/tests.js +++ b/exercises/05-Specificity/tests.js @@ -1,61 +1,52 @@ -const fs=require("fs"); -const path=require("path"); -const html=fs.readFileSync(path.resolve(__dirname, "./index.html"), "utf8"); -const css=fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +const fs = require('fs'); +const path = require('path'); +const html = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf8'); +const css = fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +document.documentElement.innerHTML = html.toString(); -jest.dontMock("fs"); +jest.dontMock('fs'); describe("All the styles should be applied", function () { - beforeEach(() => { - //here I import the HTML into the document - document.documentElement.innerHTML=html.toString(); - }); - afterEach(() => { - jest.resetModules(); - }); - - - it("You should not change the existing head tag elements", function () { + test("You should not change the existing head tag elements", function () { let head = document.querySelector('head') expect(head).toBeTruthy() - + let meta = head.querySelector("meta") expect(meta).not.toBe(null) - + const pathname = new URL(document.querySelector('link').href).pathname expect(pathname).toBe('/styles.css') - + let title = head.querySelector('title') expect(title).not.toBe(null) }) - it("You should not delete or edit the existing code", function () { + + test("You should not delete or edit the existing code", function () { document.querySelector( "head" - ).innerHTML=``; - let cssArray=document.styleSheets[0].cssRules[0].selectorText; - // console.log("cssArray:",cssArray) - let cssArrayBackground= document.styleSheets[0].cssRules[0].style.background - console.log("back:",cssArrayBackground) - let thirdItSelector=document.styleSheets[0].cssRules[1].selectorText; + ).innerHTML = ``; + let cssArray = document.styleSheets[0].cssRules[0].selectorText; + let cssArrayBackground = document.styleSheets[0].cssRules[0].style.background + console.log("back:", cssArrayBackground) + let thirdItSelector = document.styleSheets[0].cssRules[1].selectorText; let thirdItBackground = document.styleSheets[0].cssRules[1].style.background expect(thirdItSelector).toBe("#thirditem"); expect(thirdItBackground).toBe("yellow"); expect(cssArray).toBe("ul li"); expect(cssArrayBackground).toBe("blue"); }) - it("You should use a more specific rule using the !important annotation ", function () { + test("You should use a more specific rule using the !important annotation ", function () { document.querySelector( "head" - ).innerHTML=``; - let cssArray=document.styleSheets[0].cssRules; - // console.log("NEW", cssArray[2].style._importants) - let orangeHoverSelector=""; - for (let i=0; i${css.toString()}`; + let cssArray = document.styleSheets[0].cssRules; + let orangeHoverSelector = ""; + for (let i = 0; i < cssArray.length; i++) { + if (cssArray[i].selectorText === "#thirditem" && cssArray[i].style._importants.background === "important") { + orangeHoverSelector = cssArray[i].style.background; } } From dcfad06eb9a790990b6bdbf3af59d7280cdcdbcf Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 4 Aug 2022 00:40:23 +0000 Subject: [PATCH 129/491] added solution --- .../06-Practicing-Rules/solution.hide.css | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/exercises/06-Practicing-Rules/solution.hide.css b/exercises/06-Practicing-Rules/solution.hide.css index e69de29b..d1e24e3c 100644 --- a/exercises/06-Practicing-Rules/solution.hide.css +++ b/exercises/06-Practicing-Rules/solution.hide.css @@ -0,0 +1,26 @@ +/* add your styles here */ +body { + background: url("../../.learn/assets/background-vertical.jpg?raw=true") repeat-y; + font-family: "Times New Roman"; + padding-left: 20px; +} + +#id1 { + background: rgba(255, 255, 255, 0.2); + padding: 5px; +} + +h1 { + font-family: "Courier"; + color: red; + text-align: center; +} + +h2 { + text-decoration: underline; +} + +a:hover { + color: green; + text-decoration: none; +} From 7cc4d9fa49e24a6af25b401d09e4e77cf3478ea1 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 4 Aug 2022 00:43:00 +0000 Subject: [PATCH 130/491] improved tests and fixed minor issues --- exercises/06-Practicing-Rules/tests.js | 150 ++++++++++++------------- 1 file changed, 70 insertions(+), 80 deletions(-) diff --git a/exercises/06-Practicing-Rules/tests.js b/exercises/06-Practicing-Rules/tests.js index ae40b996..5c2e9903 100644 --- a/exercises/06-Practicing-Rules/tests.js +++ b/exercises/06-Practicing-Rules/tests.js @@ -1,148 +1,138 @@ -const fs=require("fs"); -const path=require("path"); -const html=fs.readFileSync(path.resolve(__dirname, "./index.html"), "utf8"); -const css=fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +const fs = require('fs'); +const path = require('path'); +const html = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf8'); +const css = fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +document.documentElement.innerHTML = html.toString(); -jest.dontMock("fs"); +jest.dontMock('fs'); -describe("All the styles should be applied", function () { - beforeEach(() => { - //here I import the HTML into the document - document.documentElement.innerHTML=html.toString(); +describe("All the styles should be applied", ()=> { + let meta = document.querySelector("meta") + let link = document.querySelector("link") + let title = document.querySelector('title') - // apply the styles from the stylesheet if needed - - }); - afterEach(() => { - jest.resetModules(); - }); - - - - it("the background should match", function () { + test("the background should match", ()=> { document.querySelector( "head" - ).innerHTML=``; - let body=document.querySelector("body"); - let styles=window.getComputedStyle(body); + ).innerHTML = ``; + let body = document.querySelector("body"); + let styles = window.getComputedStyle(body); expect(styles["background"]).toBe( `url(../../.learn/assets/background-vertical.jpg?raw=true) repeat-y` ); }); - it("the font-family should be 'Times New Roman'", function () { + test("the font-family should be 'Times New Roman'", ()=> { document.querySelector( "head" - ).innerHTML=``; - let body=document.querySelector("body"); - let styles=window.getComputedStyle(body); - expect(styles["font-family"]).toBe("Times New Roman"); + ).innerHTML = ``; + let body = document.querySelector("body"); + let styles = window.getComputedStyle(body); + expect(styles["font-family"]).toBe("\"Times New Roman\""); }); - it("the padding-left should be '20px'", function () { + test("the padding-left should be '20px'", ()=> { document.querySelector( "head" - ).innerHTML=``; - let body=document.querySelector("body"); - let styles=window.getComputedStyle(body); + ).innerHTML = ``; + let body = document.querySelector("body"); + let styles = window.getComputedStyle(body); expect(styles["padding-left"]).toBe("20px"); }); - it("the font-family in the H1 Tag should be 'Courier'", function () { + test("the font-family in the H1 Tag should be 'Courier'", ()=> { document.querySelector( "head" - ).innerHTML=``; - let h1Tag=document.querySelector("h1"); - let h1TagStyles=window.getComputedStyle(h1Tag); + ).innerHTML = ``; + let h1Tag = document.querySelector("h1"); + let h1TagStyles = window.getComputedStyle(h1Tag); // get computed styles of any element you like - expect(h1TagStyles["font-family"]).toBe("Courier"); + expect(h1TagStyles["font-family"]).toBe("\"Courier\""); }); - it("the color in the H1 Tag should be 'red'", function () { + test("the color in the H1 Tag should be 'red'", ()=> { document.querySelector( "head" - ).innerHTML=``; - let h1Tag=document.querySelector("h1"); - let h1TagStyles=window.getComputedStyle(h1Tag); + ).innerHTML = ``; + let h1Tag = document.querySelector("h1"); + let h1TagStyles = window.getComputedStyle(h1Tag); // get computed styles of any element you like expect(h1TagStyles["color"]).toBe("red"); }); - it("the text-align in the H1 Tag should be 'center'", function () { + test("the text-align in the H1 Tag should be 'center'", ()=> { document.querySelector( "head" - ).innerHTML=``; - let h1Tag=document.querySelector("h1"); - let h1TagStyles=window.getComputedStyle(h1Tag); + ).innerHTML = ``; + let h1Tag = document.querySelector("h1"); + let h1TagStyles = window.getComputedStyle(h1Tag); // get computed styles of any element you like expect(h1TagStyles["text-align"]).toBe("center"); }); - it("the text-decoration in the H2 Tag should be 'underline'", function () { + test("the text-decoration in the H2 Tag should be 'underline'", ()=> { document.querySelector( "head" - ).innerHTML=``; + ).innerHTML = ``; // get computed styles of any element you like - const h2Tag=document.querySelector("h2"); - let h2TagStyles=window.getComputedStyle(h2Tag); + const h2Tag = document.querySelector("h2"); + let h2TagStyles = window.getComputedStyle(h2Tag); expect(h2TagStyles["text-decoration"]).toBe("underline"); }); - it("the padding in the #id1 Tag should be '5px'", function () { + test("the padding in the #id1 Tag should be '5px'", ()=> { document.querySelector( "head" - ).innerHTML=``; + ).innerHTML = ``; // get computed styles of any element you like - const idTag=document.querySelector("#id1"); - let idTagStyles=window.getComputedStyle(idTag); + const idTag = document.querySelector("#id1"); + let idTagStyles = window.getComputedStyle(idTag); expect(idTagStyles["padding"]).toBe("5px"); }); - it("the background-color in the #id1 Tag should be 'semi transparent white'", function () { + test("the background-color in the #id1 Tag should be 'semi transparent white'", ()=> { document.querySelector( "head" - ).innerHTML=``; + ).innerHTML = ``; // get computed styles of any element you like - const idTag=document.querySelector("#id1"); - let idTagStyles=window.getComputedStyle(idTag); + const idTag = document.querySelector("#id1"); + let idTagStyles = window.getComputedStyle(idTag); console.log("$$$:", idTagStyles) expect(idTagStyles["background-color"]).toBe("rgba(255, 255, 255, 0.2)"); }); - it("The a hover underline should be removed", function () { + test("The a hover underline should be removed", ()=> { document.querySelector( "head" - ).innerHTML=``; - let cssArray=document.styleSheets[0].cssRules; + ).innerHTML = ``; + let cssArray = document.styleSheets[0].cssRules; // console.log("$$$:", cssArray) - let orangeHoverSelector=""; - for (let i=0; i< cssArray.length; i++) { + if (cssArray[i].selectorText === "a:hover") { + orangeHoverSelector = cssArray[i].style['text-decoration']; console.log("$$$:", orangeHoverSelector) } } expect(orangeHoverSelector).toBe("none"); }); - it("The a hover color should be green", function () { + test("The a hover color should be green", ()=> { document.querySelector( "head" - ).innerHTML=``; + ).innerHTML = ``; - let cssArray=document.styleSheets[0].cssRules; + let cssArray = document.styleSheets[0].cssRules; console.log("$$$:", cssArray[0]) - let orangeHoverSelector=""; - for (let i=0; i< cssArray.length; i++) { + if (cssArray[i].selectorText === "a:hover") { + orangeHoverSelector = cssArray[i].style.color; } } expect(orangeHoverSelector).toBe('green'); }); - it("You should not change the existing head tag elements", function () { + test("You should not change the existing head tag elements", ()=> { let head = document.querySelector('head') expect(head).toBeTruthy() - - let meta = head.querySelector("meta") - expect(meta).not.toBe(null) - - const pathname = new URL(document.querySelector('link').href).pathname - expect(pathname).toBe('/styles.css') - - let title = head.querySelector('title') - expect(title).not.toBe(null) + + expect(meta).toBeTruthy() + + let pathname = link.getAttribute("href") + expect(pathname).toBe('./styles.css') + + expect(title).toBeTruthy() }) }); From 9e629d73d45ff2eb032dc390aede164a584cfbf0 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 4 Aug 2022 15:29:26 +0000 Subject: [PATCH 131/491] added solution --- .../07-Very-Specific-Rules/solution.hide.css | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/exercises/07-Very-Specific-Rules/solution.hide.css b/exercises/07-Very-Specific-Rules/solution.hide.css index e69de29b..eb60fcfa 100644 --- a/exercises/07-Very-Specific-Rules/solution.hide.css +++ b/exercises/07-Very-Specific-Rules/solution.hide.css @@ -0,0 +1,25 @@ +/** Insert your code here **/ +ul li { + color: red; +} + +ol li:nth-child(2) { + background-color: green; +} + +tr:nth-child(odd) { + background: yellow; +} +/*********** READ ONLY BLOCK ****** +You CANNOT UPDATE anything from here on, +only add lines of code on top of this lines +**/ + +body { + color: blue; +} + +ul li, +ol li { + color: green; +} From 67b25638673e82fb8c220c2b1a34ef256e4b6a84 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 4 Aug 2022 15:30:01 +0000 Subject: [PATCH 132/491] fixed minor errors and improved test format --- exercises/07-Very-Specific-Rules/tests.js | 101 ++++++++++------------ 1 file changed, 47 insertions(+), 54 deletions(-) diff --git a/exercises/07-Very-Specific-Rules/tests.js b/exercises/07-Very-Specific-Rules/tests.js index 9cdd774c..10b24a7e 100644 --- a/exercises/07-Very-Specific-Rules/tests.js +++ b/exercises/07-Very-Specific-Rules/tests.js @@ -1,86 +1,79 @@ -const fs=require("fs"); -const path=require("path"); -const html=fs.readFileSync(path.resolve(__dirname, "./index.html"), "utf8"); -const css=fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +const fs = require('fs'); +const path = require('path'); +const html = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf8'); +const css = fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +document.documentElement.innerHTML = html.toString(); -jest.dontMock("fs"); +jest.dontMock('fs'); -describe("All the styles should be applied", function () { - beforeEach(() => { - //here I import the HTML into the document - document.documentElement.innerHTML=html.toString(); - //apply the styles from the stylesheet if needed - }); - afterEach(() => { - jest.resetModules(); - }); - - - it("The ul li color has to be red", function () { +describe("All the styles should be applied", ()=>{ + const meta = document.querySelector("meta") + const title = document.querySelector('title') + const link = document.querySelector('link') + + test("The ul li color has to be red", ()=>{ document.querySelector( "head" - ).innerHTML=``; - let cssArray=document.styleSheets[0].cssRules; - let orangeHoverSelector=""; - for (let i=0; i li") { - orangeHoverSelector=cssArray[i].style.color; + ).innerHTML = ``; + let cssArray = document.styleSheets[0].cssRules; + let orangeHoverSelector = ""; + for (let i = 0; i < cssArray.length; i++) { + if (cssArray[i].selectorText === "ul li" || cssArray[i].selectorText === "ul > li") { + orangeHoverSelector = cssArray[i].style["color"]; } - expect(orangeHoverSelector).toBe("red"); } + expect(orangeHoverSelector).toBe("red"); }); - it("The ul second element background should be green", function () { + test("The ul second element background should be green", ()=>{ document.querySelector( "head" - ).innerHTML=``; - let cssArray=document.styleSheets[0].cssRules; + ).innerHTML = ``; + let cssArray = document.styleSheets[0].cssRules; - let orangeHoverSelector=""; - for (let i=0; i li:nth-child(2)" ) { - orangeHoverSelector=cssArray[i].style['background-color']; + let orangeHoverSelector = ""; + for (let i = 0; i < cssArray.length; i++) { + if (cssArray[i].selectorText === "ol li:nth-child(2)" || cssArray[i].selectorText === "ol > li:nth-child(2)") { + orangeHoverSelector = cssArray[i].style['background-color']; } - }expect(orangeHoverSelector).toBe("green"); + } expect(orangeHoverSelector).toBe("green"); }) - it("The odd rows of the table should have yellow background", function () { + test("The odd rows of the table should have yellow background", ()=>{ document.querySelector( "head" - ).innerHTML=``; - let cssArray=document.styleSheets[0].cssRules; + ).innerHTML = ``; + let cssArray = document.styleSheets[0].cssRules; - let orangeHoverSelector=""; - for (let i=0; i< cssArray.length; i++) { + if (cssArray[i].selectorText === "tr:nth-child(odd)") { + orangeHoverSelector = cssArray[i].style['background']; } - }expect(orangeHoverSelector).toBe("yellow"); + } expect(orangeHoverSelector).toBe("yellow"); }) - it("Write all your rules above the existing code", function () { + test("Write all your rules above the existing code", ()=>{ document.querySelector( "head" - ).innerHTML=``; - let cssBody=document.styleSheets[0].cssRules[3].selectorText; - let cssArray=document.styleSheets[0].cssRules[4].selectorText; + ).innerHTML = ``; + let cssBody = document.styleSheets[0].cssRules[3].selectorText; + let cssArray = document.styleSheets[0].cssRules[4].selectorText; expect(cssArray).toBe("ul li,\nol li"); expect(cssBody).toBe("body"); } ) - it("You should not change the existing head tag elements", function () { + test("You should not change the existing head tag elements", ()=>{ let head = document.querySelector('head') expect(head).toBeTruthy() - - let meta = head.querySelector("meta") - expect(meta).not.toBe(null) - - const pathname = new URL(document.querySelector('link').href).pathname - expect(pathname).toBe('/styles.css') - - let title = head.querySelector('title') - expect(title).not.toBe(null) + + expect(meta).toBeTruthy() + + let href = link.getAttribute('href') + expect(href).toBe('./styles.css') + + expect(title).toBeTruthy() }) }); \ No newline at end of file From 62a29ac6547049d730d99ef45a94f293acb5ce3a Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 4 Aug 2022 17:12:02 +0000 Subject: [PATCH 133/491] added solution --- exercises/08-Rounded-Image/solution.hide.css | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/exercises/08-Rounded-Image/solution.hide.css b/exercises/08-Rounded-Image/solution.hide.css index e69de29b..56819f66 100644 --- a/exercises/08-Rounded-Image/solution.hide.css +++ b/exercises/08-Rounded-Image/solution.hide.css @@ -0,0 +1,13 @@ +body { + background: #bdbdbd; +} +.rounded { + border-radius: 100%; + background-image: url("https://github.com/4GeeksAcademy/css-tutorial-exercises-course/blob/master/.learn/assets/einstein.png?raw=true"); + background-position-x: center; + background-position-y: center; + background-size: contain; + object-fit: cover; + width: 200px; + height: 200px; +} From d62d736175aeceae5e670bb3f8990f1920a5ca02 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 4 Aug 2022 17:13:17 +0000 Subject: [PATCH 134/491] fix minor issues and improved format --- exercises/08-Rounded-Image/tests.js | 58 +++++++++++++---------------- 1 file changed, 25 insertions(+), 33 deletions(-) diff --git a/exercises/08-Rounded-Image/tests.js b/exercises/08-Rounded-Image/tests.js index fc2abaa5..c03d1580 100644 --- a/exercises/08-Rounded-Image/tests.js +++ b/exercises/08-Rounded-Image/tests.js @@ -1,35 +1,29 @@ -const fs = require("fs"); -const path = require("path"); -const html = fs.readFileSync(path.resolve(__dirname, "./index.html"), "utf8"); +const fs = require('fs'); +const path = require('path'); +const html = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf8'); const css = fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +document.documentElement.innerHTML = html.toString(); -jest.dontMock("fs"); +jest.dontMock('fs'); -describe("All the styles should be applied", function() { - beforeEach(() => { - //here I import the HTML into the document - document.documentElement.innerHTML = html.toString(); +describe("All the styles should be applied", () => { + const meta = document.querySelector("meta") + const title = document.querySelector('title') + const link = document.querySelector('link') - //apply the styles from the stylesheet if needed - - }); - afterEach(() => { - jest.resetModules(); - }); - - it("The tag has to be removed", function() { + test("The tag has to be removed", () => { document.querySelector( "head" ).innerHTML = ``; expect(document.querySelector("img")).toBeFalsy(); }); - it("The
    tag should exists", function() { + test("The
    tag should exists", () => { document.querySelector( "head" ).innerHTML = ``; expect(document.querySelector("div")).toBeTruthy(); }); - it("the width in the div Tag should be '200px'", function() { + test("the width in the div Tag should be '200px'", () => { // get computed styles of any element you like document.querySelector( "head" @@ -38,7 +32,7 @@ describe("All the styles should be applied", function() { let idTagStyles = window.getComputedStyle(divTag); expect(idTagStyles["width"]).toBe("200px"); }); - it("the height in the div Tag should be '200px'", function() { + test("the height in the div Tag should be '200px'", () => { // get computed styles of any element you like document.querySelector( "head" @@ -47,7 +41,7 @@ describe("All the styles should be applied", function() { let idTagStyles = window.getComputedStyle(divTag); expect(idTagStyles["height"]).toBe("200px"); }); - it("the border radius in the div Tag should be '100%'", function() { + test("the border radius in the div Tag should be '100%'", () => { // get computed styles of any element you like document.querySelector( "head" @@ -56,7 +50,7 @@ describe("All the styles should be applied", function() { let idTagStyles = window.getComputedStyle(divTag); expect(idTagStyles["border-radius"]).toBe("100%"); }); - it("the background position x in the div Tag should be 'center'", function() { + test("the background position x in the div Tag should be 'center'", () => { // get computed styles of any element you like document.querySelector( "head" @@ -65,7 +59,7 @@ describe("All the styles should be applied", function() { let idTagStyles = window.getComputedStyle(divTag); expect(idTagStyles["background-position-x"]).toBe("center"); }); - it("the background position y in the div Tag should be 'center'", function() { + test("the background position y in the div Tag should be 'center'", () => { // get computed styles of any element you like document.querySelector( "head" @@ -74,7 +68,7 @@ describe("All the styles should be applied", function() { let idTagStyles = window.getComputedStyle(divTag); expect(idTagStyles["background-position-y"]).toBe("center"); }); - it("the background image in the div Tag should exists", function() { + test("the background image in the div Tag should exists", () => { // get computed styles of any element you like document.querySelector( "head" @@ -83,17 +77,15 @@ describe("All the styles should be applied", function() { let idTagStyles = window.getComputedStyle(divTag); expect(idTagStyles["background-image"]).toBeTruthy(); }); - it("You should not change the existing head tag elements", function () { + test("You should not change the existing head tag elements", ()=>{ let head = document.querySelector('head') expect(head).toBeTruthy() - - let meta = head.querySelector("meta") - expect(meta).not.toBe(null) - - const pathname = new URL(document.querySelector('link').href).pathname - expect(pathname).toBe('/styles.css') - - let title = head.querySelector('title') - expect(title).not.toBe(null) + + expect(meta).toBeTruthy() + + let href = link.getAttribute('href') + expect(href).toBe('./styles.css') + + expect(title).toBeTruthy() }) }); From 2ff5fcafa6d3e0bb1426504ba16b627236da6831 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 4 Aug 2022 17:37:26 +0000 Subject: [PATCH 135/491] added solution --- exercises/09-Anchor-Styles/solution.hide.css | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/exercises/09-Anchor-Styles/solution.hide.css b/exercises/09-Anchor-Styles/solution.hide.css index e69de29b..b3e6a36b 100644 --- a/exercises/09-Anchor-Styles/solution.hide.css +++ b/exercises/09-Anchor-Styles/solution.hide.css @@ -0,0 +1,15 @@ +.threeDimension { + display: block; + border: 1px solid; + border-color: #aaa #000 #000 #aaa; + width: 8em; + background: #fc0; + text-decoration: none; + text-align: center; + color: black; +} + +a.threeDimension:active { + /* your code here*/ + border-color: #000 #aaa #aaa #000; +} \ No newline at end of file From e5ae3f25e771f0ce5d39970048b612e2c4f306aa Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 4 Aug 2022 17:37:58 +0000 Subject: [PATCH 136/491] added test to prevent user from changing default styles plus minor improvements --- exercises/09-Anchor-Styles/tests.js | 98 +++++++++++++++++------------ 1 file changed, 58 insertions(+), 40 deletions(-) diff --git a/exercises/09-Anchor-Styles/tests.js b/exercises/09-Anchor-Styles/tests.js index cab43954..73192e4f 100644 --- a/exercises/09-Anchor-Styles/tests.js +++ b/exercises/09-Anchor-Styles/tests.js @@ -1,68 +1,86 @@ -const fs=require("fs"); -const path=require("path"); -const html=fs.readFileSync(path.resolve(__dirname, "./index.html"), "utf8"); -const css=fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); -let cssArray=null; -jest.dontMock("fs"); +const fs = require('fs'); +const path = require('path'); +const html = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf8'); +const css = fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +document.documentElement.innerHTML = html.toString(); -describe("All the styles should be applied", function () { - beforeEach(() => { - //here I import the HTML into the document - document.documentElement.innerHTML=html.toString(); +jest.dontMock('fs'); - //apply the styles from the stylesheet if needed +let cssArray = null; - - }); - afterEach(() => { - jest.resetModules(); - }); - - it("You should not add your rules above the existing code", function () { +describe("All the styles should be applied", () => { + const meta = document.querySelector("meta") + const title = document.querySelector('title') + const link = document.querySelector('link') + test("You should not add your rules above the existing code", () => { document.querySelector( "head" - ).innerHTML=``; - let cssArray=document.styleSheets[0].cssRules[0].selectorText; + ).innerHTML = ``; + let cssArray = document.styleSheets[0].cssRules[0].selectorText; expect(cssArray).toBe(".threeDimension"); }) - it("the 'a' tag in the index.html should not be deleted", function () { + test("the 'a' tag in the index.html should not be deleted", () => { // we can read from the source code // console.log(html.toString()); - expect(html.toString().indexOf(`-1).toBeTruthy(); + expect(html.toString().indexOf(` -1).toBeTruthy(); }); - it("The border-color rule for the 'threeDimension active ' property should match the instruction color", function () { + test("The border-color rule for the 'threeDimension active ' property should match the instruction color", () => { // get computed styles of any element you like // let cssArray=document.styleSheets[0].cssRules; document.querySelector( "head" - ).innerHTML=``; - let cssArray=document.styleSheets[0].cssRules; + ).innerHTML = ``; + let cssArray = document.styleSheets[0].cssRules; - let orangeHoverSelector=""; - for (let i=0; i< cssArray.length; i++) { + if (cssArray[i].selectorText === "a.threeDimension:active") { + orangeHoverSelector = cssArray[i].style['border-color']; } } - expect(orangeHoverSelector).toBe("#000 #aaa #aaa #000"); + + }); + test("You should not change the default styles", () => { + // get computed styles of any element you like + // let cssArray=document.styleSheets[0].cssRules; + document.querySelector( + "head" + ).innerHTML = ``; + let cssArray = document.styleSheets[0].cssRules; + + let borderColor = ""; + let color = ""; + let background = ""; + let width = ""; + for (let i = 0; i < cssArray.length; i++) { + if (cssArray[i].selectorText === ".threeDimension") { + borderColor = cssArray[i].style["border-color"]; + color = cssArray[i].style['color']; + background = cssArray[i].style['background']; + width = cssArray[i].style['width']; + expect(borderColor).toBe("#aaa #000 #000 #aaa"); + expect(color).toBe("black"); + expect(background).toBe("#fc0"); + expect(width).toBe("8em"); + } + } + }); - it("You should not change the existing head tag elements", function () { + test("You should not change the existing head tag elements", () => { let head = document.querySelector('head') expect(head).toBeTruthy() - - let meta = head.querySelector("meta") - expect(meta).not.toBe(null) - - const pathname = new URL(document.querySelector('link').href).pathname - expect(pathname).toBe('/styles.css') - - let title = head.querySelector('title') - expect(title).not.toBe(null) + + expect(meta).toBeTruthy() + + let href = link.getAttribute('href') + expect(href).toBe('./styles.css') + + expect(title).toBeTruthy() }) }); From b512f717377fe13c5b66cfab03336c81531a4c51 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 4 Aug 2022 19:22:40 +0000 Subject: [PATCH 137/491] added solutions for html and css --- exercises/10-Your-Own-Font/solution.hide.css | 4 ++++ exercises/10-Your-Own-Font/solution.hide.html | 20 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 exercises/10-Your-Own-Font/solution.hide.html diff --git a/exercises/10-Your-Own-Font/solution.hide.css b/exercises/10-Your-Own-Font/solution.hide.css index e69de29b..371e026b 100644 --- a/exercises/10-Your-Own-Font/solution.hide.css +++ b/exercises/10-Your-Own-Font/solution.hide.css @@ -0,0 +1,4 @@ +.myTitle { + /*your code here*/ + font-family: 'Roboto'; /*Varies depending on the font you chose*/ +} diff --git a/exercises/10-Your-Own-Font/solution.hide.html b/exercises/10-Your-Own-Font/solution.hide.html new file mode 100644 index 00000000..b2268633 --- /dev/null +++ b/exercises/10-Your-Own-Font/solution.hide.html @@ -0,0 +1,20 @@ + + + + + + + + + + + 10 Your Own Font + + + +

    My unique font

    + + + \ No newline at end of file From e4452cc9bc10c0beeb41aadd3cb757c5300d9b3b Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 4 Aug 2022 19:23:45 +0000 Subject: [PATCH 138/491] fixed issue with CSS rules, improved tests --- exercises/10-Your-Own-Font/tests.js | 60 +++++++++++++---------------- 1 file changed, 27 insertions(+), 33 deletions(-) diff --git a/exercises/10-Your-Own-Font/tests.js b/exercises/10-Your-Own-Font/tests.js index dd13147d..52e13aa6 100644 --- a/exercises/10-Your-Own-Font/tests.js +++ b/exercises/10-Your-Own-Font/tests.js @@ -1,53 +1,47 @@ -const fs=require("fs"); -const path=require("path"); -const html=fs.readFileSync(path.resolve(__dirname, "./index.html"), "utf8"); -const css=fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); - -jest.dontMock("fs"); - -describe("All the styles should be applied", function () { - beforeEach(() => { - //here I import the HTML into the document - document.documentElement.innerHTML=html.toString(); - - //apply the styles from the stylesheet if needed - // document.querySelector( - // "head" - // ).innerHTML=``; - }); - afterEach(() => { - jest.resetModules(); - }); +const fs = require('fs'); +const path = require('path'); +const html = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf8'); +const css = fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +document.documentElement.innerHTML = html.toString(); + +jest.dontMock('fs'); + +let cssArray = null; + +describe("All the styles should be applied", ()=>{ + const link = document.querySelectorAll("link") + test("the font-family in the .myTitle should exists", ()=>{ + document.querySelector( + "head" + ).innerHTML = ``; - it("the font-family in the .myTitle should exists", function () { // get computed styles of any element you like - let cssArray=document.styleSheets[0].cssRules; + let cssArray = document.styleSheets[0].cssRules; // console.log("%%% ", cssArray) - let orangeHoverSelector=""; - for (let i=0; i< cssArray.length; i++) { + if (cssArray[i].selectorText === ".myTitle") { // console.log("%%% ", cssArray[i].selectorText) - orangeHoverSelector=cssArray[i].style['font-family']; + orangeHoverSelector = cssArray[i].style['font-family']; } } expect(orangeHoverSelector).toBeTruthy(); }); - it('the h1 tag should have a class "myTitle"', function () { + test('the h1 tag should have a class "myTitle"', ()=>{ //or use query selector to compare hoy mane scriptags do we have - const h=document.querySelector("h1"); + const h = document.querySelector("h1"); expect(h.classList.contains("myTitle")).toBeTruthy(); }); - it("The link should be included in the head tag", function () { + test("The link should be included in the head tag", ()=>{ // let headContent=document.getElementsByTagName("*") // console.log("###", headContent[1].innerHTML) - console.log("###", document.head.childNodes) - expect(document.querySelectorAll("link").length).toBe(2); + expect(link.length).toBe(2); }); - it("The Head tag should not includes a Style tag", function () { - expect(html.toString().indexOf(`-1).toBeFalsy(); + test("The Head tag should not includes a Style tag", ()=>{ + expect(html.toString().indexOf(` -1).toBeFalsy(); }); }); From a01e4bf84c31401661d13f72b9f7a0d3e0f2703f Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 4 Aug 2022 19:38:45 +0000 Subject: [PATCH 139/491] added solution --- exercises/11-Font-Awesome-Icons/solution.hide.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/exercises/11-Font-Awesome-Icons/solution.hide.html b/exercises/11-Font-Awesome-Icons/solution.hide.html index bd68c2a7..e9778b12 100644 --- a/exercises/11-Font-Awesome-Icons/solution.hide.html +++ b/exercises/11-Font-Awesome-Icons/solution.hide.html @@ -9,9 +9,9 @@
      -
    • Hello
    • -
    • Flag
    • -
    • Heart
    • +
    • Hello
    • +
    • Hello
    • +
    • Hello
    From b62745c734e3cc8d7a67ede1ab83b7f662b8c60a Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 4 Aug 2022 19:40:47 +0000 Subject: [PATCH 140/491] fixed test checking for the wrong class, improved tests overall --- exercises/11-Font-Awesome-Icons/tests.js | 46 ++++++++++-------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/exercises/11-Font-Awesome-Icons/tests.js b/exercises/11-Font-Awesome-Icons/tests.js index 3fa966cb..f7d8cf6e 100644 --- a/exercises/11-Font-Awesome-Icons/tests.js +++ b/exercises/11-Font-Awesome-Icons/tests.js @@ -1,46 +1,38 @@ -const fs = require("fs"); -const path = require("path"); -const html = fs.readFileSync(path.resolve(__dirname, "./index.html"), "utf8"); +const fs = require('fs'); +const path = require('path'); +const html = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf8'); const css = fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +document.documentElement.innerHTML = html.toString(); -jest.dontMock("fs"); +jest.dontMock('fs'); -describe("All the styles should be applied", function() { - beforeEach(() => { - //here I import the HTML into the document - document.documentElement.innerHTML = html.toString(); +let cssArray = null; - //apply the styles from the stylesheet if needed - document.querySelector( - "head" - ).innerHTML = ``; - }); - afterEach(() => { - jest.resetModules(); - }); - - it("ul tag should exists", function() { +describe("All the styles should be applied", ()=>{ + const icons = document.querySelectorAll("i"); + test("ul tag should exists", ()=>{ expect(document.querySelector("ul")).toBeTruthy(); }); - it("At least 3 li tags should exist", function() { + test("At least 3 li tags should exist", ()=>{ expect(document.querySelectorAll("li").length).toBe(3); }); - it("At least 3 i tags should exist", function() { + test("At least 3 i tags should exist", ()=>{ expect(document.querySelectorAll("i").length).toBe(3); }); - it(" LI innerHTML exist", function() { + test(" LI innerHTML exist", ()=>{ const li = document.querySelectorAll("li"); expect(document.querySelector("li")).toBeTruthy(); for (let i = 0; i < li.length; i++) { expect(li[i].innerHTML).toBeTruthy(); } }); - it('the i tag should have a class "fas"', function() { + test('the i tag should have a class "fas"', ()=>{ //or use query selector to compare hoy mane scriptags do we have - const icon = document.querySelectorAll("i"); - expect(document.querySelector("i")).toBeTruthy(); - for (let i = 0; i < icon.length; i++) { - expect(icon[i].classList.contains("fa")).toBeTruthy(); - } + expect(icons).toBeTruthy(); + + icons.forEach(icon=>{ + let hasFas = icon.classList.contains("fas") + expect(hasFas).toBe(true); + }) }); }); From 247b554390c32b901f751e7bed8bb900665364b1 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 4 Aug 2022 20:29:44 +0000 Subject: [PATCH 141/491] added solution --- .../12-Relative-Length-EM-REM/solution.hide.css | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/exercises/12-Relative-Length-EM-REM/solution.hide.css b/exercises/12-Relative-Length-EM-REM/solution.hide.css index e69de29b..eeb04334 100644 --- a/exercises/12-Relative-Length-EM-REM/solution.hide.css +++ b/exercises/12-Relative-Length-EM-REM/solution.hide.css @@ -0,0 +1,15 @@ +#my-first-div { + font-size: 15px; +} +#the-second-one { + font-size: 25px; +} + +/* YOUR CODE BELOW THIS LINE */ +h2{ + font-size: 0.8em; +} + +h3{ + font-size: 0.8rem; +} \ No newline at end of file From cb10a77a787282c93cdc6dc09da99320004fe00f Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 4 Aug 2022 20:29:57 +0000 Subject: [PATCH 142/491] fixed and cleaned up tests --- exercises/12-Relative-Length-EM-REM/tests.js | 73 +++++++++----------- 1 file changed, 32 insertions(+), 41 deletions(-) diff --git a/exercises/12-Relative-Length-EM-REM/tests.js b/exercises/12-Relative-Length-EM-REM/tests.js index 2f884753..2752a78d 100644 --- a/exercises/12-Relative-Length-EM-REM/tests.js +++ b/exercises/12-Relative-Length-EM-REM/tests.js @@ -1,69 +1,60 @@ -const fs=require("fs"); -const path=require("path"); -const html=fs.readFileSync(path.resolve(__dirname, "./index.html"), "utf8"); -const css=fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +const fs = require('fs'); +const path = require('path'); +const html = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf8'); +const css = fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +document.documentElement.innerHTML = html.toString(); -jest.dontMock("fs"); +jest.dontMock('fs'); -describe("All the styles should be applied", function () { - beforeEach(() => { - //here I import the HTML into the document - document.documentElement.innerHTML=html.toString(); - - //apply the styles from the stylesheet if needed - - }); - afterEach(() => { - jest.resetModules(); - }); - - it("The H2 Tag should have a font-size: 0.8em", function () { +describe("All the styles should be applied", ()=>{ + const meta = document.querySelector("meta") + const title = document.querySelector('title') + const link = document.querySelector('link') + test("The H2 Tag should have a font-size: 0.8em", ()=>{ // get computed styles of any element you like document.querySelector( "head" - ).innerHTML=``; - const h2Tag=document.querySelector("h2"); - var styles=window.getComputedStyle(h2Tag); + ).innerHTML = ``; + const h2Tag = document.querySelector("h2"); + var styles = window.getComputedStyle(h2Tag); expect(styles["font-size"]).toBe("0.8em"); }); - it("The H3 Tag should haave a font-size: 0.8rem", function () { + test("The H3 Tag should haave a font-size: 0.8rem", ()=>{ // get computed styles of any element you like document.querySelector( "head" - ).innerHTML=``; - const h3Tag=document.querySelector("h3"); - var styles=window.getComputedStyle(h3Tag); + ).innerHTML = ``; + const h3Tag = document.querySelector("h3"); + var styles = window.getComputedStyle(h3Tag); expect(styles["font-size"]).toBe("0.8rem"); }); - it("You should add your rules below the existing code", function () { + test("You should add your rules below the existing code", ()=>{ document.querySelector( "head" - ).innerHTML=``; - let cssArray=document.styleSheets[0].cssRules[0].selectorText; + ).innerHTML = ``; + let cssArray = document.styleSheets[0].cssRules[0].selectorText; expect(cssArray).toBe("#my-first-div"); } ) - it("You should add your rules below the existing code", function () { + test("You should add your rules below the existing code", ()=>{ document.querySelector( "head" - ).innerHTML=``; - let cssArray=document.styleSheets[0].cssRules[1].selectorText; + ).innerHTML = ``; + let cssArray = document.styleSheets[0].cssRules[1].selectorText; expect(cssArray).toBe("#the-second-one"); } ) - it("You should not change the existing head tag elements", function () { + test("You should not change the existing head tag elements", ()=>{ let head = document.querySelector('head') expect(head).toBeTruthy() - - let meta = head.querySelector("meta") - expect(meta).not.toBe(null) - - const pathname = new URL(document.querySelector('link').href).pathname - expect(pathname).toBe('/styles.css') - - let title = head.querySelector('title') - expect(title).not.toBe(null) + + expect(meta).toBeTruthy() + + let href = link.getAttribute('href') + expect(href).toBe('./styles.css') + + expect(title).toBeTruthy() }) }); From fdaa2df10b8c994347f5cb23c6f7af73f7090460 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Sat, 6 Aug 2022 02:54:50 +0000 Subject: [PATCH 143/491] changed colors color requirements to orange and dark orange --- exercises/13-Anchor-Like-Button/tests.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/13-Anchor-Like-Button/tests.js b/exercises/13-Anchor-Like-Button/tests.js index 32f0c21e..bddebed7 100644 --- a/exercises/13-Anchor-Like-Button/tests.js +++ b/exercises/13-Anchor-Like-Button/tests.js @@ -54,7 +54,7 @@ describe("All the styles should be applied", function () { ).innerHTML=``; let divTag=document.querySelector(".orange-btn"); let classTagStyles=window.getComputedStyle(divTag); - expect(classTagStyles["background"]).toBe("rgb(255, 153, 51)"); + expect(classTagStyles["background"]).toBe("orange"); }); it("the underline should to be removed", function () { document.querySelector( @@ -79,7 +79,7 @@ describe("All the styles should be applied", function () { } } - expect(orangeHoverSelector).toBe("#cc7a00"); + expect(orangeHoverSelector).toBe("darkorange"); }); it("You should be careful with the specifity", function () { From 2a3353ce41387d81223b366b536a2d80fbfb6a08 Mon Sep 17 00:00:00 2001 From: ErnestoXG <60261375+UmiKami@users.noreply.github.com> Date: Sun, 7 Aug 2022 23:46:26 -0400 Subject: [PATCH 144/491] Update index.html better format --- exercises/12-Relative-Length-EM-REM/index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/exercises/12-Relative-Length-EM-REM/index.html b/exercises/12-Relative-Length-EM-REM/index.html index 60a98594..f4d745fd 100644 --- a/exercises/12-Relative-Length-EM-REM/index.html +++ b/exercises/12-Relative-Length-EM-REM/index.html @@ -12,6 +12,7 @@

    First h2 heading

    First h3 heading

    Here is some nice fake content

    +

    Second h2 heading

    Second h3 heading

    From 4328860e8d1e81db2310da502c4ab1e394fa2b45 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 10 Aug 2022 02:40:49 +0000 Subject: [PATCH 145/491] Gave user specific colors to use --- exercises/13-Anchor-Like-Button/README.es.md | 2 +- exercises/13-Anchor-Like-Button/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/13-Anchor-Like-Button/README.es.md b/exercises/13-Anchor-Like-Button/README.es.md index a1fda469..576d146b 100644 --- a/exercises/13-Anchor-Like-Button/README.es.md +++ b/exercises/13-Anchor-Like-Button/README.es.md @@ -10,7 +10,7 @@ Siga estos pasos para que tu enlace (`anchor`) se vea así: 2. Bordes redondeados: establece el `border-radius` en `4px`. -3. Encuentra y aplica el color: usa el selector de `color` (color picker) para encontrar el color exacto y aplicárselo al `background`. +3. El `background` debe ser de color `orange`, y cuando el ratón esté sobre el botón (`:hover`), el `background` debe ser `darkorange` 4. Eliminar subrayado: establece `text-decoration` a `none`. diff --git a/exercises/13-Anchor-Like-Button/README.md b/exercises/13-Anchor-Like-Button/README.md index 40327be6..49ced0bf 100644 --- a/exercises/13-Anchor-Like-Button/README.md +++ b/exercises/13-Anchor-Like-Button/README.md @@ -8,7 +8,7 @@ Anchors are not only used within text- when you are going to use anchors outside 2. Rounded borders: Set `border-radius` to `4px`. -3. Find and apply the color: Use the color picker to find the color and apply make the background to that color. +3. The background should be `orange` when not hovered, and `darkorange` on hover (`:hover`). 4. Remove underline: Set `text-decoration` to `none`. From 13991d0b869c311002a7e25303cc8692e19c1cd5 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 10 Aug 2022 02:41:02 +0000 Subject: [PATCH 146/491] added solution --- exercises/13-Anchor-Like-Button/solution.hide.css | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/exercises/13-Anchor-Like-Button/solution.hide.css b/exercises/13-Anchor-Like-Button/solution.hide.css index e69de29b..fd0db11b 100644 --- a/exercises/13-Anchor-Like-Button/solution.hide.css +++ b/exercises/13-Anchor-Like-Button/solution.hide.css @@ -0,0 +1,13 @@ +.orange-btn { + /*your code here*/ + padding: 10px; + border-radius: 4px; + text-decoration: none; + color: white; + background: orange; +} + +.orange-btn:hover { + /*YOUR CODE HERE FOR THE HOVER STATE*/ + background: darkorange; +} From 9bf97689150f71e33bf5f10087e3f645f7c92f6b Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Wed, 10 Aug 2022 02:41:54 +0000 Subject: [PATCH 147/491] improved tests and cleaned them up --- exercises/13-Anchor-Like-Button/tests.js | 105 ++++++++++------------- 1 file changed, 44 insertions(+), 61 deletions(-) diff --git a/exercises/13-Anchor-Like-Button/tests.js b/exercises/13-Anchor-Like-Button/tests.js index bddebed7..fcc69fa4 100644 --- a/exercises/13-Anchor-Like-Button/tests.js +++ b/exercises/13-Anchor-Like-Button/tests.js @@ -1,107 +1,90 @@ -const fs=require("fs"); -const path=require("path"); -const html=fs.readFileSync(path.resolve(__dirname, "./index.html"), "utf8"); -const css=fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +const fs = require('fs'); +const path = require('path'); +const html = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf8'); +const css = fs.readFileSync(path.resolve(__dirname, "./styles.css"), "utf8"); +document.documentElement.innerHTML = html.toString(); +jest.dontMock('fs'); -jest.dontMock("fs"); -describe("All the styles should be applied", function () { - beforeEach(() => { - //here I import the HTML into the document - document.documentElement.innerHTML=html.toString(); - - - }); - afterEach(() => { - jest.resetModules(); - }); - - it("the padding should be '10px'", function () { +describe("All the styles should be applied", ()=>{ + const meta = document.querySelector("meta") + const title = document.querySelector('title') + const link = document.querySelector('link') + test("the padding should be '10px'", ()=>{ document.querySelector( "head" - ).innerHTML=``; - let divTag=document.querySelector(".orange-btn"); - let classTagStyles=window.getComputedStyle(divTag); + ).innerHTML = ``; + let divTag = document.querySelector(".orange-btn"); + let classTagStyles = window.getComputedStyle(divTag); expect(classTagStyles["padding"]).toBe("10px"); }); - it("the border radius should be '4px'", function () { + test("the border radius should be '4px'", ()=>{ document.querySelector( "head" - ).innerHTML=``; - let divTag=document.querySelector(".orange-btn"); - let classTagStyles=window.getComputedStyle(divTag); + ).innerHTML = ``; + let divTag = document.querySelector(".orange-btn"); + let classTagStyles = window.getComputedStyle(divTag); expect(classTagStyles["border-radius"]).toBe("4px"); }); - it("the border should be '1px solid #ffffff;'", function () { - document.querySelector( - "head" - - ).innerHTML=``; - let divTag=document.querySelector(".orange-btn"); - let classTagStyles=window.getComputedStyle(divTag); - expect(classTagStyles["border"]).toBe("1px solid #ffffff"); - }); - it("the background should be 'rgb(255, 153, 51)'", function () { + test("the background should be 'orange'", ()=>{ document.querySelector( "head" - ).innerHTML=``; - let divTag=document.querySelector(".orange-btn"); - let classTagStyles=window.getComputedStyle(divTag); + ).innerHTML = ``; + let divTag = document.querySelector(".orange-btn"); + let classTagStyles = window.getComputedStyle(divTag); expect(classTagStyles["background"]).toBe("orange"); }); - it("the underline should to be removed", function () { + test("the underline should to be removed", ()=>{ document.querySelector( "head" - ).innerHTML=``; - let divTag=document.querySelector(".orange-btn"); - let classTagStyles=window.getComputedStyle(divTag); + ).innerHTML = ``; + let divTag = document.querySelector(".orange-btn"); + let classTagStyles = window.getComputedStyle(divTag); expect(classTagStyles["text-decoration"]).toBe("none"); }); - it("The mouse hover property should be #cc7a00", function () { + test("The mouse hover property should be 'darkorange'", ()=>{ // get computed styles of any element you like document.querySelector( "head" - ).innerHTML=``; - let cssArray=document.styleSheets[0].cssRules; + ).innerHTML = ``; + let cssArray = document.styleSheets[0].cssRules; - let orangeHoverSelector=""; - for (let i=0; i< cssArray.length; i++) { + if (cssArray[i].selectorText === ".orange-btn:hover") { + orangeHoverSelector = cssArray[i].style.background; } } expect(orangeHoverSelector).toBe("darkorange"); }); - it("You should be careful with the specifity", function () { + test("You should be careful with the specifity", ()=>{ document.querySelector( "head" - ).innerHTML=``; - let cssArray=document.styleSheets[0].cssRules[0].selectorText; + ).innerHTML = ``; + let cssArray = document.styleSheets[0].cssRules[0].selectorText; expect(cssArray).toBe(".orange-btn"); } ) - it("You should not change the existing head tag elements", function () { + test("You should not change the existing head tag elements", ()=>{ let head = document.querySelector('head') expect(head).toBeTruthy() - - let meta = head.querySelector("meta") - expect(meta).not.toBe(null) - - const pathname = new URL(document.querySelector('link').href).pathname - expect(pathname).toBe('/styles.css') - - let title = head.querySelector('title') - expect(title).not.toBe(null) + + expect(meta).toBeTruthy() + + let href = link.getAttribute('href') + expect(href).toBe('./styles.css') + + expect(title).toBeTruthy() }) }); From 9aa151e07f42bea69f2643c4c16e714e6f141579 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Tue, 16 Aug 2022 21:50:46 +0000 Subject: [PATCH 148/491] Updated typo on readme code --- exercises/06-Practicing-Rules/README.es.md | 2 +- exercises/06-Practicing-Rules/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/06-Practicing-Rules/README.es.md b/exercises/06-Practicing-Rules/README.es.md index c95ae914..ee953a20 100644 --- a/exercises/06-Practicing-Rules/README.es.md +++ b/exercises/06-Practicing-Rules/README.es.md @@ -4,7 +4,7 @@ 1. Establece esta URL como la imagen de fondo de la página y repítela solo verticalmente: `../../.learn/assets/background-vertical.jpg?raw=true` -2. Cambia el tipo de fuente (`font-type`) del `h1` a `Courier` y el resto del sitio web a `Times New Roman`. +2. Cambia el tipo de fuente (`font-family`) del `h1` a `Courier` y el resto del sitio web a `Times New Roman`. 3. Cambia el color del `h1` a rojo(`red`). diff --git a/exercises/06-Practicing-Rules/README.md b/exercises/06-Practicing-Rules/README.md index 64428af4..b8b63bcc 100644 --- a/exercises/06-Practicing-Rules/README.md +++ b/exercises/06-Practicing-Rules/README.md @@ -8,7 +8,7 @@ tutorial: "https://www.youtube.com/watch?v=4wguurrl-lU" 1. Set this URL as the background image of the page, and repeat it vertically only: `../../.learn/assets/background-vertical.jpg?raw=true` -2. Change the font-type of the `h1` to `Courier` and the rest of the website to `Times new Roman`. +2. Change the font-family of the `h1` to `Courier` and the rest of the website to `Times new Roman`. 3. Change the color of `h1` to `red`. From b40363d69d350ba0ba029d902ed34272ab5e6f0a Mon Sep 17 00:00:00 2001 From: dsilva06 Date: Thu, 18 Aug 2022 21:45:09 +0000 Subject: [PATCH 149/491] learnpack-version --- .gitpod.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile index 7c3ce6f6..5b113e53 100644 --- a/.gitpod.Dockerfile +++ b/.gitpod.Dockerfile @@ -4,4 +4,4 @@ FROM gitpod/workspace-full:latest USER gitpod RUN npm i jest@24.8.0 -g -RUN npm i @learnpack/learnpack -g && learnpack plugins:install learnpack-html@0.0.20 +RUN npm i @learnpack/learnpack@2.1.18 -g && learnpack plugins:install learnpack-html@0.0.20 From fe11a4f8385706a3745dd05d82ad5cf735eef5a8 Mon Sep 17 00:00:00 2001 From: dsilva06 Date: Thu, 18 Aug 2022 22:01:37 +0000 Subject: [PATCH 150/491] learnpack version --- README.md | 2 +- exercises/00-Welcome/README.es.md | 2 +- exercises/00-Welcome/README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b127fe6b..3c27ee93 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@
    -Hi! I'm [Alejandro Sanchez @alesanchezr](https://github.com/alesanchezr), really excited to have you here! 🎉 😂 Learning to code is hard, you need coaching! [DM me on twitter](https://twitter.com/alesanchezr) if you have any question. +Hi! I'm [Alejandro Sanchez @alesanchezr](https://github.com/alesanchezr), really excited to have you here! 🎉 😂 Learning to code is hard, you need coaching! [DM me on twitter](twitter.com/alesanchezr) if you have any question. ## You'll be learning the following concepts: diff --git a/exercises/00-Welcome/README.es.md b/exercises/00-Welcome/README.es.md index bed6d3a1..b8215e3e 100644 --- a/exercises/00-Welcome/README.es.md +++ b/exercises/00-Welcome/README.es.md @@ -4,7 +4,7 @@ intro: "https://www.youtube.com/watch?v=BDKdUPDez-U" # ¡¡Bienvenido a los ejercicios de CSS!! -Mi nombre es Alejandro Sanchez [@alesanchezr](https://twitter.com/alesanchezr) ¡Estoy muy contento de que estén aquí! 🎉 😂 +Mi nombre es Alejandro Sanchez [@alesanchezr](twitter.com/alesanchezr) ¡Estoy muy contento de que estén aquí! 🎉 😂 Aprender a programar es dificil ¡Probablemente necesitarás coaching! Envíame un DM vía Twitter si tienes alguna duda. Durante este curso aprenderás los siguientes conceptos: diff --git a/exercises/00-Welcome/README.md b/exercises/00-Welcome/README.md index 7ff64cf1..0162723a 100644 --- a/exercises/00-Welcome/README.md +++ b/exercises/00-Welcome/README.md @@ -4,7 +4,7 @@ intro: "https://www.youtube.com/watch?v=BDKdUPDez-U" # Welcome to CSS Exercises!! -My name is Alejandro Sanchez [@alesanchezr](https://twitter.com/alesanchezr). I'm really excited to have you here !! 🎉 😂 +My name is Alejandro Sanchez [@alesanchezr](twitter.com/alesanchezr). I'm really excited to have you here !! 🎉 😂 Learning to code is hard, you will problably need coaching! DM me on twitter if you have any question. During this course you will be learning the following concepts: From a478e3f1e4b6e3c944a322b792fc0dccecc0120d Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez <56565994+tommygonzaleza@users.noreply.github.com> Date: Mon, 22 Aug 2022 08:18:15 -0400 Subject: [PATCH 151/491] Update .gitpod.Dockerfile --- .gitpod.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile index 5b113e53..2b9caebb 100644 --- a/.gitpod.Dockerfile +++ b/.gitpod.Dockerfile @@ -4,4 +4,4 @@ FROM gitpod/workspace-full:latest USER gitpod RUN npm i jest@24.8.0 -g -RUN npm i @learnpack/learnpack@2.1.18 -g && learnpack plugins:install learnpack-html@0.0.20 +RUN npm i @learnpack/learnpack@2.1.18 -g && learnpack plugins:install @learnpack/html From f007d5c3ca3bcc722a394f1f965a3f159ed9c8fe Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez <56565994+tommygonzaleza@users.noreply.github.com> Date: Mon, 22 Aug 2022 08:18:45 -0400 Subject: [PATCH 152/491] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3c27ee93..b127fe6b 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ -Hi! I'm [Alejandro Sanchez @alesanchezr](https://github.com/alesanchezr), really excited to have you here! 🎉 😂 Learning to code is hard, you need coaching! [DM me on twitter](twitter.com/alesanchezr) if you have any question. +Hi! I'm [Alejandro Sanchez @alesanchezr](https://github.com/alesanchezr), really excited to have you here! 🎉 😂 Learning to code is hard, you need coaching! [DM me on twitter](https://twitter.com/alesanchezr) if you have any question. ## You'll be learning the following concepts: From 0bb32adae0cd2de0fc5ce1e1653ccd39d47f6555 Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez <56565994+tommygonzaleza@users.noreply.github.com> Date: Mon, 22 Aug 2022 08:19:01 -0400 Subject: [PATCH 153/491] Update README.es.md --- exercises/00-Welcome/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/00-Welcome/README.es.md b/exercises/00-Welcome/README.es.md index b8215e3e..bed6d3a1 100644 --- a/exercises/00-Welcome/README.es.md +++ b/exercises/00-Welcome/README.es.md @@ -4,7 +4,7 @@ intro: "https://www.youtube.com/watch?v=BDKdUPDez-U" # ¡¡Bienvenido a los ejercicios de CSS!! -Mi nombre es Alejandro Sanchez [@alesanchezr](twitter.com/alesanchezr) ¡Estoy muy contento de que estén aquí! 🎉 😂 +Mi nombre es Alejandro Sanchez [@alesanchezr](https://twitter.com/alesanchezr) ¡Estoy muy contento de que estén aquí! 🎉 😂 Aprender a programar es dificil ¡Probablemente necesitarás coaching! Envíame un DM vía Twitter si tienes alguna duda. Durante este curso aprenderás los siguientes conceptos: From 8e2b75c082158c547ba38065123a8d8e6a8cc78f Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez <56565994+tommygonzaleza@users.noreply.github.com> Date: Mon, 22 Aug 2022 08:19:20 -0400 Subject: [PATCH 154/491] Update README.md --- exercises/00-Welcome/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/00-Welcome/README.md b/exercises/00-Welcome/README.md index 0162723a..7ff64cf1 100644 --- a/exercises/00-Welcome/README.md +++ b/exercises/00-Welcome/README.md @@ -4,7 +4,7 @@ intro: "https://www.youtube.com/watch?v=BDKdUPDez-U" # Welcome to CSS Exercises!! -My name is Alejandro Sanchez [@alesanchezr](twitter.com/alesanchezr). I'm really excited to have you here !! 🎉 😂 +My name is Alejandro Sanchez [@alesanchezr](https://twitter.com/alesanchezr). I'm really excited to have you here !! 🎉 😂 Learning to code is hard, you will problably need coaching! DM me on twitter if you have any question. During this course you will be learning the following concepts: From 084b23297c46d8cfe5b3d9e2ebdec4bdad80067c Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez <56565994+tommygonzaleza@users.noreply.github.com> Date: Mon, 22 Aug 2022 21:44:12 -0400 Subject: [PATCH 155/491] Update .gitpod.Dockerfile --- .gitpod.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile index 2b9caebb..78106952 100644 --- a/.gitpod.Dockerfile +++ b/.gitpod.Dockerfile @@ -4,4 +4,4 @@ FROM gitpod/workspace-full:latest USER gitpod RUN npm i jest@24.8.0 -g -RUN npm i @learnpack/learnpack@2.1.18 -g && learnpack plugins:install @learnpack/html +RUN npm i @learnpack/learnpack@2.1.18 -g && learnpack plugins:install @learnpack/html@1.1.1 From bfa48b0a1e8395e093e6bf72004cdf58d95b11d3 Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez <56565994+tommygonzaleza@users.noreply.github.com> Date: Mon, 22 Aug 2022 21:44:22 -0400 Subject: [PATCH 156/491] Update .gitpod.Dockerfile --- .gitpod.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile index 78106952..e3b99e1b 100644 --- a/.gitpod.Dockerfile +++ b/.gitpod.Dockerfile @@ -4,4 +4,4 @@ FROM gitpod/workspace-full:latest USER gitpod RUN npm i jest@24.8.0 -g -RUN npm i @learnpack/learnpack@2.1.18 -g && learnpack plugins:install @learnpack/html@1.1.1 +RUN npm i @learnpack/learnpack@2.1.20 -g && learnpack plugins:install @learnpack/html@1.1.1 From 5f9ff744e909b2a16d2980e328279a56c8887a14 Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez <56565994+tommygonzaleza@users.noreply.github.com> Date: Tue, 23 Aug 2022 11:04:55 -0400 Subject: [PATCH 157/491] Update .gitpod.Dockerfile --- .gitpod.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile index e3b99e1b..8409faba 100644 --- a/.gitpod.Dockerfile +++ b/.gitpod.Dockerfile @@ -4,4 +4,4 @@ FROM gitpod/workspace-full:latest USER gitpod RUN npm i jest@24.8.0 -g -RUN npm i @learnpack/learnpack@2.1.20 -g && learnpack plugins:install @learnpack/html@1.1.1 +RUN npm i @learnpack/learnpack@2.1.20 -g && learnpack plugins:install learnpack-html@0.0.20 From 96d52feddb8795891852c6859ca1e172c5eafd69 Mon Sep 17 00:00:00 2001 From: dsilva06 Date: Fri, 26 Aug 2022 18:35:39 +0000 Subject: [PATCH 158/491] learnpack -v --- .github/workflows/learnpack-audit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/learnpack-audit.yml b/.github/workflows/learnpack-audit.yml index 70f416ee..52644d89 100644 --- a/.github/workflows/learnpack-audit.yml +++ b/.github/workflows/learnpack-audit.yml @@ -25,5 +25,5 @@ jobs: uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} - - run: npm install learnpack -g + - run: npm install @learnpack/learnpack@latest -g - run: learnpack audit \ No newline at end of file From 91383e52daec0aea06c72edd4694db124f5e8ebc Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez Date: Mon, 29 Aug 2022 21:58:24 +0000 Subject: [PATCH 159/491] Some improvements added to the tests --- exercises/01-Hello-World/index.html | 2 +- exercises/01-Hello-World/solution.hide.html | 8 ++++---- exercises/01-Hello-World/test.js | 4 ++++ exercises/01.1-The-Style-Tag/test.js | 4 +++- exercises/01.2-Your-First-Style/tests.js | 4 ++++ exercises/01.3-Your-Second-Style/index.html | 3 +++ exercises/01.3-Your-Second-Style/tests.js | 4 ++++ .../02-Separate-Stylesheet/solution.hide.css | 6 ++---- exercises/02-Separate-Stylesheet/tests.js | 9 +++++---- exercises/02.1-Background/tests.js | 1 + exercises/04.1-Combined-Rules/tests.js | 19 ++++++++++++------- exercises/04.2-Apply-several-classes/test.js | 14 ++++---------- learn.json | 4 ++-- 13 files changed, 49 insertions(+), 33 deletions(-) diff --git a/exercises/01-Hello-World/index.html b/exercises/01-Hello-World/index.html index 03ae0584..93d4ce1c 100644 --- a/exercises/01-Hello-World/index.html +++ b/exercises/01-Hello-World/index.html @@ -1 +1 @@ - \ No newline at end of file + diff --git a/exercises/01-Hello-World/solution.hide.html b/exercises/01-Hello-World/solution.hide.html index ce422661..b2ad5b0e 100644 --- a/exercises/01-Hello-World/solution.hide.html +++ b/exercises/01-Hello-World/solution.hide.html @@ -1,7 +1,7 @@ -Click me to open google.com \ No newline at end of file +Click me to open google.com diff --git a/exercises/01-Hello-World/test.js b/exercises/01-Hello-World/test.js index fca18c3f..fbe19bf5 100644 --- a/exercises/01-Hello-World/test.js +++ b/exercises/01-Hello-World/test.js @@ -10,20 +10,24 @@ const a = document.querySelector("a"); test("There should be an anchor tag", ()=>{ expect(a).toBeTruthy() }) + test("The anchor tag should be pink", ()=>{ let styles = window.getComputedStyle(a); expect(styles["color"]).toBe("pink"); }); + test("There should be a href attribute pointing to 'https://google.com'", ()=>{ let href = a.getAttribute('href'); expect(href).toBeTruthy(); expect(href).toBe("https://google.com"); }) + test("There should be a target attribute pointing to '_blank'", ()=>{ let target = a.getAttribute('target'); expect(target).toBeTruthy(); expect(target).toBe("_blank"); }) + test("The anchor tag should not contains any inline style", ()=>{ let emptyBodyInlineStyle = {}; expect(a.style._values).toEqual(emptyBodyInlineStyle); diff --git a/exercises/01.1-The-Style-Tag/test.js b/exercises/01.1-The-Style-Tag/test.js index bf66dc21..a4be505b 100644 --- a/exercises/01.1-The-Style-Tag/test.js +++ b/exercises/01.1-The-Style-Tag/test.js @@ -8,12 +8,14 @@ jest.dontMock('fs'); const p = document.querySelector("p"); test("There should be a p tag", ()=>{ - expect(p).toBeTruthy() + expect(p).toBeTruthy(); }) + test("The p tag color should be blue", ()=>{ let styles = window.getComputedStyle(p); expect(styles["color"]).toBe("blue"); }); + test("The p tag should not contain any inline style", ()=>{ let emptyBodyInlineStyle = {}; expect(p.style._values).toEqual(emptyBodyInlineStyle); diff --git a/exercises/01.2-Your-First-Style/tests.js b/exercises/01.2-Your-First-Style/tests.js index ddbfad7f..0eabdf65 100644 --- a/exercises/01.2-Your-First-Style/tests.js +++ b/exercises/01.2-Your-First-Style/tests.js @@ -7,19 +7,23 @@ jest.dontMock('fs'); describe("All the styles should be applied", ()=>{ const a = document.querySelector("a"); + test("The anchor tag should be yellow", ()=>{ let styles = window.getComputedStyle(a); expect(styles["color"]).toBe("yellow"); }); + test("The body tag should not contain any inline style", ()=>{ let bodyInlineStyle = document.getElementsByTagName("body"); let emptyBodyInlineStyle = {}; expect(bodyInlineStyle[0].style._values).toEqual(emptyBodyInlineStyle); }); + test("The anchor tag should not contain any inline style", ()=>{ let emptyBodyInlineStyle = {}; expect(a.style._values).toEqual(emptyBodyInlineStyle); }); + test("You should not change the existing head tag elements", ()=>{ let head = document.querySelector('head') expect(head).toBeTruthy() diff --git a/exercises/01.3-Your-Second-Style/index.html b/exercises/01.3-Your-Second-Style/index.html index 998d973a..03e672a3 100644 --- a/exercises/01.3-Your-Second-Style/index.html +++ b/exercises/01.3-Your-Second-Style/index.html @@ -3,6 +3,9 @@ diff --git a/exercises/01.3-Your-Second-Style/tests.js b/exercises/01.3-Your-Second-Style/tests.js index e7e8ea61..147aabc5 100644 --- a/exercises/01.3-Your-Second-Style/tests.js +++ b/exercises/01.3-Your-Second-Style/tests.js @@ -7,17 +7,21 @@ jest.dontMock('fs'); describe("All the styles should be applied", ()=>{ const body = document.querySelector("body"); + test("The background should be blue", ()=>{ let styles = window.getComputedStyle(body); expect(styles["background"]).toBe("blue"); }); + test("The body tag should not contains any inline style", ()=>{ let emptyBodyInlineStyle = {}; expect(body.style._values).toEqual(emptyBodyInlineStyle); }); + test("You should not change the existing head tag elements", ()=>{ let head = document.querySelector('head') expect(head).toBeTruthy() + let meta = head.querySelector("meta") expect(meta).toBe(null) }) diff --git a/exercises/02-Separate-Stylesheet/solution.hide.css b/exercises/02-Separate-Stylesheet/solution.hide.css index 779c2c33..5250e305 100644 --- a/exercises/02-Separate-Stylesheet/solution.hide.css +++ b/exercises/02-Separate-Stylesheet/solution.hide.css @@ -2,8 +2,6 @@ 1. Select the body tag. 2. Add the background rule equal to blue. */ - body { +body { background: blue; - background-size: contain; - background-repeat: inherit; -} \ No newline at end of file +} diff --git a/exercises/02-Separate-Stylesheet/tests.js b/exercises/02-Separate-Stylesheet/tests.js index d07034b6..f36df975 100644 --- a/exercises/02-Separate-Stylesheet/tests.js +++ b/exercises/02-Separate-Stylesheet/tests.js @@ -8,14 +8,14 @@ jest.dontMock("fs"); describe("All the styles should be applied", ()=>{ const link = document.querySelector("link"); - const body = document.querySelector("body") + const body = document.querySelector("body"); + test("The body tag should not contains any inline style", ()=>{ - document.querySelector( - "head" - ).innerHTML=``; + document.querySelector("head").innerHTML = ``; let emptyBodyInlineStyle={}; expect(body.style._values).toEqual(emptyBodyInlineStyle) }); + test("You should not change the existing head tag elements", ()=>{ let head = document.querySelector('head') expect(head).toBeTruthy() @@ -26,6 +26,7 @@ describe("All the styles should be applied", ()=>{ let href = link.getAttribute("href") expect(href).toEqual('./styles.css') }); + test("Your body tag background color should be blue", ()=>{ let styles = window.getComputedStyle(body) expect(styles["background-color"]).toBe("blue") diff --git a/exercises/02.1-Background/tests.js b/exercises/02.1-Background/tests.js index 375aa45c..b223105f 100644 --- a/exercises/02.1-Background/tests.js +++ b/exercises/02.1-Background/tests.js @@ -36,6 +36,7 @@ describe("All the styles should be applied", ()=>{ let styles = window.getComputedStyle(body); expect(styles["background-repeat"]).toBe("inherit"); }); + test("You should not change the existing head tag elements", ()=>{ let head = document.querySelector('head') expect(head).toBeTruthy() diff --git a/exercises/04.1-Combined-Rules/tests.js b/exercises/04.1-Combined-Rules/tests.js index d3540732..c6f62acc 100644 --- a/exercises/04.1-Combined-Rules/tests.js +++ b/exercises/04.1-Combined-Rules/tests.js @@ -9,7 +9,8 @@ jest.dontMock("fs"); describe("All the styles should be applied", ()=> { const body = document.querySelector("body"); const link = document.querySelector("link"); - const title = document.querySelector('title') + const title = document.querySelector('title'); + test("The body tag should not contains any inline style", ()=> { document.querySelector( "head" @@ -17,6 +18,7 @@ describe("All the styles should be applied", ()=> { let emptyBodyInlineStyle = {}; expect(body.style._values).toEqual(emptyBodyInlineStyle); }); + test("the width should be '50px'", ()=> { // get computed styles of any element you like document.querySelector( @@ -24,16 +26,17 @@ describe("All the styles should be applied", ()=> { ).innerHTML = ``; let cssArray = document.styleSheets[0].cssRules; - // console.log("$$$:", cssArray) let orangeHoverSelector = ""; + for (let i = 0; i < cssArray.length; i++) { if (cssArray[i].selectorText === ".myBox") { orangeHoverSelector = cssArray[i].style.width; } } - expect(orangeHoverSelector).toBe('50px'); + expect(orangeHoverSelector).toBe('50px'); }); + test("the height should be '50px'", ()=> { // get computed styles of any element you like document.querySelector( @@ -41,15 +44,15 @@ describe("All the styles should be applied", ()=> { ).innerHTML = ``; let cssArray = document.styleSheets[0].cssRules; - // console.log("$$$:", cssArray) let orangeHoverSelector = ""; + for (let i = 0; i < cssArray.length; i++) { if (cssArray[i].selectorText === ".myBox") { orangeHoverSelector = cssArray[i].style.height; } } - expect(orangeHoverSelector).toBe('50px'); + expect(orangeHoverSelector).toBe('50px'); }); test("the background-size should be contain", ()=> { @@ -58,22 +61,23 @@ describe("All the styles should be applied", ()=> { ).innerHTML = ``; let cssArray = document.styleSheets[0].cssRules; - // console.log("$$$:", cssArray) let orangeHoverSelector = ""; + for (let i = 0; i < cssArray.length; i++) { if (cssArray[i].selectorText === ".myBox") { orangeHoverSelector = cssArray[i].style['background-size']; } } + expect(orangeHoverSelector).toBe('contain'); }); + test("the background should include the shorthand property", ()=> { document.querySelector( "head" ).innerHTML = ``; let cssArray = document.styleSheets[0].cssRules; - console.log("$$$:", cssArray) let orangeHoverSelector = ""; let backImg = ""; let backColor = ""; @@ -125,6 +129,7 @@ describe("All the styles should be applied", ()=> { expect(padBottom).toBeFalsy(); expect(padLeft).toBeFalsy(); }); + test("You should not change the existing head tag elements", ()=> { let head = document.querySelector('head') expect(head).toBeTruthy() diff --git a/exercises/04.2-Apply-several-classes/test.js b/exercises/04.2-Apply-several-classes/test.js index 2c6ed0d1..6d1d608e 100644 --- a/exercises/04.2-Apply-several-classes/test.js +++ b/exercises/04.2-Apply-several-classes/test.js @@ -6,19 +6,13 @@ document.documentElement.innerHTML = html.toString(); jest.dontMock("fs"); describe("You should change the class on the div tag", () => { - const div = document.querySelectorAll("div") - test("There should only be 1 div tag", () => { - expect(div.length).toBe(1) - }); + const div = document.querySelector("div"); test("The div class should NOT have the spades class", () => { - div.forEach(e=>{ - expect(e.classList.contains("spade")).toBe(false) - }) + expect(div.classList.contains("spade")).toBe(false); }); + test("The div class should have the heart class", () => { - div.forEach(e=>{ - expect(e.classList.contains("heart")).toBe(true) - }) + expect(div.classList.contains("heart")).toBe(true); }); }); diff --git a/learn.json b/learn.json index 709ede73..dc56301e 100644 --- a/learn.json +++ b/learn.json @@ -11,8 +11,8 @@ "difficulty": "easy", "video-solutions": true, "graded": true, - "disabledActions": ["test"], - "disableGrading": true, + "disabledActions": [], + "disableGrading": false, "editor": { "version": "1.0.73" } From 0da679be9a3468d73d8561a5a1f9f44bba223945 Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez <56565994+tommygonzaleza@users.noreply.github.com> Date: Thu, 1 Sep 2022 17:22:44 -0400 Subject: [PATCH 160/491] Update learn.json --- learn.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/learn.json b/learn.json index 79a3e90a..709ede73 100644 --- a/learn.json +++ b/learn.json @@ -11,9 +11,9 @@ "difficulty": "easy", "video-solutions": true, "graded": true, - "disabledActions": [], - "disableGrading": false, + "disabledActions": ["test"], + "disableGrading": true, "editor": { "version": "1.0.73" } -} \ No newline at end of file +} From 7c58c65296e84fca82607fda95085195f8e27d7e Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez Date: Thu, 1 Sep 2022 21:57:15 +0000 Subject: [PATCH 161/491] Some solutions and tests modified --- exercises/04.3-id-Selector/index.html | 2 +- exercises/04.3-id-Selector/test.js | 30 +++++++++------- exercises/05-Specificity/README.es.md | 2 +- exercises/05-Specificity/README.md | 2 +- exercises/05-Specificity/styles.css | 7 ++-- exercises/05-Specificity/tests.js | 12 +++---- exercises/06-Practicing-Rules/index.html | 6 ++-- exercises/06-Practicing-Rules/tests.js | 36 +++++++++----------- exercises/07-Very-Specific-Rules/styles.css | 12 +++++++ exercises/08-Rounded-Image/solution.hide.css | 6 +--- exercises/09-Anchor-Styles/index.html | 2 +- exercises/09-Anchor-Styles/solution.hide.css | 2 +- exercises/10-Your-Own-Font/tests.js | 3 -- exercises/11-Font-Awesome-Icons/tests.js | 2 +- exercises/13-Anchor-Like-Button/tests.js | 11 +++--- learn.json | 4 +-- 16 files changed, 68 insertions(+), 71 deletions(-) diff --git a/exercises/04.3-id-Selector/index.html b/exercises/04.3-id-Selector/index.html index 5b9a773d..a7964559 100644 --- a/exercises/04.3-id-Selector/index.html +++ b/exercises/04.3-id-Selector/index.html @@ -8,6 +8,6 @@ - I should look like a button + I should look like a button diff --git a/exercises/04.3-id-Selector/test.js b/exercises/04.3-id-Selector/test.js index 9277e129..cbae3b3f 100644 --- a/exercises/04.3-id-Selector/test.js +++ b/exercises/04.3-id-Selector/test.js @@ -8,25 +8,29 @@ jest.dontMock('fs'); const span = document.querySelector("span"); const link = document.querySelector("link"); -test("There should be a span tag", ()=>{ +test("There should be a span tag", () => { expect(span).toBeTruthy() -}) -test("The span tag should have id 'button1'", ()=>{ +}); + +test("The span tag should have id 'button1'", () => { + expect(span).toBeTruthy(); let id = span.id - expect(id).toBe('button1') + expect(id).toBe('button1'); }); -test("The span tag should not contain any inline style", ()=>{ + +test("The span tag should not contain any inline style", () => { let emptyBodyInlineStyle = {}; + expect(span).toBeTruthy() expect(span.style._values).toEqual(emptyBodyInlineStyle); }); -test("You should not change the existing head tag elements", ()=>{ - let head = document.querySelector('head') - expect(head).toBeTruthy() +test("You should not change the existing head tag elements", () => { + let head = document.querySelector('head'); + expect(head).toBeTruthy(); - let meta = head.querySelector("meta") - expect(meta).toBe(null) + let meta = head.querySelector("meta"); + expect(meta).toBe(null); - const href = link.getAttribute("href") - expect(href).toBe('./styles.css') - }); \ No newline at end of file + const href = link.getAttribute("href"); + expect(href).toBe('./styles.css'); +}); \ No newline at end of file diff --git a/exercises/05-Specificity/README.es.md b/exercises/05-Specificity/README.es.md index 890c542d..a87b6e2d 100644 --- a/exercises/05-Specificity/README.es.md +++ b/exercises/05-Specificity/README.es.md @@ -9,7 +9,7 @@ Se trata del nivel de especificidad. Si especificas que tu `div` con `id="thirdi ## 📝 Instrucciones: -1. Anula el color de fondo (`background-color`) de `#thirditem` sin eliminar ningún código CSS, simplemente agrega al CSS una regla más específica al final del documento para anular el color de fondo a verde. +1. Anula el color de fondo (`background`) de `#thirditem` sin eliminar ningún código CSS, simplemente agrega al CSS una regla más específica al final del documento para anular el color de fondo a verde. ## 💡 Pista: diff --git a/exercises/05-Specificity/README.md b/exercises/05-Specificity/README.md index bbb243ad..db381074 100644 --- a/exercises/05-Specificity/README.md +++ b/exercises/05-Specificity/README.md @@ -13,7 +13,7 @@ It's all about the level of Specificity. If you specify that your `div` with `id ## 📝 Instrucciones: -1. Override the `background-color` of `#thirditem` without deleting any css code, simply append to the css a more specific rule at the end of the document to override the background-color to green. +1. Override the `background` of `#thirditem` without deleting any css code, simply append to the css a more specific rule at the end of the document to override the background-color to green. ### 💡 Hint: diff --git a/exercises/05-Specificity/styles.css b/exercises/05-Specificity/styles.css index db471c2b..c4e96d25 100644 --- a/exercises/05-Specificity/styles.css +++ b/exercises/05-Specificity/styles.css @@ -1,9 +1,8 @@ -ul li{ +ul li { background: blue; } -#thirditem{ +#thirditem { background: yellow; -} +} /****** DON NOT EDIT ANYTHING ABOVE THIS LINE ****/ - \ No newline at end of file diff --git a/exercises/05-Specificity/tests.js b/exercises/05-Specificity/tests.js index 9e6d52d6..a22fab68 100644 --- a/exercises/05-Specificity/tests.js +++ b/exercises/05-Specificity/tests.js @@ -21,17 +21,15 @@ describe("All the styles should be applied", function () { let title = head.querySelector('title') expect(title).not.toBe(null) }) - + test("You should not delete or edit the existing code", function () { + document.querySelector("head").innerHTML = ``; - document.querySelector( - "head" - ).innerHTML = ``; let cssArray = document.styleSheets[0].cssRules[0].selectorText; - let cssArrayBackground = document.styleSheets[0].cssRules[0].style.background - console.log("back:", cssArrayBackground) + let cssArrayBackground = document.styleSheets[0].cssRules[0].style.background; let thirdItSelector = document.styleSheets[0].cssRules[1].selectorText; - let thirdItBackground = document.styleSheets[0].cssRules[1].style.background + let thirdItBackground = document.styleSheets[0].cssRules[1].style.background; + expect(thirdItSelector).toBe("#thirditem"); expect(thirdItBackground).toBe("yellow"); expect(cssArray).toBe("ul li"); diff --git a/exercises/06-Practicing-Rules/index.html b/exercises/06-Practicing-Rules/index.html index 4119acb5..db2eb563 100644 --- a/exercises/06-Practicing-Rules/index.html +++ b/exercises/06-Practicing-Rules/index.html @@ -21,9 +21,7 @@

    3 reasons you know you are learning

    3 reasons you know love what you are learning

    • Time passes fast.
    • -
    • - You are anxious to finish this excercise and start the next one. -
    • +
    • You are anxious to finish this excercise and start the next one.
    • Is 12am and you don't want to go to sleep.

    @@ -31,4 +29,4 @@

    3 reasons you know love what you are learning

    click here

    - \ No newline at end of file + diff --git a/exercises/06-Practicing-Rules/tests.js b/exercises/06-Practicing-Rules/tests.js index 5c2e9903..9bb32a78 100644 --- a/exercises/06-Practicing-Rules/tests.js +++ b/exercises/06-Practicing-Rules/tests.js @@ -6,12 +6,12 @@ document.documentElement.innerHTML = html.toString(); jest.dontMock('fs'); -describe("All the styles should be applied", ()=> { +describe("All the styles should be applied", () => { let meta = document.querySelector("meta") let link = document.querySelector("link") let title = document.querySelector('title') - test("the background should match", ()=> { + test("the background should match", () => { document.querySelector( "head" ).innerHTML = ``; @@ -21,15 +21,15 @@ describe("All the styles should be applied", ()=> { `url(../../.learn/assets/background-vertical.jpg?raw=true) repeat-y` ); }); - test("the font-family should be 'Times New Roman'", ()=> { + test("the font-family should be 'Times New Roman'", () => { document.querySelector( "head" ).innerHTML = ``; let body = document.querySelector("body"); let styles = window.getComputedStyle(body); - expect(styles["font-family"]).toBe("\"Times New Roman\""); + expect(styles["font-family"].toLowerCase()).toBe("\"times new roman\""); }); - test("the padding-left should be '20px'", ()=> { + test("the padding-left should be '20px'", () => { document.querySelector( "head" ).innerHTML = ``; @@ -37,16 +37,16 @@ describe("All the styles should be applied", ()=> { let styles = window.getComputedStyle(body); expect(styles["padding-left"]).toBe("20px"); }); - test("the font-family in the H1 Tag should be 'Courier'", ()=> { + test("the font-family in the H1 Tag should be 'Courier'", () => { document.querySelector( "head" ).innerHTML = ``; let h1Tag = document.querySelector("h1"); let h1TagStyles = window.getComputedStyle(h1Tag); // get computed styles of any element you like - expect(h1TagStyles["font-family"]).toBe("\"Courier\""); + expect(h1TagStyles["font-family"].toLowerCase()).toBe("\"courier\""); }); - test("the color in the H1 Tag should be 'red'", ()=> { + test("the color in the H1 Tag should be 'red'", () => { document.querySelector( "head" ).innerHTML = ``; @@ -55,7 +55,7 @@ describe("All the styles should be applied", ()=> { // get computed styles of any element you like expect(h1TagStyles["color"]).toBe("red"); }); - test("the text-align in the H1 Tag should be 'center'", ()=> { + test("the text-align in the H1 Tag should be 'center'", () => { document.querySelector( "head" ).innerHTML = ``; @@ -64,7 +64,7 @@ describe("All the styles should be applied", ()=> { // get computed styles of any element you like expect(h1TagStyles["text-align"]).toBe("center"); }); - test("the text-decoration in the H2 Tag should be 'underline'", ()=> { + test("the text-decoration in the H2 Tag should be 'underline'", () => { document.querySelector( "head" ).innerHTML = ``; @@ -73,7 +73,7 @@ describe("All the styles should be applied", ()=> { let h2TagStyles = window.getComputedStyle(h2Tag); expect(h2TagStyles["text-decoration"]).toBe("underline"); }); - test("the padding in the #id1 Tag should be '5px'", ()=> { + test("the padding in the #id1 Tag should be '5px'", () => { document.querySelector( "head" ).innerHTML = ``; @@ -82,40 +82,36 @@ describe("All the styles should be applied", ()=> { let idTagStyles = window.getComputedStyle(idTag); expect(idTagStyles["padding"]).toBe("5px"); }); - test("the background-color in the #id1 Tag should be 'semi transparent white'", ()=> { + test("the background-color in the #id1 Tag should be 'semi transparent white'", () => { document.querySelector( "head" ).innerHTML = ``; // get computed styles of any element you like const idTag = document.querySelector("#id1"); let idTagStyles = window.getComputedStyle(idTag); - console.log("$$$:", idTagStyles) expect(idTagStyles["background-color"]).toBe("rgba(255, 255, 255, 0.2)"); }); - test("The a hover underline should be removed", ()=> { + test("The a hover underline should be removed", () => { document.querySelector( "head" ).innerHTML = ``; let cssArray = document.styleSheets[0].cssRules; - // console.log("$$$:", cssArray) let orangeHoverSelector = ""; for (let i = 0; i < cssArray.length; i++) { if (cssArray[i].selectorText === "a:hover") { orangeHoverSelector = cssArray[i].style['text-decoration']; - console.log("$$$:", orangeHoverSelector) } } expect(orangeHoverSelector).toBe("none"); }); - test("The a hover color should be green", ()=> { + test("The a hover color should be green", () => { document.querySelector( "head" ).innerHTML = ``; - let cssArray = document.styleSheets[0].cssRules; - console.log("$$$:", cssArray[0]) let orangeHoverSelector = ""; + for (let i = 0; i < cssArray.length; i++) { if (cssArray[i].selectorText === "a:hover") { orangeHoverSelector = cssArray[i].style.color; @@ -123,7 +119,7 @@ describe("All the styles should be applied", ()=> { } expect(orangeHoverSelector).toBe('green'); }); - test("You should not change the existing head tag elements", ()=> { + test("You should not change the existing head tag elements", () => { let head = document.querySelector('head') expect(head).toBeTruthy() diff --git a/exercises/07-Very-Specific-Rules/styles.css b/exercises/07-Very-Specific-Rules/styles.css index 300d0677..55fb5ff4 100644 --- a/exercises/07-Very-Specific-Rules/styles.css +++ b/exercises/07-Very-Specific-Rules/styles.css @@ -1,5 +1,17 @@ /** Insert your code here **/ +ul li { + color: red !important; +} + +ol li:nth-child(2) { + background-color: green; +} + +tr:nth-child(odd) { + background: yellow; +} + /*********** READ ONLY BLOCK ****** You CANNOT UPDATE anything from here on, only add lines of code on top of this lines diff --git a/exercises/08-Rounded-Image/solution.hide.css b/exercises/08-Rounded-Image/solution.hide.css index 56819f66..2ddc0eed 100644 --- a/exercises/08-Rounded-Image/solution.hide.css +++ b/exercises/08-Rounded-Image/solution.hide.css @@ -2,12 +2,8 @@ body { background: #bdbdbd; } .rounded { - border-radius: 100%; - background-image: url("https://github.com/4GeeksAcademy/css-tutorial-exercises-course/blob/master/.learn/assets/einstein.png?raw=true"); - background-position-x: center; - background-position-y: center; - background-size: contain; object-fit: cover; width: 200px; height: 200px; + border-radius: 100%; } diff --git a/exercises/09-Anchor-Styles/index.html b/exercises/09-Anchor-Styles/index.html index 984ca01e..30e00691 100644 --- a/exercises/09-Anchor-Styles/index.html +++ b/exercises/09-Anchor-Styles/index.html @@ -6,7 +6,7 @@ 09 Anchor Styles - + Click me diff --git a/exercises/09-Anchor-Styles/solution.hide.css b/exercises/09-Anchor-Styles/solution.hide.css index b3e6a36b..101d281c 100644 --- a/exercises/09-Anchor-Styles/solution.hide.css +++ b/exercises/09-Anchor-Styles/solution.hide.css @@ -12,4 +12,4 @@ a.threeDimension:active { /* your code here*/ border-color: #000 #aaa #aaa #000; -} \ No newline at end of file +} diff --git a/exercises/10-Your-Own-Font/tests.js b/exercises/10-Your-Own-Font/tests.js index 52e13aa6..e86491c0 100644 --- a/exercises/10-Your-Own-Font/tests.js +++ b/exercises/10-Your-Own-Font/tests.js @@ -17,11 +17,9 @@ describe("All the styles should be applied", ()=>{ // get computed styles of any element you like let cssArray = document.styleSheets[0].cssRules; - // console.log("%%% ", cssArray) let orangeHoverSelector = ""; for (let i = 0; i < cssArray.length; i++) { if (cssArray[i].selectorText === ".myTitle") { - // console.log("%%% ", cssArray[i].selectorText) orangeHoverSelector = cssArray[i].style['font-family']; } } @@ -35,7 +33,6 @@ describe("All the styles should be applied", ()=>{ }); test("The link should be included in the head tag", ()=>{ // let headContent=document.getElementsByTagName("*") - // console.log("###", headContent[1].innerHTML) expect(link.length).toBe(2); }); diff --git a/exercises/11-Font-Awesome-Icons/tests.js b/exercises/11-Font-Awesome-Icons/tests.js index f7d8cf6e..2b717fd5 100644 --- a/exercises/11-Font-Awesome-Icons/tests.js +++ b/exercises/11-Font-Awesome-Icons/tests.js @@ -20,8 +20,8 @@ describe("All the styles should be applied", ()=>{ expect(document.querySelectorAll("i").length).toBe(3); }); test(" LI innerHTML exist", ()=>{ - const li = document.querySelectorAll("li"); expect(document.querySelector("li")).toBeTruthy(); + const li = document.querySelectorAll("li"); for (let i = 0; i < li.length; i++) { expect(li[i].innerHTML).toBeTruthy(); } diff --git a/exercises/13-Anchor-Like-Button/tests.js b/exercises/13-Anchor-Like-Button/tests.js index fcc69fa4..d93dc049 100644 --- a/exercises/13-Anchor-Like-Button/tests.js +++ b/exercises/13-Anchor-Like-Button/tests.js @@ -6,9 +6,6 @@ document.documentElement.innerHTML = html.toString(); jest.dontMock('fs'); - - - describe("All the styles should be applied", ()=>{ const meta = document.querySelector("meta") const title = document.querySelector('title') @@ -23,7 +20,7 @@ describe("All the styles should be applied", ()=>{ expect(classTagStyles["padding"]).toBe("10px"); }); - test("the border radius should be '4px'", ()=>{ + test("the border radius should be '4px'", ()=>{ document.querySelector( "head" @@ -32,7 +29,7 @@ describe("All the styles should be applied", ()=>{ let classTagStyles = window.getComputedStyle(divTag); expect(classTagStyles["border-radius"]).toBe("4px"); }); - test("the background should be 'orange'", ()=>{ + test("the background should be 'orange'", ()=>{ document.querySelector( "head" @@ -41,7 +38,7 @@ describe("All the styles should be applied", ()=>{ let classTagStyles = window.getComputedStyle(divTag); expect(classTagStyles["background"]).toBe("orange"); }); - test("the underline should to be removed", ()=>{ + test("the underline should be removed", ()=>{ document.querySelector( "head" @@ -67,7 +64,7 @@ describe("All the styles should be applied", ()=>{ expect(orangeHoverSelector).toBe("darkorange"); }); - test("You should be careful with the specifity", ()=>{ + test("You should be careful with the specificity", ()=>{ document.querySelector( "head" ).innerHTML = ``; diff --git a/learn.json b/learn.json index 709ede73..dc56301e 100644 --- a/learn.json +++ b/learn.json @@ -11,8 +11,8 @@ "difficulty": "easy", "video-solutions": true, "graded": true, - "disabledActions": ["test"], - "disableGrading": true, + "disabledActions": [], + "disableGrading": false, "editor": { "version": "1.0.73" } From e93d52b08be5ed2969029c1ed463ced88962ed8f Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Fri, 2 Sep 2022 20:05:14 +0000 Subject: [PATCH 162/491] reversed file to original state --- exercises/07-Very-Specific-Rules/styles.css | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/exercises/07-Very-Specific-Rules/styles.css b/exercises/07-Very-Specific-Rules/styles.css index 55fb5ff4..c77b84c2 100644 --- a/exercises/07-Very-Specific-Rules/styles.css +++ b/exercises/07-Very-Specific-Rules/styles.css @@ -1,16 +1,5 @@ /** Insert your code here **/ -ul li { - color: red !important; -} - -ol li:nth-child(2) { - background-color: green; -} - -tr:nth-child(odd) { - background: yellow; -} /*********** READ ONLY BLOCK ****** You CANNOT UPDATE anything from here on, From 92519aa558563baaf3db05267151932bd72863b5 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Mon, 5 Sep 2022 23:59:31 +0000 Subject: [PATCH 163/491] Added regex to check for important flag --- exercises/07-Very-Specific-Rules/tests.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/exercises/07-Very-Specific-Rules/tests.js b/exercises/07-Very-Specific-Rules/tests.js index 10b24a7e..66a759a2 100644 --- a/exercises/07-Very-Specific-Rules/tests.js +++ b/exercises/07-Very-Specific-Rules/tests.js @@ -11,19 +11,24 @@ describe("All the styles should be applied", ()=>{ const title = document.querySelector('title') const link = document.querySelector('link') - test("The ul li color has to be red", ()=>{ + test("The ul li color has to be red using !important", ()=>{ document.querySelector( "head" ).innerHTML = ``; + let cssArray = document.styleSheets[0].cssRules; - let orangeHoverSelector = ""; + let color = "" + for (let i = 0; i < cssArray.length; i++) { if (cssArray[i].selectorText === "ul li" || cssArray[i].selectorText === "ul > li") { - orangeHoverSelector = cssArray[i].style["color"]; + color = cssArray[i].cssText; } } - expect(orangeHoverSelector).toBe("red"); + let reg = new RegExp(/\s*color:\s*red\s*!important\s*;\s*/gm) + + expect(reg.test(color)).toBeTruthy(); }); + test("The ul second element background should be green", ()=>{ document.querySelector( "head" @@ -39,6 +44,7 @@ describe("All the styles should be applied", ()=>{ } expect(orangeHoverSelector).toBe("green"); }) + test("The odd rows of the table should have yellow background", ()=>{ document.querySelector( "head" @@ -63,8 +69,8 @@ describe("All the styles should be applied", ()=>{ let cssArray = document.styleSheets[0].cssRules[4].selectorText; expect(cssArray).toBe("ul li,\nol li"); expect(cssBody).toBe("body"); - } - ) + }) + test("You should not change the existing head tag elements", ()=>{ let head = document.querySelector('head') expect(head).toBeTruthy() @@ -76,4 +82,5 @@ describe("All the styles should be applied", ()=>{ expect(title).toBeTruthy() }) + }); \ No newline at end of file From d560a459118735b1040f52b5a9827ce9ebe4d065 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Tue, 6 Sep 2022 01:14:36 +0000 Subject: [PATCH 164/491] improved exercises --- exercises/08-Rounded-Image/solution.hide.css | 1 + 1 file changed, 1 insertion(+) diff --git a/exercises/08-Rounded-Image/solution.hide.css b/exercises/08-Rounded-Image/solution.hide.css index 2ddc0eed..31815f5c 100644 --- a/exercises/08-Rounded-Image/solution.hide.css +++ b/exercises/08-Rounded-Image/solution.hide.css @@ -3,6 +3,7 @@ body { } .rounded { object-fit: cover; + object-position: top; width: 200px; height: 200px; border-radius: 100%; From 854e0162ed69aefa201d6fa8b70644812b01e654 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Tue, 6 Sep 2022 01:15:14 +0000 Subject: [PATCH 165/491] improved instructions and provided additional documentation on object-fit --- exercises/08-Rounded-Image/README.es.md | 4 +++- exercises/08-Rounded-Image/README.md | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/exercises/08-Rounded-Image/README.es.md b/exercises/08-Rounded-Image/README.es.md index 956bcbb7..3e7e4c25 100644 --- a/exercises/08-Rounded-Image/README.es.md +++ b/exercises/08-Rounded-Image/README.es.md @@ -16,6 +16,8 @@ El problema con este enfoque es que solo funciona para imágenes cuadradas... La ## 💡 Pista: -+ Si la imagen es más grande que el `div` y quieres centrarla o enfocarte en una zona en particular puedes utilizar `object-position`. ++ Si la imagen es más grande que su contenedor y quieres centrarla o enfocarte en una zona en particular puedes utilizar `object-position`. + En este articulo puedes leer más [sobre la propiedad object fit](https://css-tricks.com/on-object-fit-and-object-position/) + ++ Adicionalmente, puedes [leer la documentación de object-position](https://developer.mozilla.org/en-US/docs/Web/CSS/object-position) y [la documentación de object-fit](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit) diff --git a/exercises/08-Rounded-Image/README.md b/exercises/08-Rounded-Image/README.md index 7fedd48e..7cedf6b1 100644 --- a/exercises/08-Rounded-Image/README.md +++ b/exercises/08-Rounded-Image/README.md @@ -15,7 +15,8 @@ The obvious way create a rounded profile picture is to create an image tag and a ## 💡 Hint: -+ If the image ends up being bigger than the `div` (or with different proportions) you can adjust the `object-position` to choose what part of the image you want to display inside of the circle. ++ If the image ends up being bigger than its container (or with different proportions) you can adjust the `object-position` to choose what part of the image you want to display inside of the circle. + You can also read [this great article about object fit](https://css-tricks.com/on-object-fit-and-object-position/) ++ Additionally you can [read the documentation on object-position](https://developer.mozilla.org/en-US/docs/Web/CSS/object-position) and [the documentation on object-fit](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit) \ No newline at end of file From 3047ec2a1e6dd7ce094b06356701ae615d4e03d9 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Tue, 6 Sep 2022 01:15:53 +0000 Subject: [PATCH 166/491] deleted unnecessary tests, added tests to check for actual solution, and improved code format --- exercises/08-Rounded-Image/tests.js | 94 +++++++++++++---------------- 1 file changed, 43 insertions(+), 51 deletions(-) diff --git a/exercises/08-Rounded-Image/tests.js b/exercises/08-Rounded-Image/tests.js index c03d1580..adcba6f3 100644 --- a/exercises/08-Rounded-Image/tests.js +++ b/exercises/08-Rounded-Image/tests.js @@ -11,73 +11,65 @@ describe("All the styles should be applied", () => { const title = document.querySelector('title') const link = document.querySelector('link') - test("The tag has to be removed", () => { - document.querySelector( - "head" - ).innerHTML = ``; - expect(document.querySelector("img")).toBeFalsy(); - }); - test("The
    tag should exists", () => { - document.querySelector( - "head" - ).innerHTML = ``; - expect(document.querySelector("div")).toBeTruthy(); - }); - test("the width in the div Tag should be '200px'", () => { - // get computed styles of any element you like - document.querySelector( - "head" - ).innerHTML = ``; - const divTag = document.querySelector("div"); - let idTagStyles = window.getComputedStyle(divTag); - expect(idTagStyles["width"]).toBe("200px"); - }); - test("the height in the div Tag should be '200px'", () => { - // get computed styles of any element you like - document.querySelector( - "head" - ).innerHTML = ``; - const divTag = document.querySelector("div"); - let idTagStyles = window.getComputedStyle(divTag); - expect(idTagStyles["height"]).toBe("200px"); - }); - test("the border radius in the div Tag should be '100%'", () => { - // get computed styles of any element you like + const img = document.querySelector(".rounded") + + test("the img tag should exist", () => { + expect(img).toBeTruthy(); + }) + + test("the width in the img Tag should be equal to its height and vice versa", () => { document.querySelector( "head" ).innerHTML = ``; - const divTag = document.querySelector("div"); - let idTagStyles = window.getComputedStyle(divTag); - expect(idTagStyles["border-radius"]).toBe("100%"); + + let cssArray = document.styleSheets[0].cssRules; + + let width = ""; + let height = ""; + + for (let i = 0; i < cssArray.length; i++) { + if (cssArray[i].selectorText === ".rounded") { + width = cssArray[i].style["width"]; + height = cssArray[i].style["height"]; + } + } + + // checks if styles return empty string "" or undefined + expect(width).toBeTruthy(); + expect(height).toBeTruthy(); + + expect(width).toBe(height); + expect(height).toBe(width); }); - test("the background position x in the div Tag should be 'center'", () => { - // get computed styles of any element you like + + test("the border radius of the img Tag should be '100%'", () => { document.querySelector( "head" ).innerHTML = ``; - const divTag = document.querySelector("div"); - let idTagStyles = window.getComputedStyle(divTag); - expect(idTagStyles["background-position-x"]).toBe("center"); + + let imgStyle = window.getComputedStyle(img); + expect(imgStyle["border-radius"]).toBe("100%"); }); - test("the background position y in the div Tag should be 'center'", () => { - // get computed styles of any element you like + + test("the object-fit value of the img Tag should be 'cover'", () => { document.querySelector( "head" ).innerHTML = ``; - const divTag = document.querySelector("div"); - let idTagStyles = window.getComputedStyle(divTag); - expect(idTagStyles["background-position-y"]).toBe("center"); + + let imgStyle = window.getComputedStyle(img); + expect(imgStyle["object-fit"]).toBe("cover"); }); - test("the background image in the div Tag should exists", () => { - // get computed styles of any element you like + + test("the object-position value of the img Tag should be 'top'", () => { document.querySelector( "head" ).innerHTML = ``; - const divTag = document.querySelector("div"); - let idTagStyles = window.getComputedStyle(divTag); - expect(idTagStyles["background-image"]).toBeTruthy(); + + let imgStyle = window.getComputedStyle(img); + expect(imgStyle["object-position"]).toBe("top"); }); - test("You should not change the existing head tag elements", ()=>{ + + test("You should not change the existing head tag elements", () => { let head = document.querySelector('head') expect(head).toBeTruthy() From 90e52397a48ad3572739790a95bf7b49d6b5c9aa Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez Date: Mon, 12 Sep 2022 21:33:26 +0000 Subject: [PATCH 167/491] Some details added to the tests --- exercises/04.3-id-Selector/index.html | 2 +- exercises/04.3-id-Selector/test.js | 1 + exercises/06-Practicing-Rules/README.es.md | 6 +-- exercises/06-Practicing-Rules/README.md | 6 +-- exercises/06-Practicing-Rules/index.html | 42 ++++++++++--------- .../06-Practicing-Rules/solution.hide.css | 1 - exercises/06-Practicing-Rules/styles.css | 2 +- exercises/06-Practicing-Rules/tests.js | 19 +-------- .../07-Very-Specific-Rules/solution.hide.css | 4 +- exercises/07-Very-Specific-Rules/styles.css | 1 + exercises/07-Very-Specific-Rules/tests.js | 2 +- exercises/08-Rounded-Image/tests.js | 9 ---- exercises/12-Relative-Length-EM-REM/tests.js | 17 -------- exercises/13-Anchor-Like-Button/tests.js | 25 ----------- 14 files changed, 37 insertions(+), 100 deletions(-) diff --git a/exercises/04.3-id-Selector/index.html b/exercises/04.3-id-Selector/index.html index a7964559..5b9a773d 100644 --- a/exercises/04.3-id-Selector/index.html +++ b/exercises/04.3-id-Selector/index.html @@ -8,6 +8,6 @@ - I should look like a button + I should look like a button diff --git a/exercises/04.3-id-Selector/test.js b/exercises/04.3-id-Selector/test.js index cbae3b3f..f9ea69cc 100644 --- a/exercises/04.3-id-Selector/test.js +++ b/exercises/04.3-id-Selector/test.js @@ -15,6 +15,7 @@ test("There should be a span tag", () => { test("The span tag should have id 'button1'", () => { expect(span).toBeTruthy(); let id = span.id + expect(id).toBeTruthy(); expect(id).toBe('button1'); }); diff --git a/exercises/06-Practicing-Rules/README.es.md b/exercises/06-Practicing-Rules/README.es.md index ee953a20..9cf27efa 100644 --- a/exercises/06-Practicing-Rules/README.es.md +++ b/exercises/06-Practicing-Rules/README.es.md @@ -10,11 +10,11 @@ 4. Haz todos los `h2` tengan subrayado. -5. Centra el `h1`. +5. Agrega un `left padding` a todo el documento de `20px` para que sea más fácil de leer. -6. Agrega un `left padding` a todo el documento de `20px` para que sea más fácil de leer. +6. Agrega un fondo blanco semitransparente (`semi-transparent background 0.2`) al primer párrafo de "3 reasons you know you are learning" para que sea más fácil de leer (tienes que usar `rgba` para esto). -7. Agrega un fondo blanco semitransparente (`semi-transparent background 0.2`) al primer párrafo de "3 reasons you know you are learning" para que sea más fácil de leer (tienes que usar `rgba` para esto), y luego aplica un `padding` de `5px` a todos los lados de ese párrafo. +7. Luego aplica un `padding` de `5px` a todos los lados de ese párrafo. 8. Cambia el color del `anchor` "hover" a verde (`green`) y elimina el subrayado (tienes que colocar el anchor para probarlo). diff --git a/exercises/06-Practicing-Rules/README.md b/exercises/06-Practicing-Rules/README.md index b8b63bcc..1f418bfc 100644 --- a/exercises/06-Practicing-Rules/README.md +++ b/exercises/06-Practicing-Rules/README.md @@ -14,11 +14,11 @@ tutorial: "https://www.youtube.com/watch?v=4wguurrl-lU" 4. Make all the `h2's` with an `underline`. -5. Center the `h1` to the middle. +5. Add a `left padding` to the whole document of `20px` to make it easier to read. -6. Add a `left padding` to the whole document of `20px` to make it easier to read. +6. Add a white `semi-transparent background (0.2)` to the `first paragraph` to make it easier to read (you have tu use `rgba` for that) and write down "3 reasons you know you are learning". -7. Add a white `semi-transparent background (0.2)` to the `first paragraph` to make it easier to read (you have tu use `rgba` for that) and write down "3 reasons you know you are learning". Then apply a `padding` of `5px` to all sides of that paragraph. +7. Then apply a `padding` of `5px` to all sides of that paragraph. 8. Change the `anchor` "hover" color to `green` and remove the underline (you have to actually hover the anchor to test it). diff --git a/exercises/06-Practicing-Rules/index.html b/exercises/06-Practicing-Rules/index.html index db2eb563..2651f781 100644 --- a/exercises/06-Practicing-Rules/index.html +++ b/exercises/06-Practicing-Rules/index.html @@ -8,25 +8,27 @@ -

    The learning essay

    -

    3 reasons you know you are learning

    -

    - We are going to explain in this pharagraph the 3 most comon signs that you should look into yourself to recognize if you are learning. -

    -
      -
    1. You are able to complete the exercises by yourself.
    2. -
    3. You understand what the teacher is talking about
    4. -
    5. Your are able to have conversations about the topic
    6. -
    -

    3 reasons you know love what you are learning

    -
      -
    • Time passes fast.
    • -
    • You are anxious to finish this excercise and start the next one.
    • -
    • Is 12am and you don't want to go to sleep.
    • -
    -

    - If you can't sleep, what better than watching videos of cats? - click here -

    +
    +

    The learning essay

    +

    3 reasons you know you are learning

    +

    + We are going to explain in this pharagraph the 3 most comon signs that you should look into yourself to recognize if you are learning. +

    +
      +
    1. You are able to complete the exercises by yourself.
    2. +
    3. You understand what the teacher is talking about
    4. +
    5. Your are able to have conversations about the topic
    6. +
    +

    3 reasons you know love what you are learning

    +
      +
    • Time passes fast.
    • +
    • You are anxious to finish this excercise and start the next one.
    • +
    • Is 12am and you don't want to go to sleep.
    • +
    +

    + If you can't sleep, what better than watching videos of cats? + click here +

    +
    diff --git a/exercises/06-Practicing-Rules/solution.hide.css b/exercises/06-Practicing-Rules/solution.hide.css index d1e24e3c..4026152e 100644 --- a/exercises/06-Practicing-Rules/solution.hide.css +++ b/exercises/06-Practicing-Rules/solution.hide.css @@ -13,7 +13,6 @@ body { h1 { font-family: "Courier"; color: red; - text-align: center; } h2 { diff --git a/exercises/06-Practicing-Rules/styles.css b/exercises/06-Practicing-Rules/styles.css index d89b1a47..9a7fae86 100644 --- a/exercises/06-Practicing-Rules/styles.css +++ b/exercises/06-Practicing-Rules/styles.css @@ -1 +1 @@ -/* add your styles here */ \ No newline at end of file +/* add your styles here */ diff --git a/exercises/06-Practicing-Rules/tests.js b/exercises/06-Practicing-Rules/tests.js index 9bb32a78..a348b847 100644 --- a/exercises/06-Practicing-Rules/tests.js +++ b/exercises/06-Practicing-Rules/tests.js @@ -55,15 +55,6 @@ describe("All the styles should be applied", () => { // get computed styles of any element you like expect(h1TagStyles["color"]).toBe("red"); }); - test("the text-align in the H1 Tag should be 'center'", () => { - document.querySelector( - "head" - ).innerHTML = ``; - let h1Tag = document.querySelector("h1"); - let h1TagStyles = window.getComputedStyle(h1Tag); - // get computed styles of any element you like - expect(h1TagStyles["text-align"]).toBe("center"); - }); test("the text-decoration in the H2 Tag should be 'underline'", () => { document.querySelector( "head" @@ -82,15 +73,7 @@ describe("All the styles should be applied", () => { let idTagStyles = window.getComputedStyle(idTag); expect(idTagStyles["padding"]).toBe("5px"); }); - test("the background-color in the #id1 Tag should be 'semi transparent white'", () => { - document.querySelector( - "head" - ).innerHTML = ``; - // get computed styles of any element you like - const idTag = document.querySelector("#id1"); - let idTagStyles = window.getComputedStyle(idTag); - expect(idTagStyles["background-color"]).toBe("rgba(255, 255, 255, 0.2)"); - }); + test("The a hover underline should be removed", () => { document.querySelector( "head" diff --git a/exercises/07-Very-Specific-Rules/solution.hide.css b/exercises/07-Very-Specific-Rules/solution.hide.css index eb60fcfa..55fb5ff4 100644 --- a/exercises/07-Very-Specific-Rules/solution.hide.css +++ b/exercises/07-Very-Specific-Rules/solution.hide.css @@ -1,6 +1,7 @@ /** Insert your code here **/ + ul li { - color: red; + color: red !important; } ol li:nth-child(2) { @@ -10,6 +11,7 @@ ol li:nth-child(2) { tr:nth-child(odd) { background: yellow; } + /*********** READ ONLY BLOCK ****** You CANNOT UPDATE anything from here on, only add lines of code on top of this lines diff --git a/exercises/07-Very-Specific-Rules/styles.css b/exercises/07-Very-Specific-Rules/styles.css index c77b84c2..06ec4a71 100644 --- a/exercises/07-Very-Specific-Rules/styles.css +++ b/exercises/07-Very-Specific-Rules/styles.css @@ -1,6 +1,7 @@ /** Insert your code here **/ + /*********** READ ONLY BLOCK ****** You CANNOT UPDATE anything from here on, only add lines of code on top of this lines diff --git a/exercises/07-Very-Specific-Rules/tests.js b/exercises/07-Very-Specific-Rules/tests.js index 66a759a2..26cd5978 100644 --- a/exercises/07-Very-Specific-Rules/tests.js +++ b/exercises/07-Very-Specific-Rules/tests.js @@ -24,7 +24,7 @@ describe("All the styles should be applied", ()=>{ color = cssArray[i].cssText; } } - let reg = new RegExp(/\s*color:\s*red\s*!important\s*;\s*/gm) + let reg = new RegExp(/color:\s*red\s*!important\s*;/gm) expect(reg.test(color)).toBeTruthy(); }); diff --git a/exercises/08-Rounded-Image/tests.js b/exercises/08-Rounded-Image/tests.js index adcba6f3..70c5b643 100644 --- a/exercises/08-Rounded-Image/tests.js +++ b/exercises/08-Rounded-Image/tests.js @@ -42,15 +42,6 @@ describe("All the styles should be applied", () => { expect(height).toBe(width); }); - test("the border radius of the img Tag should be '100%'", () => { - document.querySelector( - "head" - ).innerHTML = ``; - - let imgStyle = window.getComputedStyle(img); - expect(imgStyle["border-radius"]).toBe("100%"); - }); - test("the object-fit value of the img Tag should be 'cover'", () => { document.querySelector( "head" diff --git a/exercises/12-Relative-Length-EM-REM/tests.js b/exercises/12-Relative-Length-EM-REM/tests.js index 2752a78d..f6987b7a 100644 --- a/exercises/12-Relative-Length-EM-REM/tests.js +++ b/exercises/12-Relative-Length-EM-REM/tests.js @@ -28,23 +28,6 @@ describe("All the styles should be applied", ()=>{ var styles = window.getComputedStyle(h3Tag); expect(styles["font-size"]).toBe("0.8rem"); }); - test("You should add your rules below the existing code", ()=>{ - document.querySelector( - "head" - ).innerHTML = ``; - let cssArray = document.styleSheets[0].cssRules[0].selectorText; - - expect(cssArray).toBe("#my-first-div"); - } - ) - test("You should add your rules below the existing code", ()=>{ - document.querySelector( - "head" - ).innerHTML = ``; - let cssArray = document.styleSheets[0].cssRules[1].selectorText; - expect(cssArray).toBe("#the-second-one"); - } - ) test("You should not change the existing head tag elements", ()=>{ let head = document.querySelector('head') expect(head).toBeTruthy() diff --git a/exercises/13-Anchor-Like-Button/tests.js b/exercises/13-Anchor-Like-Button/tests.js index d93dc049..587b95d7 100644 --- a/exercises/13-Anchor-Like-Button/tests.js +++ b/exercises/13-Anchor-Like-Button/tests.js @@ -29,15 +29,6 @@ describe("All the styles should be applied", ()=>{ let classTagStyles = window.getComputedStyle(divTag); expect(classTagStyles["border-radius"]).toBe("4px"); }); - test("the background should be 'orange'", ()=>{ - document.querySelector( - "head" - - ).innerHTML = ``; - let divTag = document.querySelector(".orange-btn"); - let classTagStyles = window.getComputedStyle(divTag); - expect(classTagStyles["background"]).toBe("orange"); - }); test("the underline should be removed", ()=>{ document.querySelector( "head" @@ -47,22 +38,6 @@ describe("All the styles should be applied", ()=>{ let classTagStyles = window.getComputedStyle(divTag); expect(classTagStyles["text-decoration"]).toBe("none"); }); - test("The mouse hover property should be 'darkorange'", ()=>{ - // get computed styles of any element you like - document.querySelector( - "head" - ).innerHTML = ``; - let cssArray = document.styleSheets[0].cssRules; - - let orangeHoverSelector = ""; - for (let i = 0; i < cssArray.length; i++) { - if (cssArray[i].selectorText === ".orange-btn:hover") { - orangeHoverSelector = cssArray[i].style.background; - } - } - - expect(orangeHoverSelector).toBe("darkorange"); - }); test("You should be careful with the specificity", ()=>{ document.querySelector( From 7e82f9b4c71350a702339f04c555f38e25f5ae71 Mon Sep 17 00:00:00 2001 From: dsilva06 Date: Thu, 22 Sep 2022 15:35:58 +0000 Subject: [PATCH 168/491] stiles to styles --- exercises/04.3-id-Selector/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/04.3-id-Selector/README.md b/exercises/04.3-id-Selector/README.md index c079f936..061ec46b 100644 --- a/exercises/04.3-id-Selector/README.md +++ b/exercises/04.3-id-Selector/README.md @@ -4,7 +4,7 @@ tutorial: "https://www.youtube.com/watch?v=9906LCSQJ8M" # `04.3` The ID CSS Selector -You can also select an element by `#id` and apply stiles to it. +You can also select an element by `#id` and apply styles to it. ## The `#id` selector From a6caa74d0d897bec73ce11169950078d2bf239d5 Mon Sep 17 00:00:00 2001 From: dsilva06 Date: Wed, 28 Sep 2022 16:57:20 +0000 Subject: [PATCH 169/491] deleted solution in index.html --- .learn/resets/01.3-Your-Second-Style/index.html | 14 ++++++++++++++ exercises/01.3-Your-Second-Style/index.html | 3 --- 2 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 .learn/resets/01.3-Your-Second-Style/index.html diff --git a/.learn/resets/01.3-Your-Second-Style/index.html b/.learn/resets/01.3-Your-Second-Style/index.html new file mode 100644 index 00000000..03e672a3 --- /dev/null +++ b/.learn/resets/01.3-Your-Second-Style/index.html @@ -0,0 +1,14 @@ + + + + + + + Hello! My background should be blue! + + diff --git a/exercises/01.3-Your-Second-Style/index.html b/exercises/01.3-Your-Second-Style/index.html index 03e672a3..998d973a 100644 --- a/exercises/01.3-Your-Second-Style/index.html +++ b/exercises/01.3-Your-Second-Style/index.html @@ -3,9 +3,6 @@ From 2819a9d8fb33875533866b42ed300ec04a17549c Mon Sep 17 00:00:00 2001 From: dsilva06 Date: Wed, 28 Sep 2022 16:57:48 +0000 Subject: [PATCH 170/491] deleted solution in index.html --- .learn/resets/01.3-Your-Second-Style/index.html | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 .learn/resets/01.3-Your-Second-Style/index.html diff --git a/.learn/resets/01.3-Your-Second-Style/index.html b/.learn/resets/01.3-Your-Second-Style/index.html deleted file mode 100644 index 03e672a3..00000000 --- a/.learn/resets/01.3-Your-Second-Style/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - Hello! My background should be blue! - - From 41e04edc2be2deebad3b6abdff135473b09176c0 Mon Sep 17 00:00:00 2001 From: dsilva06 Date: Wed, 28 Sep 2022 21:28:44 +0000 Subject: [PATCH 171/491] flexible results --- exercises/10-Your-Own-Font/index.html | 2 -- exercises/10-Your-Own-Font/solution.hide.css | 2 +- exercises/10-Your-Own-Font/solution.hide.html | 30 ++++++++++--------- exercises/10-Your-Own-Font/styles.css | 1 - exercises/10-Your-Own-Font/tests.js | 2 +- 5 files changed, 18 insertions(+), 19 deletions(-) diff --git a/exercises/10-Your-Own-Font/index.html b/exercises/10-Your-Own-Font/index.html index 7ca11a24..b4005187 100644 --- a/exercises/10-Your-Own-Font/index.html +++ b/exercises/10-Your-Own-Font/index.html @@ -3,8 +3,6 @@ - - diff --git a/exercises/10-Your-Own-Font/solution.hide.css b/exercises/10-Your-Own-Font/solution.hide.css index 371e026b..e36ebf08 100644 --- a/exercises/10-Your-Own-Font/solution.hide.css +++ b/exercises/10-Your-Own-Font/solution.hide.css @@ -1,4 +1,4 @@ .myTitle { /*your code here*/ - font-family: 'Roboto'; /*Varies depending on the font you chose*/ + font-family: "Roboto"; /*Varies depending on the font you chose*/ } diff --git a/exercises/10-Your-Own-Font/solution.hide.html b/exercises/10-Your-Own-Font/solution.hide.html index 32040ed7..d1547a63 100644 --- a/exercises/10-Your-Own-Font/solution.hide.html +++ b/exercises/10-Your-Own-Font/solution.hide.html @@ -1,17 +1,19 @@ - - - - - - + + + + + + + - 10 Your Own Font - - -

    My unique font

    - - \ No newline at end of file + 10 Your Own Font + + +

    My unique font

    + + diff --git a/exercises/10-Your-Own-Font/styles.css b/exercises/10-Your-Own-Font/styles.css index a8694c16..0335a322 100644 --- a/exercises/10-Your-Own-Font/styles.css +++ b/exercises/10-Your-Own-Font/styles.css @@ -1,4 +1,3 @@ .myTitle { /* Add your code below this line */ - } diff --git a/exercises/10-Your-Own-Font/tests.js b/exercises/10-Your-Own-Font/tests.js index e86491c0..646f7192 100644 --- a/exercises/10-Your-Own-Font/tests.js +++ b/exercises/10-Your-Own-Font/tests.js @@ -33,7 +33,7 @@ describe("All the styles should be applied", ()=>{ }); test("The link should be included in the head tag", ()=>{ // let headContent=document.getElementsByTagName("*") - expect(link.length).toBe(2); + expect(link.length).toBeGreaterThanOrEqual(2); }); From 7ff4e7653d4bfcc6bb4613519e0ef5d1781f5e4c Mon Sep 17 00:00:00 2001 From: dsilva06 Date: Thu, 29 Sep 2022 21:48:53 +0000 Subject: [PATCH 172/491] flexible tests --- exercises/07-Very-Specific-Rules/README.es.md | 2 +- exercises/07-Very-Specific-Rules/README.md | 2 +- exercises/07-Very-Specific-Rules/styles.css | 4 +--- exercises/07-Very-Specific-Rules/tests.js | 18 +++++++++++------- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/exercises/07-Very-Specific-Rules/README.es.md b/exercises/07-Very-Specific-Rules/README.es.md index b6295156..4ca537e5 100644 --- a/exercises/07-Very-Specific-Rules/README.es.md +++ b/exercises/07-Very-Specific-Rules/README.es.md @@ -8,7 +8,7 @@ En este ejercicio, puedes agregar tu código solo arriba del **READ ONLY BLOCK** 1. Establece el color de texto `ul` a rojo (`red`) (anula los conflictos siendo más específico). -2. Establece el color de fondo (`background-color`) del segundo `li` del `ol` a verde (`green`) (no uses el selector #id). +2. Establece el color de fondo (`background-color`) del segundo `li` del `ol` a verde (`green`) (no uses el selector #id ni el .class). 3. Haz que las filas impares de las tablas tengan fondo amarillo usando `tr:nth-child`. diff --git a/exercises/07-Very-Specific-Rules/README.md b/exercises/07-Very-Specific-Rules/README.md index f0c39817..1f7cdef0 100644 --- a/exercises/07-Very-Specific-Rules/README.md +++ b/exercises/07-Very-Specific-Rules/README.md @@ -13,7 +13,7 @@ In this exercise, you can add your code only above the **READ ONLY BLOCK** of th 1. Set the `ul` text color to `red` (override conflicts with specificity). -2. Set the `background-color` of the second `li` of the `ol` to `green` (don't use the #id selector). +2. Set the `background-color` of the second `li` of the `ol` to `green` (don't use the #id selector or .class selector). 3. Change the odd rows of the tables to a yellow background using `tr:nth-child`. diff --git a/exercises/07-Very-Specific-Rules/styles.css b/exercises/07-Very-Specific-Rules/styles.css index 06ec4a71..a754799f 100644 --- a/exercises/07-Very-Specific-Rules/styles.css +++ b/exercises/07-Very-Specific-Rules/styles.css @@ -1,7 +1,5 @@ /** Insert your code here **/ - - /*********** READ ONLY BLOCK ****** You CANNOT UPDATE anything from here on, only add lines of code on top of this lines @@ -14,4 +12,4 @@ body { ul li, ol li { color: green; -} +} \ No newline at end of file diff --git a/exercises/07-Very-Specific-Rules/tests.js b/exercises/07-Very-Specific-Rules/tests.js index 26cd5978..403d12b6 100644 --- a/exercises/07-Very-Specific-Rules/tests.js +++ b/exercises/07-Very-Specific-Rules/tests.js @@ -35,14 +35,16 @@ describe("All the styles should be applied", ()=>{ ).innerHTML = ``; let cssArray = document.styleSheets[0].cssRules; - let orangeHoverSelector = ""; + let background = ""; + let backgroundColor=""; for (let i = 0; i < cssArray.length; i++) { if (cssArray[i].selectorText === "ol li:nth-child(2)" || cssArray[i].selectorText === "ol > li:nth-child(2)") { - orangeHoverSelector = cssArray[i].style['background-color']; + background = cssArray[i].style['background']; + backgroundColor = cssArray[i].style['background-color']; } - } expect(orangeHoverSelector).toBe("green"); + } expect(background === 'green' || backgroundColor === 'green').toBeTruthy(); }) test("The odd rows of the table should have yellow background", ()=>{ @@ -51,14 +53,16 @@ describe("All the styles should be applied", ()=>{ ).innerHTML = ``; let cssArray = document.styleSheets[0].cssRules; - let orangeHoverSelector = ""; + let background = ""; + let backgroundColor = ""; for (let i = 0; i < cssArray.length; i++) { if (cssArray[i].selectorText === "tr:nth-child(odd)") { - orangeHoverSelector = cssArray[i].style['background']; - + background = cssArray[i].style['background']; + backgroundColor = cssArray[i].style['background-color']; + } - } expect(orangeHoverSelector).toBe("yellow"); + } expect(background === "yellow" || backgroundColor === "yellow").toBeTruthy(); }) test("Write all your rules above the existing code", ()=>{ From 1c4067c86b9af257d433de6a80b0a4b7af430fe5 Mon Sep 17 00:00:00 2001 From: minervaDutta Date: Thu, 29 Sep 2022 17:46:57 -0700 Subject: [PATCH 173/491] spacing correction changed space on line 93 for better readability. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cd220aea..65c45e19 100644 --- a/README.md +++ b/README.md @@ -90,4 +90,4 @@ Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds 3. [Daniel Machota (@d4rkm0nst3r)](https://github.com/d4rkm0nst3r), contribution: (build-tutorial) ✅, Translation 🌍 -This project follows the[all-contributors](https://github.com/kentcdodds/all-contributors) specification.Contributions of any kind are welcome! +This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification.Contributions of any kind are welcome! From c04e03c66fd8ff142f5b3354e58a9c145e00f905 Mon Sep 17 00:00:00 2001 From: minervaDutta Date: Thu, 29 Sep 2022 17:47:43 -0700 Subject: [PATCH 174/491] spacing correction 2 added another space for better readability --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 65c45e19..e5bc2c4f 100644 --- a/README.md +++ b/README.md @@ -90,4 +90,4 @@ Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds 3. [Daniel Machota (@d4rkm0nst3r)](https://github.com/d4rkm0nst3r), contribution: (build-tutorial) ✅, Translation 🌍 -This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification.Contributions of any kind are welcome! +This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind are welcome! From c3a598b4d33a555b44b87454219a28de04ebc274 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C2=96kiddopro?= Date: Fri, 7 Oct 2022 22:48:39 -0300 Subject: [PATCH 175/491] properties --- learn.json | 1 + 1 file changed, 1 insertion(+) diff --git a/learn.json b/learn.json index dc56301e..d0cec84c 100644 --- a/learn.json +++ b/learn.json @@ -10,6 +10,7 @@ "duration": 8, "difficulty": "easy", "video-solutions": true, + "bugs-link": "https://github.com/learnpack/learnpack/issues/new", "graded": true, "disabledActions": [], "disableGrading": false, From bf167ee3d2df4a5c81f90d411ae4c6930958c3d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Su=C3=A1rez?= <82285542+kiddopro@users.noreply.github.com> Date: Tue, 11 Oct 2022 22:37:33 -0300 Subject: [PATCH 176/491] camelCase --- learn.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/learn.json b/learn.json index d0cec84c..d73f7688 100644 --- a/learn.json +++ b/learn.json @@ -9,8 +9,8 @@ "description": "Learn CSS with an interactive and auto-graded tutorial with dozens of exercises.", "duration": 8, "difficulty": "easy", - "video-solutions": true, - "bugs-link": "https://github.com/learnpack/learnpack/issues/new", + "videoSolutions": true, + "bugsLink": "https://github.com/learnpack/learnpack/issues/new", "graded": true, "disabledActions": [], "disableGrading": false, From 0db089dc1d4aca4aeb0953bf71c1ed191d6a08c5 Mon Sep 17 00:00:00 2001 From: dsilva06 Date: Tue, 18 Oct 2022 21:28:24 +0000 Subject: [PATCH 177/491] changed readme,improved test --- exercises/07-Very-Specific-Rules/README.md | 3 +++ exercises/07-Very-Specific-Rules/styles.css | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/exercises/07-Very-Specific-Rules/README.md b/exercises/07-Very-Specific-Rules/README.md index 1f7cdef0..07e4c1ea 100644 --- a/exercises/07-Very-Specific-Rules/README.md +++ b/exercises/07-Very-Specific-Rules/README.md @@ -22,3 +22,6 @@ In this exercise, you can add your code only above the **READ ONLY BLOCK** of th +## :bulb: Hint: + +1. the !important attribute helps to override over other attributes \ No newline at end of file diff --git a/exercises/07-Very-Specific-Rules/styles.css b/exercises/07-Very-Specific-Rules/styles.css index a754799f..300d0677 100644 --- a/exercises/07-Very-Specific-Rules/styles.css +++ b/exercises/07-Very-Specific-Rules/styles.css @@ -12,4 +12,4 @@ body { ul li, ol li { color: green; -} \ No newline at end of file +} From 321c648e1ace15ad4a9dfe6b10783348e8f4442a Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 20 Oct 2022 21:10:58 +0000 Subject: [PATCH 178/491] made last test more flexible to accept any font-awesome class --- exercises/11-Font-Awesome-Icons/tests.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/exercises/11-Font-Awesome-Icons/tests.js b/exercises/11-Font-Awesome-Icons/tests.js index 2b717fd5..191bdbcf 100644 --- a/exercises/11-Font-Awesome-Icons/tests.js +++ b/exercises/11-Font-Awesome-Icons/tests.js @@ -26,13 +26,13 @@ describe("All the styles should be applied", ()=>{ expect(li[i].innerHTML).toBeTruthy(); } }); - test('the i tag should have a class "fas"', ()=>{ + test('the i tag(s) should have Font Awesome class(es) starting with "fa" | ex. "fa-solid"', ()=>{ //or use query selector to compare hoy mane scriptags do we have expect(icons).toBeTruthy(); icons.forEach(icon=>{ - let hasFas = icon.classList.contains("fas") - expect(hasFas).toBe(true); + let hasFa = icon.classList.contains("fa-") + expect(hasFa).toBeTruthy(); }) }); }); From f350b6cd955b9baeacc8972b41e7beec3d705c0e Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 20 Oct 2022 21:18:31 +0000 Subject: [PATCH 179/491] test fixed --- exercises/11-Font-Awesome-Icons/tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/11-Font-Awesome-Icons/tests.js b/exercises/11-Font-Awesome-Icons/tests.js index 191bdbcf..075d2f0e 100644 --- a/exercises/11-Font-Awesome-Icons/tests.js +++ b/exercises/11-Font-Awesome-Icons/tests.js @@ -31,7 +31,7 @@ describe("All the styles should be applied", ()=>{ expect(icons).toBeTruthy(); icons.forEach(icon=>{ - let hasFa = icon.classList.contains("fa-") + let hasFa = icon.classList.toString().includes("fa-") expect(hasFa).toBeTruthy(); }) }); From b7e8fd3ee2b905ad6fb56d3acf7fb689ea0bcc63 Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez <56565994+tommygonzaleza@users.noreply.github.com> Date: Wed, 26 Oct 2022 13:15:32 -0400 Subject: [PATCH 180/491] Update README.md --- exercises/07-Very-Specific-Rules/README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/exercises/07-Very-Specific-Rules/README.md b/exercises/07-Very-Specific-Rules/README.md index 07e4c1ea..ac622518 100644 --- a/exercises/07-Very-Specific-Rules/README.md +++ b/exercises/07-Very-Specific-Rules/README.md @@ -20,8 +20,6 @@ In this exercise, you can add your code only above the **READ ONLY BLOCK** of th ![Example Image](../../.learn/assets/07-1.png?raw=true) - - ## :bulb: Hint: -1. the !important attribute helps to override over other attributes \ No newline at end of file +1. the !important attribute helps to override over other attributes From de455f1344a14d1044c0ce761eea778585eadc87 Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez Date: Wed, 26 Oct 2022 17:22:15 +0000 Subject: [PATCH 181/491] Hint added to the 7th exercise --- exercises/07-Very-Specific-Rules/README.es.md | 3 ++- exercises/07-Very-Specific-Rules/README.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/exercises/07-Very-Specific-Rules/README.es.md b/exercises/07-Very-Specific-Rules/README.es.md index 4ca537e5..accf8d55 100644 --- a/exercises/07-Very-Specific-Rules/README.es.md +++ b/exercises/07-Very-Specific-Rules/README.es.md @@ -15,5 +15,6 @@ En este ejercicio, puedes agregar tu código solo arriba del **READ ONLY BLOCK** ![Example Image](../../.learn/assets/07-1.png?raw=true) +## :bulb: Pista: - +1. El atributo `!important` ayuda a sobreescribir stilos. \ No newline at end of file diff --git a/exercises/07-Very-Specific-Rules/README.md b/exercises/07-Very-Specific-Rules/README.md index ac622518..3fb8ba40 100644 --- a/exercises/07-Very-Specific-Rules/README.md +++ b/exercises/07-Very-Specific-Rules/README.md @@ -22,4 +22,4 @@ In this exercise, you can add your code only above the **READ ONLY BLOCK** of th ## :bulb: Hint: -1. the !important attribute helps to override over other attributes +1. The `!important` attribute helps to override over other attributes. From 705e15a28eb2a7b2acdbb23c0e15d3e61c947a15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Su=C3=A1rez?= <82285542+kiddopro@users.noreply.github.com> Date: Sat, 5 Nov 2022 21:06:42 -0300 Subject: [PATCH 182/491] properties --- learn.json | 1 + 1 file changed, 1 insertion(+) diff --git a/learn.json b/learn.json index d73f7688..6caa33b1 100644 --- a/learn.json +++ b/learn.json @@ -11,6 +11,7 @@ "difficulty": "easy", "videoSolutions": true, "bugsLink": "https://github.com/learnpack/learnpack/issues/new", + "projectType": "tutorial", "graded": true, "disabledActions": [], "disableGrading": false, From 2b67acaed20799b9a2f66af8dcfe2088bf8473df Mon Sep 17 00:00:00 2001 From: dsilva06 Date: Mon, 21 Nov 2022 20:34:35 +0000 Subject: [PATCH 183/491] your-second-style --- .learn/resets/01.3-Your-Second-Style/index.html | 11 +++++++++++ exercises/01.3-Your-Second-Style/README.es.md | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 .learn/resets/01.3-Your-Second-Style/index.html diff --git a/.learn/resets/01.3-Your-Second-Style/index.html b/.learn/resets/01.3-Your-Second-Style/index.html new file mode 100644 index 00000000..998d973a --- /dev/null +++ b/.learn/resets/01.3-Your-Second-Style/index.html @@ -0,0 +1,11 @@ + + + + + + + Hello! My background should be blue! + + diff --git a/exercises/01.3-Your-Second-Style/README.es.md b/exercises/01.3-Your-Second-Style/README.es.md index f36f13d4..267c8149 100644 --- a/exercises/01.3-Your-Second-Style/README.es.md +++ b/exercises/01.3-Your-Second-Style/README.es.md @@ -1,8 +1,8 @@ -# `01.2` Tu Segundo Estilo +# `01.3` Tu Segundo Estilo Cuando usas CSS, la idea es aplicar `reglas css` a tus `elementos html`, siempre debes seleccionar primero el elemento y luego especificar qué reglas deseas aplicarle: -Por ejemplo, este es el código si quiero que todos las anchors de mi sitio web (etiquetas ``) sean azules: +Por ejemplo, este es el código si quiero que todos las anchors de mi sitio web (`etiquetas `) sean azules: ```css a { From 18e1530bbe8ef17c8aa446e9091e3fcdd6add621 Mon Sep 17 00:00:00 2001 From: dsilva06 Date: Mon, 21 Nov 2022 20:39:14 +0000 Subject: [PATCH 184/491] your-second-style --- .learn/resets/01.3-Your-Second-Style/index.html | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 .learn/resets/01.3-Your-Second-Style/index.html diff --git a/.learn/resets/01.3-Your-Second-Style/index.html b/.learn/resets/01.3-Your-Second-Style/index.html deleted file mode 100644 index 998d973a..00000000 --- a/.learn/resets/01.3-Your-Second-Style/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - Hello! My background should be blue! - - From 0823f86b5b4585493d98767e16afaae404c2eb20 Mon Sep 17 00:00:00 2001 From: SheepDogg586 <109840369+SheepDogg586@users.noreply.github.com> Date: Wed, 23 Nov 2022 17:19:29 -0500 Subject: [PATCH 185/491] Update README.md Added periods to the end of lines 78 and 79. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e5bc2c4f..732a3825 100644 --- a/README.md +++ b/README.md @@ -75,8 +75,8 @@ Note: The exercises have automatic grading but its very rigid and strict, my rec Each exercise is a small react application containing the following files: -1. **index.html:** all websites and exercises start from the index.html -2. **styles.css:** your CSS code goes here, some exercises will make you update this file +1. **index.html:** all websites and exercises start from the index.html. +2. **styles.css:** your CSS code goes here, some exercises will make you update this file. 3. **README.md:** contains exercise instructions. 4. **test.js:** you don't have to open this file, it contains the testing script for the exercise. From 6fc2535f9b8d0dfc1f8db28c51ecd36d84e5785f Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez <56565994+tommygonzaleza@users.noreply.github.com> Date: Tue, 6 Dec 2022 15:55:31 -0400 Subject: [PATCH 186/491] Update README.md --- exercises/06-Practicing-Rules/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/06-Practicing-Rules/README.md b/exercises/06-Practicing-Rules/README.md index 1f418bfc..6fc519c0 100644 --- a/exercises/06-Practicing-Rules/README.md +++ b/exercises/06-Practicing-Rules/README.md @@ -16,7 +16,7 @@ tutorial: "https://www.youtube.com/watch?v=4wguurrl-lU" 5. Add a `left padding` to the whole document of `20px` to make it easier to read. -6. Add a white `semi-transparent background (0.2)` to the `first paragraph` to make it easier to read (you have tu use `rgba` for that) and write down "3 reasons you know you are learning". +6. Add a white `semi-transparent background (0.2)` to the `first paragraph` to make it easier to read (you have to use `rgba` for that) and write down "3 reasons you know you are learning". 7. Then apply a `padding` of `5px` to all sides of that paragraph. From b56f3b66f442c97cf5042a311cae940316bbc486 Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez <56565994+tommygonzaleza@users.noreply.github.com> Date: Tue, 6 Dec 2022 15:56:53 -0400 Subject: [PATCH 187/491] Update README.md --- exercises/07-Very-Specific-Rules/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/07-Very-Specific-Rules/README.md b/exercises/07-Very-Specific-Rules/README.md index 3fb8ba40..b6618da6 100644 --- a/exercises/07-Very-Specific-Rules/README.md +++ b/exercises/07-Very-Specific-Rules/README.md @@ -11,7 +11,7 @@ In this exercise, you can add your code only above the **READ ONLY BLOCK** of th ## 📝 Instructions: -1. Set the `ul` text color to `red` (override conflicts with specificity). +1. Set the `ul li` text color to `red` (override conflicts with specificity). 2. Set the `background-color` of the second `li` of the `ol` to `green` (don't use the #id selector or .class selector). From 4ffbc45e3e69ce4e78bd3ac6038a4a694aebe8f8 Mon Sep 17 00:00:00 2001 From: dsilva06 Date: Mon, 19 Dec 2022 19:27:00 +0000 Subject: [PATCH 188/491] fixed readme --- exercises/04.2-Apply-several-classes/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/04.2-Apply-several-classes/README.md b/exercises/04.2-Apply-several-classes/README.md index 2bcfbd77..9b2f8bdf 100644 --- a/exercises/04.2-Apply-several-classes/README.md +++ b/exercises/04.2-Apply-several-classes/README.md @@ -6,7 +6,7 @@ tutorial: "https://www.youtube.com/watch?v=da4tJDx48CY" We have prepared a small CSS Stylesheet that contains the CSS styles to replicate poker cards. -We are going to use to classes and apply them to the same `
    ` element. +We are going to use two classes and apply them to the same `
    ` element. ```html
    9
    From 9d2338b268959a3a22d17e1c5dd69cbb632461dc Mon Sep 17 00:00:00 2001 From: Alejandro Sanchez Date: Wed, 21 Dec 2022 13:59:32 -0500 Subject: [PATCH 189/491] Update README.md --- exercises/02.1-Background/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/02.1-Background/README.md b/exercises/02.1-Background/README.md index b77e9de9..3ae8139b 100644 --- a/exercises/02.1-Background/README.md +++ b/exercises/02.1-Background/README.md @@ -28,5 +28,5 @@ If it is an image, you can specify if you want the image to be repeated horizont Google is your best friend: -- How to use the background-size: http://lmgtfy.com/?q=css+background-size -- How to use the background-repeat: http://lmgtfy.com/?q=css+background-repeat +- We recommend googling: `css background-size` and reading about it on w3schools and some other websites. +- We also recommend googleing about `css background-repeat`. From 951d37f0b31788d214dd63466705ed3ea58e4c35 Mon Sep 17 00:00:00 2001 From: Alejandro Sanchez Date: Wed, 21 Dec 2022 14:00:39 -0500 Subject: [PATCH 190/491] Update README.es.md --- exercises/02.1-Background/README.es.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/02.1-Background/README.es.md b/exercises/02.1-Background/README.es.md index 735b222a..45a32554 100644 --- a/exercises/02.1-Background/README.es.md +++ b/exercises/02.1-Background/README.es.md @@ -22,6 +22,6 @@ Si es una imagen, puedes especificar si quieres que la imagen se repita horizont Google es tu mejor amigo: -- Como usar el background-size: http://lmgtfy.com/?q=css+background-size +- Recomendamos buscar en google `css background-size` para entender un poco mejor esta propiedad. -- Como usar el background-repeat: http://lmgtfy.com/?q=css+background-repeat +- Tambien recomendamos buscar el `css background-repeat` From dca69422ec4b5173a27119e191b803fc9927dc51 Mon Sep 17 00:00:00 2001 From: pzagmel Date: Mon, 9 Jan 2023 17:53:34 +0000 Subject: [PATCH 191/491] Reemplaza --- exercises/04.2-Apply-several-classes/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/04.2-Apply-several-classes/README.es.md b/exercises/04.2-Apply-several-classes/README.es.md index adcf39e9..77f0b1b7 100644 --- a/exercises/04.2-Apply-several-classes/README.es.md +++ b/exercises/04.2-Apply-several-classes/README.es.md @@ -15,7 +15,7 @@ Hay dos posibles clases de palos/pintas que puedes aplicar al elemento html y ha ## 📝 Instrucciones: -Remmplaza la propiedad `spades` de la clase del `
    ` por la clase `heart` y observa los resultados. +Reemplaza la propiedad `spades` de la clase del `
    ` por la clase `heart` y observa los resultados. ## Resultado: From d81997de67c77a847f104211a704baf0d96ab72a Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez <56565994+tommygonzaleza@users.noreply.github.com> Date: Wed, 18 Jan 2023 17:03:38 -0400 Subject: [PATCH 192/491] Update README.md --- exercises/06-Practicing-Rules/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/06-Practicing-Rules/README.md b/exercises/06-Practicing-Rules/README.md index 6fc519c0..409dabd7 100644 --- a/exercises/06-Practicing-Rules/README.md +++ b/exercises/06-Practicing-Rules/README.md @@ -16,7 +16,7 @@ tutorial: "https://www.youtube.com/watch?v=4wguurrl-lU" 5. Add a `left padding` to the whole document of `20px` to make it easier to read. -6. Add a white `semi-transparent background (0.2)` to the `first paragraph` to make it easier to read (you have to use `rgba` for that) and write down "3 reasons you know you are learning". +6. Add a white `semi-transparent background (0.2)` to the `first paragraph` to make it easier to read (you have to use `rgba` for that) and type "3 reasons you know you are learning". 7. Then apply a `padding` of `5px` to all sides of that paragraph. From 0a9cfbe29b88e3f77cc1da9eb2dd994a26248e06 Mon Sep 17 00:00:00 2001 From: Tomas Gonzalez <56565994+tommygonzaleza@users.noreply.github.com> Date: Thu, 16 Feb 2023 14:54:52 -0400 Subject: [PATCH 193/491] Update learn.json --- learn.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/learn.json b/learn.json index 6caa33b1..c06fdf38 100644 --- a/learn.json +++ b/learn.json @@ -4,9 +4,15 @@ "skills": ["css-styling"], "preview": "https://github.com/4GeeksAcademy/css-tutorial-exercises-course/blob/master/preview.png?raw=true", "repository": "https://github.com/4GeeksAcademy/css-tutorial-exercises-course", - "title": "Learn CSS Interactively", + "title": { + "us": "Learn CSS Interactively", + "es": "Aprende CSS Interactivamente" + }, "intro": "https://www.youtube.com/watch?v=BDKdUPDez-U", - "description": "Learn CSS with an interactive and auto-graded tutorial with dozens of exercises.", + "description": { + "us": "Learn CSS with an interactive and auto-graded tutorial with dozens of exercises.", + "es": "Aprende CSS con una docena de ejercicios interactivos y auto-corregidos" + }, "duration": 8, "difficulty": "easy", "videoSolutions": true, From 842ecfd142677cb12e80665df8672dc973f4b94d Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Fri, 3 Mar 2023 21:37:46 +0000 Subject: [PATCH 194/491] added important note on not to modify html file --- exercises/07-Very-Specific-Rules/README.es.md | 1 + exercises/07-Very-Specific-Rules/README.md | 1 + 2 files changed, 2 insertions(+) diff --git a/exercises/07-Very-Specific-Rules/README.es.md b/exercises/07-Very-Specific-Rules/README.es.md index accf8d55..7ec14ada 100644 --- a/exercises/07-Very-Specific-Rules/README.es.md +++ b/exercises/07-Very-Specific-Rules/README.es.md @@ -14,6 +14,7 @@ En este ejercicio, puedes agregar tu código solo arriba del **READ ONLY BLOCK** ![Example Image](../../.learn/assets/07-1.png?raw=true) +>Importante: **NO** debes modificar el archivo index.html ## :bulb: Pista: diff --git a/exercises/07-Very-Specific-Rules/README.md b/exercises/07-Very-Specific-Rules/README.md index 3fb8ba40..d4360fde 100644 --- a/exercises/07-Very-Specific-Rules/README.md +++ b/exercises/07-Very-Specific-Rules/README.md @@ -19,6 +19,7 @@ In this exercise, you can add your code only above the **READ ONLY BLOCK** of th ![Example Image](../../.learn/assets/07-1.png?raw=true) +>Important: You should **NOT** modify the index.html file ## :bulb: Hint: From cf1d63f3f22c5ff4157238732df925fd8196cd8f Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Fri, 3 Mar 2023 21:46:58 +0000 Subject: [PATCH 195/491] fixed typo in test --- exercises/07-Very-Specific-Rules/tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/07-Very-Specific-Rules/tests.js b/exercises/07-Very-Specific-Rules/tests.js index 403d12b6..aae1fa1b 100644 --- a/exercises/07-Very-Specific-Rules/tests.js +++ b/exercises/07-Very-Specific-Rules/tests.js @@ -29,7 +29,7 @@ describe("All the styles should be applied", ()=>{ expect(reg.test(color)).toBeTruthy(); }); - test("The ul second element background should be green", ()=>{ + test("The ol second element background should be green", ()=>{ document.querySelector( "head" ).innerHTML = ``; From 9d264ee2724b2aad6913dde302bfd7aae5fc11af Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Fri, 3 Mar 2023 22:43:57 +0000 Subject: [PATCH 196/491] made background yellow more specific so that using !important is meaningful --- exercises/05-Specificity/styles.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/05-Specificity/styles.css b/exercises/05-Specificity/styles.css index c4e96d25..0577eeca 100644 --- a/exercises/05-Specificity/styles.css +++ b/exercises/05-Specificity/styles.css @@ -2,7 +2,7 @@ ul li { background: blue; } -#thirditem { +li + #thirditem { background: yellow; } /****** DON NOT EDIT ANYTHING ABOVE THIS LINE ****/ From 75c4824a3b8368b279dd6861967ffb49d032b130 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Fri, 3 Mar 2023 22:49:44 +0000 Subject: [PATCH 197/491] added test case to solution file --- exercises/05-Specificity/solution.hide.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/05-Specificity/solution.hide.css b/exercises/05-Specificity/solution.hide.css index 13374f70..8016c500 100644 --- a/exercises/05-Specificity/solution.hide.css +++ b/exercises/05-Specificity/solution.hide.css @@ -2,7 +2,7 @@ ul li { background: blue; } -#thirditem { +li + #thirditem { background: yellow; } /****** DON NOT EDIT ANYTHING ABOVE THIS LINE ****/ From 0415034ba9200cf5d3a2036038ec3dfacf9f6f87 Mon Sep 17 00:00:00 2001 From: dsilva06 Date: Tue, 7 Mar 2023 18:34:55 +0000 Subject: [PATCH 198/491] fixed instructions --- exercises/01.2-Your-First-Style/index.html | 2 +- exercises/01.2-Your-First-Style/solution.hide.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/01.2-Your-First-Style/index.html b/exercises/01.2-Your-First-Style/index.html index 2dec7923..39661132 100644 --- a/exercises/01.2-Your-First-Style/index.html +++ b/exercises/01.2-Your-First-Style/index.html @@ -3,7 +3,7 @@ diff --git a/exercises/01.2-Your-First-Style/solution.hide.html b/exercises/01.2-Your-First-Style/solution.hide.html index 3907bb3c..a2a88d04 100644 --- a/exercises/01.2-Your-First-Style/solution.hide.html +++ b/exercises/01.2-Your-First-Style/solution.hide.html @@ -3,7 +3,7 @@ From 80882db4882d8492bccdebd9c4755362cc899b60 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Mon, 20 Mar 2023 17:55:45 +0100 Subject: [PATCH 199/491] Update README.md --- README.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 732a3825..148f646a 100644 --- a/README.md +++ b/README.md @@ -12,12 +12,12 @@ -Hi! I'm [Alejandro Sanchez @alesanchezr](https://github.com/alesanchezr), really excited to have you here! 🎉 😂 Learning to code is hard, you need coaching! [DM me on twitter](https://twitter.com/alesanchezr) if you have any question. +Hi! I'm [Alejandro Sanchez @alesanchezr](https://github.com/alesanchezr), really excited to have you here! 🎉 😂 Learning to code is hard, you need coaching! [DM me on twitter](https://twitter.com/alesanchezr) if you have any questions. ## You'll be learning the following concepts: -1. Using how to apply CSS to your website in 3 different ways: Inline, by grouping them together inside a ` ``` ## 📝 Instructions -1. Add a ` ``` -## 📝 Instruccciones: +## 📝 Instrucciones: 1. Añade una etiqueta ``; let emptyBodyInlineStyle={}; expect(body.style._values).toEqual(emptyBodyInlineStyle) From 41203e24b56225fe69eea343f3688c7ec2d7e84e Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 22 Mar 2023 17:48:05 +0100 Subject: [PATCH 224/491] Update README.es.md --- exercises/02-Separate-Stylesheet/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/02-Separate-Stylesheet/README.es.md b/exercises/02-Separate-Stylesheet/README.es.md index 927863bc..2b922968 100644 --- a/exercises/02-Separate-Stylesheet/README.es.md +++ b/exercises/02-Separate-Stylesheet/README.es.md @@ -10,6 +10,6 @@ Llena el `styles.css` con el contenido necesario para que el `body` del sitio we ## 💡 Pista: -+ Busca en Google cómo cambiar el color de fondo (`background-color`) del body de un sitio web. ++ Busca en Google cómo cambiar el color de fondo (`background-color`) del `body` de un sitio web. From ee6835996d1974c22249a9fc845b5a4c062625c0 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 22 Mar 2023 19:10:03 +0100 Subject: [PATCH 225/491] Update README.md --- exercises/02.1-Background/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/exercises/02.1-Background/README.md b/exercises/02.1-Background/README.md index 3ae8139b..112fab15 100644 --- a/exercises/02.1-Background/README.md +++ b/exercises/02.1-Background/README.md @@ -19,14 +19,14 @@ If it is an image, you can specify if you want the image to be repeated horizont 4. Build and Preview the exercise again. -5. Change the background-repeat to 'inherit' to make it repeat over the x axis and y axis. +5. Change the background-repeat to 'inherit' to make it repeat over the x-axis and y-axis. 6. Build and Preview the exercise again. -## 💡Hint: +## 💡 Hint: Google is your best friend: -- We recommend googling: `css background-size` and reading about it on w3schools and some other websites. -- We also recommend googleing about `css background-repeat`. +- We recommend googling: `css background-size` and reading about it on w3schools or any other websites. +- We also recommend googling about `css background-repeat`. From c68970801c774a6382f2eb99e191562d09942a33 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 22 Mar 2023 19:20:50 +0100 Subject: [PATCH 226/491] Update README.es.md --- exercises/02.1-Background/README.es.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/02.1-Background/README.es.md b/exercises/02.1-Background/README.es.md index 45a32554..fd5cb23f 100644 --- a/exercises/02.1-Background/README.es.md +++ b/exercises/02.1-Background/README.es.md @@ -18,10 +18,10 @@ Si es una imagen, puedes especificar si quieres que la imagen se repita horizont 6. Construye y previsualiza el ejercicio nuevamente. -## 💡Pista: +## 💡 Pista: Google es tu mejor amigo: - Recomendamos buscar en google `css background-size` para entender un poco mejor esta propiedad. -- Tambien recomendamos buscar el `css background-repeat` +- También recomendamos buscar `css background-repeat` From c6329d76d2ff2c44c177d7a2b6dd1ea17972c801 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 22 Mar 2023 19:22:06 +0100 Subject: [PATCH 227/491] Update tests.js --- exercises/02.1-Background/tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/02.1-Background/tests.js b/exercises/02.1-Background/tests.js index b223105f..48dc9e8c 100644 --- a/exercises/02.1-Background/tests.js +++ b/exercises/02.1-Background/tests.js @@ -11,7 +11,7 @@ describe("All the styles should be applied", ()=>{ const link = document.querySelector("link"); const title = document.querySelector('title'); - test("The body tag should not contains any inline style", ()=>{ + test("The body tag should not contain any inline style", ()=>{ document.querySelector( "head" ).innerHTML = ``; From 5f963201a853833329f49a872369c94e8aadabcb Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 22 Mar 2023 19:27:36 +0100 Subject: [PATCH 228/491] Update README.es.md --- exercises/02.1-Background/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/02.1-Background/README.es.md b/exercises/02.1-Background/README.es.md index fd5cb23f..0a39c630 100644 --- a/exercises/02.1-Background/README.es.md +++ b/exercises/02.1-Background/README.es.md @@ -2,7 +2,7 @@ La regla `background` del CSS nos permite asignar y trabajar con el background de cualquier contenedor (container). Los valores de background pueden ser `color` o una `imagen`. -Si es una imagen, puedes especificar si quieres que la imagen se repita horizontalmente, verticalmente, ambas o ninguna, y también puedes especificar si quieres cambiar el tamaño y ajustar su tamaño al contenedor completo, entre otras propiedades eso puede modificarse. +Si es una imagen, puedes especificar si quieres que la imagen se repita horizontalmente, verticalmente, ambas o ninguna, y también puedes especificar si quieres cambiar el tamaño y ajustar su tamaño al contenedor completo, entre otras propiedades, eso puede modificarse. ## 📝 Instrucciones: From e65729f9fb2600246e6873001cabe9bf17d84908 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 22 Mar 2023 19:40:19 +0100 Subject: [PATCH 229/491] Update README.md --- exercises/03-Inline-Styles/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/03-Inline-Styles/README.md b/exercises/03-Inline-Styles/README.md index f7600770..3fe9aeb9 100644 --- a/exercises/03-Inline-Styles/README.md +++ b/exercises/03-Inline-Styles/README.md @@ -16,7 +16,7 @@ For example: Will set the color of that specific link to red and the font-size to 14px -*You can append as many CSS rules as you want, within the same line, separated by semi-colon.* +*You can append as many CSS rules as you want, within the same line, separated by semicolon.* ## 📝 Instructions: From 5b73e11299a28db0e5d9404ea229672241c6cc0c Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 22 Mar 2023 19:40:57 +0100 Subject: [PATCH 230/491] Update README.md --- exercises/03-Inline-Styles/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/03-Inline-Styles/README.md b/exercises/03-Inline-Styles/README.md index 3fe9aeb9..7e7d1f22 100644 --- a/exercises/03-Inline-Styles/README.md +++ b/exercises/03-Inline-Styles/README.md @@ -16,7 +16,7 @@ For example: Will set the color of that specific link to red and the font-size to 14px -*You can append as many CSS rules as you want, within the same line, separated by semicolon.* +*You can append as many CSS rules as you want, within the same line, separated by a semicolon.* ## 📝 Instructions: From 0af839cf5855c380ae0f43efac50d8d4cc47639a Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 22 Mar 2023 19:42:36 +0100 Subject: [PATCH 231/491] Update README.md --- exercises/03-Inline-Styles/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/03-Inline-Styles/README.md b/exercises/03-Inline-Styles/README.md index 7e7d1f22..196431a6 100644 --- a/exercises/03-Inline-Styles/README.md +++ b/exercises/03-Inline-Styles/README.md @@ -4,7 +4,7 @@ tutorial: "https://www.youtube.com/watch?v=jIMPLzpryuI" # `03` Inline Styles -`Inline` styles are a very bad idea unless you have no other choice (and that's a very uncommon situation). Sadly, we have to teach you how to do it because you may need to use them at some point. +`Inline` styles are a very bad idea unless you have no other choice (and that's a very uncommon situation). Sadly, we have to teach you how to do it because you may need to use it at some point. To use inline styles, instead of declaring a `; @@ -31,7 +31,7 @@ describe("Both p tags should have a blue background", () => { test("There should be two p tags", () => { expect(p.length).toBe(2) }); - test("Both p tags should have a class name 'b-blue' without the quotation marks", () => { + test("Both p tags should have a class name 'b-blue'", () => { p.forEach(e=>{ let eClass = e.getAttribute("class"); expect(eClass).toBe("b-blue") From b3d5c7be573a2d1cdebeb9465e01b7eced6fd800 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 22 Mar 2023 20:50:50 +0100 Subject: [PATCH 240/491] Update README.md --- exercises/04.1-Combined-Rules/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/exercises/04.1-Combined-Rules/README.md b/exercises/04.1-Combined-Rules/README.md index bd17ad14..45e0d3a7 100644 --- a/exercises/04.1-Combined-Rules/README.md +++ b/exercises/04.1-Combined-Rules/README.md @@ -4,9 +4,9 @@ tutorial: "https://youtu.be/watch?v=uQS5QeEE-B4" # `04.1` Combined Rules -CSS files take space on your server and also take time to download (like everything); it is yet another text document that the browser has to download before rendering the page, which is why is important to keep the CSS document as small as possible. +CSS files take up space on your server and also take time to download (like everything); it is yet another text document that the browser has to download before rendering the page, which is why it is important to keep the CSS document as small as possible. -One way to do that is by combining several properties into one such as with `border`: +One way to do that is by combining several properties into one, such as with `border`: ```css border-color: black; @@ -14,7 +14,7 @@ border-style: solid; border-width: 1px; ``` -Border's properties can be consolidated into a single line as: +Border's properties can be consolidated into a single line like this: ```css border: black 1px solid; @@ -24,11 +24,11 @@ border: black 1px solid; 1. Combine the 4 padding rules into just one using the `padding` rule. -2. Combine the all background rules, but the `background-size`, into just one line using the `background:` rule. +2. Combine all background rules, but the `background-size`, into just one line using the `background:` rule. *The `background-size` cannot be combined, the browsers don't support it yet.* -## Hint: +## 💡 Hint: - How to use the background-size: http://lmgtfy.com/?q=css+background From 4b5a4585148e21e942aa70d5cced93b02a672e70 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 22 Mar 2023 20:54:15 +0100 Subject: [PATCH 241/491] Update README.md --- exercises/04.1-Combined-Rules/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/04.1-Combined-Rules/README.md b/exercises/04.1-Combined-Rules/README.md index 45e0d3a7..05792645 100644 --- a/exercises/04.1-Combined-Rules/README.md +++ b/exercises/04.1-Combined-Rules/README.md @@ -24,7 +24,7 @@ border: black 1px solid; 1. Combine the 4 padding rules into just one using the `padding` rule. -2. Combine all background rules, but the `background-size`, into just one line using the `background:` rule. +2. Combine all background rules, but the `background-size`, into just one line using the `background` rule. *The `background-size` cannot be combined, the browsers don't support it yet.* From fd034f6cfa85daa14701dead12dae48c7fa7bf2f Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 22 Mar 2023 20:58:56 +0100 Subject: [PATCH 242/491] Update README.es.md --- exercises/04.1-Combined-Rules/README.es.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/exercises/04.1-Combined-Rules/README.es.md b/exercises/04.1-Combined-Rules/README.es.md index 59f7be55..b180138e 100644 --- a/exercises/04.1-Combined-Rules/README.es.md +++ b/exercises/04.1-Combined-Rules/README.es.md @@ -2,7 +2,7 @@ Los archivos CSS ocupan espacio en tu servidor y también tardan en descargarse (como todo); es otro documento de texto que el navegador debe descargar antes de mostrar la página, por lo que es importante mantener el documento CSS lo más pequeño posible. -Una forma de hacerlo es combinando varias propiedades en una, como con "border": +Una forma de hacerlo es combinando varias propiedades en una, como con `border`: ```css border-color: black; @@ -25,7 +25,7 @@ border: black 1px solid; *El `background-size` no se puede combinar, los navegadores aún no lo admiten.* -## Pista: +## 💡 Pista: -- Como usar el background-size: http://lmgtfy.com/?q=css+background -- Como usar el padding: http://lmgtfy.com/?q=css+padding +- Cómo usar el background-size: http://lmgtfy.com/?q=css+background +- Cómo usar el padding: http://lmgtfy.com/?q=css+padding From 0a4d7a352aa6a065c87a0860bf17822d3687b7ea Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 22 Mar 2023 20:59:25 +0100 Subject: [PATCH 243/491] Update README.md --- exercises/04.1-Combined-Rules/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/04.1-Combined-Rules/README.md b/exercises/04.1-Combined-Rules/README.md index 05792645..45e0d3a7 100644 --- a/exercises/04.1-Combined-Rules/README.md +++ b/exercises/04.1-Combined-Rules/README.md @@ -24,7 +24,7 @@ border: black 1px solid; 1. Combine the 4 padding rules into just one using the `padding` rule. -2. Combine all background rules, but the `background-size`, into just one line using the `background` rule. +2. Combine all background rules, but the `background-size`, into just one line using the `background:` rule. *The `background-size` cannot be combined, the browsers don't support it yet.* From e2de79f660c2d60a97bfdb2896092d893204ffd8 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 22 Mar 2023 21:00:31 +0100 Subject: [PATCH 244/491] Update README.es.md --- exercises/04.1-Combined-Rules/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/04.1-Combined-Rules/README.es.md b/exercises/04.1-Combined-Rules/README.es.md index b180138e..5babd4d5 100644 --- a/exercises/04.1-Combined-Rules/README.es.md +++ b/exercises/04.1-Combined-Rules/README.es.md @@ -16,7 +16,7 @@ Las propiedades de border se pueden consolidar en una sola línea así: border: black 1px solid; ``` -# 📝 Instrucciones: +## 📝 Instrucciones: 1. Combina las 4 reglas de padding en una sola utilizando la regla `padding`. From 38de7bc877f97a924bd9fcf4435720f3e1f70d9c Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 22 Mar 2023 21:05:30 +0100 Subject: [PATCH 245/491] Update tests.js --- exercises/04.1-Combined-Rules/tests.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/exercises/04.1-Combined-Rules/tests.js b/exercises/04.1-Combined-Rules/tests.js index c6f62acc..30c66793 100644 --- a/exercises/04.1-Combined-Rules/tests.js +++ b/exercises/04.1-Combined-Rules/tests.js @@ -11,7 +11,7 @@ describe("All the styles should be applied", ()=> { const link = document.querySelector("link"); const title = document.querySelector('title'); - test("The body tag should not contains any inline style", ()=> { + test("The body tag should not contain any inline style", ()=> { document.querySelector( "head" ).innerHTML = ``; @@ -19,7 +19,7 @@ describe("All the styles should be applied", ()=> { expect(body.style._values).toEqual(emptyBodyInlineStyle); }); - test("the width should be '50px'", ()=> { + test("The width should be '50px'", ()=> { // get computed styles of any element you like document.querySelector( "head" @@ -37,7 +37,7 @@ describe("All the styles should be applied", ()=> { expect(orangeHoverSelector).toBe('50px'); }); - test("the height should be '50px'", ()=> { + test("The height should be '50px'", ()=> { // get computed styles of any element you like document.querySelector( "head" @@ -55,7 +55,7 @@ describe("All the styles should be applied", ()=> { expect(orangeHoverSelector).toBe('50px'); }); - test("the background-size should be contain", ()=> { + test("The background-size should be contain", ()=> { document.querySelector( "head" ).innerHTML = ``; @@ -72,7 +72,7 @@ describe("All the styles should be applied", ()=> { expect(orangeHoverSelector).toBe('contain'); }); - test("the background should include the shorthand property", ()=> { + test("The background should include the shorthand property", ()=> { document.querySelector( "head" ).innerHTML = ``; @@ -102,7 +102,7 @@ describe("All the styles should be applied", ()=> { expect(orangeHoverSelector).toContain('url(https://github.com/4GeeksAcademy/css-tutorial-exercises-course/blob/3a2d1dd03f58167a5a4894155af2d3aa4d41d647/.learn/assets/baby.jpg?raw=true)'); }); - test("the padding should include the shorthand property in the right order (top, right, bottom, left)", ()=> { + test("The padding should include the shorthand property in the right order (top, right, bottom, left)", ()=> { document.querySelector( "head" ).innerHTML = ``; From 08a491a4509132fa2abd86aab6b51c3a18ed28ef Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 22 Mar 2023 21:15:24 +0100 Subject: [PATCH 246/491] Update tests.js --- exercises/04.1-Combined-Rules/tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/04.1-Combined-Rules/tests.js b/exercises/04.1-Combined-Rules/tests.js index 30c66793..8480b590 100644 --- a/exercises/04.1-Combined-Rules/tests.js +++ b/exercises/04.1-Combined-Rules/tests.js @@ -55,7 +55,7 @@ describe("All the styles should be applied", ()=> { expect(orangeHoverSelector).toBe('50px'); }); - test("The background-size should be contain", ()=> { + test("The background-size should be 'contain'", ()=> { document.querySelector( "head" ).innerHTML = ``; From 7ff6e8b1991e0528cd4c11f3710a6e7d8513df44 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 22 Mar 2023 21:18:09 +0100 Subject: [PATCH 247/491] Update README.md --- exercises/04.1-Combined-Rules/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/04.1-Combined-Rules/README.md b/exercises/04.1-Combined-Rules/README.md index 45e0d3a7..b96b4536 100644 --- a/exercises/04.1-Combined-Rules/README.md +++ b/exercises/04.1-Combined-Rules/README.md @@ -4,7 +4,7 @@ tutorial: "https://youtu.be/watch?v=uQS5QeEE-B4" # `04.1` Combined Rules -CSS files take up space on your server and also take time to download (like everything); it is yet another text document that the browser has to download before rendering the page, which is why it is important to keep the CSS document as small as possible. +CSS files take up space on your server and also take time to download (like everything); it is yet another text document that the browser has to download before rendering the page, which is why it's important to keep the CSS document as small as possible. One way to do that is by combining several properties into one, such as with `border`: From 5b8fdb2002ba4a1accbef803be71e316d491cbb8 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 23 Mar 2023 14:32:14 +0000 Subject: [PATCH 248/491] instructions now using default value, solution as well --- exercises/02.1-Background/README.es.md | 2 +- exercises/02.1-Background/README.md | 2 +- exercises/02.1-Background/solution.hide.css | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/exercises/02.1-Background/README.es.md b/exercises/02.1-Background/README.es.md index 45a32554..1d975de7 100644 --- a/exercises/02.1-Background/README.es.md +++ b/exercises/02.1-Background/README.es.md @@ -14,7 +14,7 @@ Si es una imagen, puedes especificar si quieres que la imagen se repita horizont 4. Construye y previsualiza el ejercicio nuevamente. -5. Cambia el `background-repeat` a `inherit` para que se repita sobre el eje x y el eje y. +5. Cambia el `background-repeat` a `repeat` para que se repita sobre el eje x y el eje y. 6. Construye y previsualiza el ejercicio nuevamente. diff --git a/exercises/02.1-Background/README.md b/exercises/02.1-Background/README.md index 3ae8139b..fe82957e 100644 --- a/exercises/02.1-Background/README.md +++ b/exercises/02.1-Background/README.md @@ -19,7 +19,7 @@ If it is an image, you can specify if you want the image to be repeated horizont 4. Build and Preview the exercise again. -5. Change the background-repeat to 'inherit' to make it repeat over the x axis and y axis. +5. Change the background-repeat to 'repeat' to make it repeat over the x axis and y axis. 6. Build and Preview the exercise again. diff --git a/exercises/02.1-Background/solution.hide.css b/exercises/02.1-Background/solution.hide.css index 8c72a684..a2c6b305 100644 --- a/exercises/02.1-Background/solution.hide.css +++ b/exercises/02.1-Background/solution.hide.css @@ -1,5 +1,5 @@ body { background-image: url(https://4geeksacademy.github.io/exercise-assets/img/bg/small-mosaic.jpg); background-size: contain; - background-repeat: inherit; -} \ No newline at end of file + background-repeat: repeat; +} From a8e25b6b70d993978dc9cf248815ad448046673c Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 23 Mar 2023 14:32:36 +0000 Subject: [PATCH 249/491] test now checking for default value repeat --- exercises/02.1-Background/tests.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/02.1-Background/tests.js b/exercises/02.1-Background/tests.js index b223105f..bc1a1daf 100644 --- a/exercises/02.1-Background/tests.js +++ b/exercises/02.1-Background/tests.js @@ -28,13 +28,13 @@ describe("All the styles should be applied", ()=>{ expect(styles["background-size"]).toBe("contain"); }); - test("the background-repeat should be 'inherit' without quotes", ()=>{ + test("the background-repeat should be 'repeat' without quotes", ()=>{ document.querySelector( "head" ).innerHTML = ``; let styles = window.getComputedStyle(body); - expect(styles["background-repeat"]).toBe("inherit"); + expect(styles["background-repeat"]).toBe("repeat"); }); test("You should not change the existing head tag elements", ()=>{ From 67326195b73f71773a9b3e6d1aae532769aeeaca Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 30 Mar 2023 20:56:54 +0000 Subject: [PATCH 250/491] fixed wrong selector in test issue --- exercises/05-Specificity/tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/05-Specificity/tests.js b/exercises/05-Specificity/tests.js index a22fab68..b43a2a6a 100644 --- a/exercises/05-Specificity/tests.js +++ b/exercises/05-Specificity/tests.js @@ -30,7 +30,7 @@ describe("All the styles should be applied", function () { let thirdItSelector = document.styleSheets[0].cssRules[1].selectorText; let thirdItBackground = document.styleSheets[0].cssRules[1].style.background; - expect(thirdItSelector).toBe("#thirditem"); + expect(thirdItSelector).toBe("li + #thirditem"); expect(thirdItBackground).toBe("yellow"); expect(cssArray).toBe("ul li"); expect(cssArrayBackground).toBe("blue"); From e93bc7d70a429be57f11d3028ac06e5ee5f16b61 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Mon, 3 Apr 2023 00:10:00 +0200 Subject: [PATCH 251/491] Update README.es.md --- README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.es.md b/README.es.md index 95e9bea3..cc2bc094 100644 --- a/README.es.md +++ b/README.es.md @@ -46,7 +46,7 @@ Una completa selección de Ejercicios autograduados sobre CSS ¡para cualquier i ## Instalación manual -1. Instala learnpack, el package manager para tutoriales de aprendizaje y el html compiler plugin para learnpack, asegúrate también de tener node.js 12+: +1. Instala learnpack, el package manager para tutoriales de aprendizaje y el html compiler plugin para learnpack, asegúrate también de tener node.js 14+: ```bash $ npm i learnpack -g From d651c26a192451e836a4b3b57a89281c86b5d7d0 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Mon, 3 Apr 2023 00:11:01 +0200 Subject: [PATCH 252/491] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 886bb060..a2d3ef40 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ Complete selection of autograded CSS exercises, for anyone interested in learnin ## Manual installation -1) Install the learnpack package manager for education and the html plugin to compile and test html exercises: +1) Install learnpack, the package manager for learning tutorials and the html compiler plugin for learnpack, make sure you also have node.js 14+: ```bash $ npm i learnpack -g From 692bbfa9f769d7f48328bc6d6143c0a32afee116 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Mon, 3 Apr 2023 00:14:10 +0200 Subject: [PATCH 253/491] Update README.es.md --- README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.es.md b/README.es.md index cc2bc094..a7cbcdf7 100644 --- a/README.es.md +++ b/README.es.md @@ -61,7 +61,7 @@ $ learnpack install css-tutorial-exercises-course Nota: Una vez que termines de descargar, encontrarás una carpeta "exercises" que contiene todos los ejercicios. -3. Inicializa el tutorial/ejercicios ejecutando el siguiente comando en el mismo nivel donde se encuentra tu archivo bc.json: +3. Inicializa el tutorial/ejercicios ejecutando el siguiente comando en el mismo nivel donde se encuentra tu archivo learn.json: ```sh $ npm i jest@24.8.0 -g From 256a558868e7c6f579eb17df29ec032708c23674 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Mon, 3 Apr 2023 00:31:43 +0200 Subject: [PATCH 254/491] removed english tutorial from spanish file --- exercises/01-Hello-World/README.es.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/exercises/01-Hello-World/README.es.md b/exercises/01-Hello-World/README.es.md index d11c6441..0c0423f3 100644 --- a/exercises/01-Hello-World/README.es.md +++ b/exercises/01-Hello-World/README.es.md @@ -1,6 +1,3 @@ ---- -tutorial: "https://www.youtube.com/watch?v=rbtHLA813pU" ---- # `01` Hello World en CSS From fcfeefa5cdcca3b7ea19369c883b5c7d999003e6 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Mon, 3 Apr 2023 01:23:24 +0200 Subject: [PATCH 255/491] Update README.md --- exercises/01-Hello-World/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/01-Hello-World/README.md b/exercises/01-Hello-World/README.md index 386d19e0..5e4caa58 100644 --- a/exercises/01-Hello-World/README.md +++ b/exercises/01-Hello-World/README.md @@ -15,7 +15,7 @@ That is it! The rest is just semantics! 😁 Look at this example: -```HTML +```html `; - - let cssArray = document.styleSheets[0].cssRules; - let orangeHoverSelector = ""; - - for (let i = 0; i < cssArray.length; i++) { - if (cssArray[i].selectorText === ".myBox") { - orangeHoverSelector = cssArray[i].style['background-size']; - } - } - - expect(orangeHoverSelector).toBe('contain'); - }); - test("The background should include the shorthand property", ()=> { document.querySelector( "head" From 78638d1e1c73987b8de666d4c5ae879933859ec9 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 4 Apr 2023 16:04:03 +0200 Subject: [PATCH 268/491] removed tutorial because I had to change the part where it said that the browser does not support the background size --- exercises/04.1-Combined-Rules/README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/exercises/04.1-Combined-Rules/README.md b/exercises/04.1-Combined-Rules/README.md index 25376a74..81a2d167 100644 --- a/exercises/04.1-Combined-Rules/README.md +++ b/exercises/04.1-Combined-Rules/README.md @@ -1,7 +1,3 @@ ---- -tutorial: "https://youtu.be/watch?v=uQS5QeEE-B4" ---- - # `04.1` Combined Rules CSS files take up space on your server and also take time to download (like everything); it is yet another text document that the browser has to download before rendering the page, which is why it's important to keep the CSS document as small as possible. From 55e4f137a05ac67bafa017e06d31ae3131730a00 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 4 Apr 2023 16:26:12 +0200 Subject: [PATCH 269/491] Update README.md --- exercises/04.1-Combined-Rules/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/04.1-Combined-Rules/README.md b/exercises/04.1-Combined-Rules/README.md index 81a2d167..f951353a 100644 --- a/exercises/04.1-Combined-Rules/README.md +++ b/exercises/04.1-Combined-Rules/README.md @@ -22,7 +22,7 @@ border: black 1px solid; 2. Combine all background rules into only one using the `background` rule. -*The `background-position` and the `background-size` properties will conflict because they can handle the same type of values, so you must write them as follows:* +*The `background-position` and the `background-size` properties will conflict because they can handle the same type of values, so instead of separating these properties with a `space` you must separate them with a forward slash `/` as follows:* ```css background: 50px / cover From 73aeab95346fa5e51e7324f9ca3beceb64dee847 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 4 Apr 2023 16:38:10 +0200 Subject: [PATCH 270/491] Update README.es.md --- exercises/04.1-Combined-Rules/README.es.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/exercises/04.1-Combined-Rules/README.es.md b/exercises/04.1-Combined-Rules/README.es.md index ab9c2c47..a6b258c6 100644 --- a/exercises/04.1-Combined-Rules/README.es.md +++ b/exercises/04.1-Combined-Rules/README.es.md @@ -24,12 +24,13 @@ border: black 1px solid; 2. Combina todas las reglas de background en una sola línea usando la regla `background`. *Las propiedades `background-position` y `background-size` pueden usar el mismo tipo de datos por lo que entrarán en conflicto, la forma de arreglar esto es escribiendolo así:* +*Las propiedades `background-position` y `background-size` pueden usar el mismo tipo de datos por lo que entrarán en conflicto, así que en vez de separar estas propiedades con un **espacio**, debes separarlas con una barra `/` de esta forma:* ```css background: 50px / cover ``` -Donde el valor de la izquierda de `/` es la propiedad `background-position` y la derecha es el `background-size`. +Donde el valor de la izquierda de la barra `/` es la propiedad `background-position` y la derecha es el `background-size`. ## 💡 Pista: From 954c186168d8dbc9f95ad339c71b89952c8bb303 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 4 Apr 2023 16:38:25 +0200 Subject: [PATCH 271/491] Update README.es.md --- exercises/04.1-Combined-Rules/README.es.md | 1 - 1 file changed, 1 deletion(-) diff --git a/exercises/04.1-Combined-Rules/README.es.md b/exercises/04.1-Combined-Rules/README.es.md index a6b258c6..40e9cbdd 100644 --- a/exercises/04.1-Combined-Rules/README.es.md +++ b/exercises/04.1-Combined-Rules/README.es.md @@ -23,7 +23,6 @@ border: black 1px solid; 2. Combina todas las reglas de background en una sola línea usando la regla `background`. -*Las propiedades `background-position` y `background-size` pueden usar el mismo tipo de datos por lo que entrarán en conflicto, la forma de arreglar esto es escribiendolo así:* *Las propiedades `background-position` y `background-size` pueden usar el mismo tipo de datos por lo que entrarán en conflicto, así que en vez de separar estas propiedades con un **espacio**, debes separarlas con una barra `/` de esta forma:* ```css From 2d300ed80e24a14a328cc4a98f17897a6b6c9f9c Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 4 Apr 2023 16:40:22 +0200 Subject: [PATCH 272/491] Update README.md --- exercises/04.1-Combined-Rules/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/04.1-Combined-Rules/README.md b/exercises/04.1-Combined-Rules/README.md index f951353a..b75e02dd 100644 --- a/exercises/04.1-Combined-Rules/README.md +++ b/exercises/04.1-Combined-Rules/README.md @@ -28,7 +28,7 @@ border: black 1px solid; background: 50px / cover ``` -Where the left side value of the `/` is the `background-position` rule and the right value is the `background-size` rule. +Where the left side value of the forward slash `/` is the `background-position` rule and the right value is the `background-size` rule. ## 💡 Hint: From 24ec5814670cd7ab2197845960d9647857d0a4d4 Mon Sep 17 00:00:00 2001 From: Alejandro Sanchez Date: Tue, 4 Apr 2023 12:22:24 -0400 Subject: [PATCH 273/491] Create devcontainer.json --- .devcontainer/devcontainer.json | 35 +++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..9942f66b --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,35 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/javascript-node +{ + "name": "Node.js", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/javascript-node:0-16", + "customizations": { + "vscode": { + "settings": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "workbench.editorAssociations": { + "*.md": "vscode.markdown.preview.editor" + } + }, + "extensions": ["learn-pack.learnpack-vscode"] + } + }, + + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + "onCreateCommand": "npm i jest@24.8.0 -g && npm i @learnpack/learnpack@2.1.20 -g && learnpack plugins:install learnpack-html@0.0.20" + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "yarn install", + + // Configure tool-specific properties. + // "customizations": {}, + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} From a28cab791df3133a93a4439fc200c2ae0eb35007 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 4 Apr 2023 23:56:50 +0200 Subject: [PATCH 274/491] Update README.md --- exercises/04.2-Apply-several-classes/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/exercises/04.2-Apply-several-classes/README.md b/exercises/04.2-Apply-several-classes/README.md index 9b2f8bdf..c98cf025 100644 --- a/exercises/04.2-Apply-several-classes/README.md +++ b/exercises/04.2-Apply-several-classes/README.md @@ -12,7 +12,8 @@ We are going to use two classes and apply them to the same `
    ` element.
    9
    ``` -The class `card` contains the styling rules to make the div look like a card: Borders, Height, Width, etc. +The class `card` contains the styling rules to make the div look like a card: borders, height, width, etc. + The class `spades` contains the styling rules needed to make the card turn into a spades suite (black and with a spades symbol). There are two possible suite classes you can apply to the html element to make it look like a real poker card. From 78f6051c3e1dcdbaf12db84fa700052c7b509ef2 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 4 Apr 2023 23:57:39 +0200 Subject: [PATCH 275/491] Update README.es.md --- exercises/04.2-Apply-several-classes/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/04.2-Apply-several-classes/README.es.md b/exercises/04.2-Apply-several-classes/README.es.md index 77f0b1b7..236bebab 100644 --- a/exercises/04.2-Apply-several-classes/README.es.md +++ b/exercises/04.2-Apply-several-classes/README.es.md @@ -7,7 +7,7 @@ Vamos a usar clases y aplicarlas al mismo elemento `
    `.
    9
    ``` -La clase `card` contiene las reglas de estilo para hacer que el div se vea como una carta: bordes, ancho, etc. +La clase `card` contiene las reglas de estilo para hacer que el div se vea como una carta: bordes, ancho, alto, etc. La clase `spades` contiene las reglas de estilo requeridas para convertir la carta a la pinta de picas (negra con el símbolo de picas). From 44c01f83180a5d2c18e500dddd9ba02d35071dec Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 00:17:33 +0200 Subject: [PATCH 276/491] Update README.md --- exercises/04.3-id-Selector/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/04.3-id-Selector/README.md b/exercises/04.3-id-Selector/README.md index 061ec46b..5bc31313 100644 --- a/exercises/04.3-id-Selector/README.md +++ b/exercises/04.3-id-Selector/README.md @@ -14,7 +14,7 @@ You can also select an element by `#id` and apply styles to it. } ``` -Use the `id` property of the HTML element to select it. `Ids` should be unique, only one element must have the same ìd`. +Use the `id` property of the HTML element to select it. `ids` should be unique, only one element must have the same `id`. *The html tag with the `id="small"` will have a font-size of `9px`.* From b5f649ca9108a77743dd63aec72b91ec6466678c Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 00:24:18 +0200 Subject: [PATCH 277/491] Update README.md --- exercises/04.3-id-Selector/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/04.3-id-Selector/README.md b/exercises/04.3-id-Selector/README.md index 5bc31313..4557898e 100644 --- a/exercises/04.3-id-Selector/README.md +++ b/exercises/04.3-id-Selector/README.md @@ -16,7 +16,7 @@ You can also select an element by `#id` and apply styles to it. Use the `id` property of the HTML element to select it. `ids` should be unique, only one element must have the same `id`. -*The html tag with the `id="small"` will have a font-size of `9px`.* +*The HTML tag with the `id="small"` will have a font-size of `9px`.* ## 📝 Instructions: From 2f6bfd877df678ba0ae5e39c40d4ed99a0aa0374 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 00:33:13 +0200 Subject: [PATCH 278/491] Update test.js --- exercises/04.3-id-Selector/test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/04.3-id-Selector/test.js b/exercises/04.3-id-Selector/test.js index f9ea69cc..adc3f260 100644 --- a/exercises/04.3-id-Selector/test.js +++ b/exercises/04.3-id-Selector/test.js @@ -12,7 +12,7 @@ test("There should be a span tag", () => { expect(span).toBeTruthy() }); -test("The span tag should have id 'button1'", () => { +test("The span tag should have the id 'button1'", () => { expect(span).toBeTruthy(); let id = span.id expect(id).toBeTruthy(); @@ -34,4 +34,4 @@ test("You should not change the existing head tag elements", () => { const href = link.getAttribute("href"); expect(href).toBe('./styles.css'); -}); \ No newline at end of file +}); From e0180f8084225ca8b1818b3e223399f3e4ff2f9c Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 00:43:32 +0200 Subject: [PATCH 279/491] Update README.es.md --- exercises/04.3-id-Selector/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/04.3-id-Selector/README.es.md b/exercises/04.3-id-Selector/README.es.md index 72b81234..bbf9763d 100644 --- a/exercises/04.3-id-Selector/README.es.md +++ b/exercises/04.3-id-Selector/README.es.md @@ -10,7 +10,7 @@ También puedes seleccionar un elemento por su `#id` y aplicarle estilos. } ``` -Usa la propiedad `id` del elemento HTML para seleccionarlo. Los `id` deben ser únicos, solo un elemento puede tener la misma `id`. +Usa la propiedad `id` del elemento HTML para seleccionarlo. Los `id` deben ser únicos, así que no uses el mismo `id` en más de un elemento. *La etiqueta HTML con `id="small"` tendrá un font-size de `9px`.* From 4ca68939cb12c6b1945d5edcfdec9ab472ad71eb Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 00:45:10 +0200 Subject: [PATCH 280/491] Update README.md --- exercises/04.3-id-Selector/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/04.3-id-Selector/README.md b/exercises/04.3-id-Selector/README.md index 4557898e..377f6c8c 100644 --- a/exercises/04.3-id-Selector/README.md +++ b/exercises/04.3-id-Selector/README.md @@ -14,7 +14,7 @@ You can also select an element by `#id` and apply styles to it. } ``` -Use the `id` property of the HTML element to select it. `ids` should be unique, only one element must have the same `id`. +Use the `id` property of the HTML element to select it. `ids` should be unique, don't use the same `id` on more than one element. *The HTML tag with the `id="small"` will have a font-size of `9px`.* From fe7ac863c50db35c41982cf3526f4ce2ca9b6719 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 01:48:22 +0200 Subject: [PATCH 281/491] Update README.md --- exercises/05-Specificity/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/exercises/05-Specificity/README.md b/exercises/05-Specificity/README.md index db381074..242e86e8 100644 --- a/exercises/05-Specificity/README.md +++ b/exercises/05-Specificity/README.md @@ -7,16 +7,16 @@ tutorial: "https://www.youtube.com/watch?v=3JxXkhxyAnI" When creating a CSS document, you need to start from the most generic selectors and end with the most specific ones, that is the way CSS works. -It's all about the level of Specificity. If you specify that your `div` with `id="thirditem` has a yellow background, and later in the document you specify that all `divs` will have blue background, `#thirditem` will keep his yellow background. punto! +It's all about the level of **specificity**. If you specify that your `div` with `id="thirditem` has a yellow background, and later in the document you specify that all `divs` will have blue background, `#thirditem` will keep his yellow background. punto! *Because the more specific, the more priority it has.* -## 📝 Instrucciones: +## 📝 Instructions: 1. Override the `background` of `#thirditem` without deleting any css code, simply append to the css a more specific rule at the end of the document to override the background-color to green. -### 💡 Hint: +## 💡 Hint: You can use the **!important** annotation: https://css-tricks.com/when-using-important-is-the-right-choice/ From 343d0f4795edd13a7f62b294e8f50169bcb88cb4 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 01:50:19 +0200 Subject: [PATCH 282/491] Update README.md --- exercises/05-Specificity/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/05-Specificity/README.md b/exercises/05-Specificity/README.md index 242e86e8..f1edfa0f 100644 --- a/exercises/05-Specificity/README.md +++ b/exercises/05-Specificity/README.md @@ -13,7 +13,7 @@ It's all about the level of **specificity**. If you specify that your `div` with ## 📝 Instructions: -1. Override the `background` of `#thirditem` without deleting any css code, simply append to the css a more specific rule at the end of the document to override the background-color to green. +1. Override the `background` of `#thirditem` without deleting any CSS code, simply append to the CSS a more specific rule at the end of the document to override the background-color to green. ## 💡 Hint: From 99fec9172dbeace18d837b03970af06983324160 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 01:54:25 +0200 Subject: [PATCH 283/491] Update README.es.md --- exercises/05-Specificity/README.es.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/exercises/05-Specificity/README.es.md b/exercises/05-Specificity/README.es.md index a87b6e2d..4789d892 100644 --- a/exercises/05-Specificity/README.es.md +++ b/exercises/05-Specificity/README.es.md @@ -1,8 +1,8 @@ # `05` Especificidad -Al crear un documento CSS, debe comenzar desde el selector más genérico y terminar con el más específico, esa es la forma en que funciona CSS. +Al crear un documento CSS, se debe comenzar desde el selector más genérico y terminar con el más específico, esa es la forma en que funciona CSS. -Se trata del nivel de especificidad. Si especificas que tu `div` con `id="thirditem"` tiene un fondo (`background-color`) azul (`blue`), y más adelante en el documento especificas que todos los `divs` tendrán un fondo amarillo (`yellow`), `#thirditem` mantendrá su fondo azul (`blue`). ¡y punto! +Se trata del nivel de **especificidad**. Si especificas que tu `div` con `id="thirditem"` tiene un fondo (`background-color`) azul (`blue`), y más adelante en el documento especificas que todos los `divs` tendrán un fondo amarillo (`yellow`), `#thirditem` mantendrá su fondo azul (`blue`). ¡Y punto! *Porque cuanto más específico, más prioridad tiene.* @@ -13,4 +13,4 @@ Se trata del nivel de especificidad. Si especificas que tu `div` con `id="thirdi ## 💡 Pista: -+ Puedes usar la anotación **!important** : https://css-tricks.com/when-using-important-is-the-right-choice/ \ No newline at end of file ++ Puedes usar la anotación **!important** : https://css-tricks.com/when-using-important-is-the-right-choice/ From bdef919540bcb7b5687ec3224125216b79860510 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 02:01:25 +0200 Subject: [PATCH 284/491] Update styles.css --- exercises/05-Specificity/styles.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/05-Specificity/styles.css b/exercises/05-Specificity/styles.css index 0577eeca..1255fbbc 100644 --- a/exercises/05-Specificity/styles.css +++ b/exercises/05-Specificity/styles.css @@ -5,4 +5,4 @@ ul li { li + #thirditem { background: yellow; } -/****** DON NOT EDIT ANYTHING ABOVE THIS LINE ****/ +/**** DO NOT EDIT ANYTHING ABOVE THIS LINE ****/ From 7ce832a8feb1e63c29ecf21cda84215844c707c6 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 02:07:05 +0200 Subject: [PATCH 285/491] Update solution.hide.css --- exercises/05-Specificity/solution.hide.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/exercises/05-Specificity/solution.hide.css b/exercises/05-Specificity/solution.hide.css index 8016c500..fabc5750 100644 --- a/exercises/05-Specificity/solution.hide.css +++ b/exercises/05-Specificity/solution.hide.css @@ -5,7 +5,8 @@ ul li { li + #thirditem { background: yellow; } -/****** DON NOT EDIT ANYTHING ABOVE THIS LINE ****/ +/**** DO NOT EDIT ANYTHING ABOVE THIS LINE ****/ + #thirditem { background: green !important; } From ab05db47cdba80376a72f144602da114fb6f89c3 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 02:09:43 +0200 Subject: [PATCH 286/491] Update index.html --- exercises/05-Specificity/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/05-Specificity/index.html b/exercises/05-Specificity/index.html index 3d68946c..154a071a 100644 --- a/exercises/05-Specificity/index.html +++ b/exercises/05-Specificity/index.html @@ -11,7 +11,7 @@
  • My first item of the list
  • My second item of the list
  • My third item of the list
  • -
  • My forth item of the list
  • +
  • My fourth item of the list
  • My fifth item of the list
  • From d34a53e44bd69bcba98d6ab72f2f9c7229e61033 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 02:41:48 +0200 Subject: [PATCH 287/491] Update index.html --- exercises/06-Practicing-Rules/index.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/exercises/06-Practicing-Rules/index.html b/exercises/06-Practicing-Rules/index.html index 2651f781..c9135f89 100644 --- a/exercises/06-Practicing-Rules/index.html +++ b/exercises/06-Practicing-Rules/index.html @@ -12,18 +12,18 @@

    The learning essay

    3 reasons you know you are learning

    - We are going to explain in this pharagraph the 3 most comon signs that you should look into yourself to recognize if you are learning. + We are going to explain in this paragraph the 3 most common signs that you should look into yourself to recognize if you are learning.

    1. You are able to complete the exercises by yourself.
    2. -
    3. You understand what the teacher is talking about
    4. -
    5. Your are able to have conversations about the topic
    6. +
    7. You understand what the teacher is talking about.
    8. +
    9. You are able to have conversations about the topic.
    -

    3 reasons you know love what you are learning

    +

    3 reasons you love what you are learning

    • Time passes fast.
    • -
    • You are anxious to finish this excercise and start the next one.
    • -
    • Is 12am and you don't want to go to sleep.
    • +
    • You are anxious to finish this exercise and start the next one.
    • +
    • It's 12am and you don't want to go to sleep.

    If you can't sleep, what better than watching videos of cats? From eee9b2734ffb24049bd05b882c0663722f640405 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 03:03:26 +0200 Subject: [PATCH 288/491] Update README.md --- exercises/06-Practicing-Rules/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/06-Practicing-Rules/README.md b/exercises/06-Practicing-Rules/README.md index 409dabd7..c63091d4 100644 --- a/exercises/06-Practicing-Rules/README.md +++ b/exercises/06-Practicing-Rules/README.md @@ -16,7 +16,7 @@ tutorial: "https://www.youtube.com/watch?v=4wguurrl-lU" 5. Add a `left padding` to the whole document of `20px` to make it easier to read. -6. Add a white `semi-transparent background (0.2)` to the `first paragraph` to make it easier to read (you have to use `rgba` for that) and type "3 reasons you know you are learning". +6. Add a `white semi-transparent background (0.2)` to the first `p` to make it easier to read (you have to use `rgba` for that). 7. Then apply a `padding` of `5px` to all sides of that paragraph. From 2a451389e0c79f870860c285e3edffbc35f81b8f Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 03:08:17 +0200 Subject: [PATCH 289/491] Update README.md --- exercises/06-Practicing-Rules/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/06-Practicing-Rules/README.md b/exercises/06-Practicing-Rules/README.md index c63091d4..1674968f 100644 --- a/exercises/06-Practicing-Rules/README.md +++ b/exercises/06-Practicing-Rules/README.md @@ -16,7 +16,7 @@ tutorial: "https://www.youtube.com/watch?v=4wguurrl-lU" 5. Add a `left padding` to the whole document of `20px` to make it easier to read. -6. Add a `white semi-transparent background (0.2)` to the first `p` to make it easier to read (you have to use `rgba` for that). +6. Add a white `semi-transparent background (0.2)` to the `first paragraph` to make it easier to read (you have to use `rgba` for that). 7. Then apply a `padding` of `5px` to all sides of that paragraph. From f0ca1f718c28ce90dff2173b42325d790d8aa966 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 03:10:24 +0200 Subject: [PATCH 290/491] Update README.es.md --- exercises/06-Practicing-Rules/README.es.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/exercises/06-Practicing-Rules/README.es.md b/exercises/06-Practicing-Rules/README.es.md index 9cf27efa..101596bb 100644 --- a/exercises/06-Practicing-Rules/README.es.md +++ b/exercises/06-Practicing-Rules/README.es.md @@ -8,15 +8,15 @@ 3. Cambia el color del `h1` a rojo(`red`). -4. Haz todos los `h2` tengan subrayado. +4. Haz que todos los `h2` tengan subrayado. 5. Agrega un `left padding` a todo el documento de `20px` para que sea más fácil de leer. -6. Agrega un fondo blanco semitransparente (`semi-transparent background 0.2`) al primer párrafo de "3 reasons you know you are learning" para que sea más fácil de leer (tienes que usar `rgba` para esto). +6. Agrega un fondo blanco semitransparente (`semi-transparent background (0.2)`) al primer párrafo para que sea más fácil de leer (tienes que usar `rgba` para esto). 7. Luego aplica un `padding` de `5px` a todos los lados de ese párrafo. -8. Cambia el color del `anchor` "hover" a verde (`green`) y elimina el subrayado (tienes que colocar el anchor para probarlo). +8. Cambia el color del `anchor` "hover" a verde (`green`) y elimina el subrayado (tienes que pasar el cursor encima del anchor para probarlo). ## El resultado debería ser algo como esto: From 199feb401f9013c31aa63c64caa8f91dd82c9b93 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 03:14:29 +0200 Subject: [PATCH 291/491] Update tests.js --- exercises/06-Practicing-Rules/tests.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/exercises/06-Practicing-Rules/tests.js b/exercises/06-Practicing-Rules/tests.js index a348b847..d9fd4156 100644 --- a/exercises/06-Practicing-Rules/tests.js +++ b/exercises/06-Practicing-Rules/tests.js @@ -11,7 +11,7 @@ describe("All the styles should be applied", () => { let link = document.querySelector("link") let title = document.querySelector('title') - test("the background should match", () => { + test("The background should match", () => { document.querySelector( "head" ).innerHTML = ``; @@ -21,7 +21,7 @@ describe("All the styles should be applied", () => { `url(../../.learn/assets/background-vertical.jpg?raw=true) repeat-y` ); }); - test("the font-family should be 'Times New Roman'", () => { + test("The font-family should be 'Times New Roman'", () => { document.querySelector( "head" ).innerHTML = ``; @@ -29,7 +29,7 @@ describe("All the styles should be applied", () => { let styles = window.getComputedStyle(body); expect(styles["font-family"].toLowerCase()).toBe("\"times new roman\""); }); - test("the padding-left should be '20px'", () => { + test("The padding-left should be '20px'", () => { document.querySelector( "head" ).innerHTML = ``; @@ -37,7 +37,7 @@ describe("All the styles should be applied", () => { let styles = window.getComputedStyle(body); expect(styles["padding-left"]).toBe("20px"); }); - test("the font-family in the H1 Tag should be 'Courier'", () => { + test("The font-family in the h1 tag should be 'Courier'", () => { document.querySelector( "head" ).innerHTML = ``; @@ -46,7 +46,7 @@ describe("All the styles should be applied", () => { // get computed styles of any element you like expect(h1TagStyles["font-family"].toLowerCase()).toBe("\"courier\""); }); - test("the color in the H1 Tag should be 'red'", () => { + test("The color in the h1 tag should be 'red'", () => { document.querySelector( "head" ).innerHTML = ``; @@ -55,7 +55,7 @@ describe("All the styles should be applied", () => { // get computed styles of any element you like expect(h1TagStyles["color"]).toBe("red"); }); - test("the text-decoration in the H2 Tag should be 'underline'", () => { + test("the text-decoration in the h2 tag should be 'underline'", () => { document.querySelector( "head" ).innerHTML = ``; @@ -64,7 +64,7 @@ describe("All the styles should be applied", () => { let h2TagStyles = window.getComputedStyle(h2Tag); expect(h2TagStyles["text-decoration"]).toBe("underline"); }); - test("the padding in the #id1 Tag should be '5px'", () => { + test("The padding in the #id1 tag should be '5px'", () => { document.querySelector( "head" ).innerHTML = ``; @@ -74,7 +74,7 @@ describe("All the styles should be applied", () => { expect(idTagStyles["padding"]).toBe("5px"); }); - test("The a hover underline should be removed", () => { + test("The a:hover underline should be removed", () => { document.querySelector( "head" ).innerHTML = ``; @@ -88,7 +88,7 @@ describe("All the styles should be applied", () => { expect(orangeHoverSelector).toBe("none"); }); - test("The a hover color should be green", () => { + test("The a:hover color should be green", () => { document.querySelector( "head" ).innerHTML = ``; From 35f4edfdfc506ca90d0af21a90040ec7d2f3676c Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 03:37:05 +0200 Subject: [PATCH 292/491] Update README.md --- exercises/07-Very-Specific-Rules/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/07-Very-Specific-Rules/README.md b/exercises/07-Very-Specific-Rules/README.md index 3cba95e9..dc922179 100644 --- a/exercises/07-Very-Specific-Rules/README.md +++ b/exercises/07-Very-Specific-Rules/README.md @@ -19,8 +19,8 @@ In this exercise, you can add your code only above the **READ ONLY BLOCK** of th ![Example Image](../../.learn/assets/07-1.png?raw=true) ->Important: You should **NOT** modify the index.html file +>Important: You should **NOT** modify the index.html file. ## :bulb: Hint: -1. The `!important` attribute helps to override over other attributes. +1. The `!important` attribute helps to override other attributes. From 0b2d547111c0ae64205af66706caadff3a4b3818 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 03:38:48 +0200 Subject: [PATCH 293/491] Update styles.css --- exercises/07-Very-Specific-Rules/styles.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/07-Very-Specific-Rules/styles.css b/exercises/07-Very-Specific-Rules/styles.css index 300d0677..70e1923d 100644 --- a/exercises/07-Very-Specific-Rules/styles.css +++ b/exercises/07-Very-Specific-Rules/styles.css @@ -1,8 +1,8 @@ /** Insert your code here **/ -/*********** READ ONLY BLOCK ****** +/********** READ ONLY BLOCK ****** You CANNOT UPDATE anything from here on, -only add lines of code on top of this lines +only add lines of code on top of these lines **/ body { From 1af47842ca50b31ae31725af254a0e9241605578 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 03:39:09 +0200 Subject: [PATCH 294/491] Update styles.css --- exercises/07-Very-Specific-Rules/styles.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/07-Very-Specific-Rules/styles.css b/exercises/07-Very-Specific-Rules/styles.css index 70e1923d..164b694b 100644 --- a/exercises/07-Very-Specific-Rules/styles.css +++ b/exercises/07-Very-Specific-Rules/styles.css @@ -1,6 +1,6 @@ /** Insert your code here **/ -/********** READ ONLY BLOCK ****** +/********** READ-ONLY BLOCK ****** You CANNOT UPDATE anything from here on, only add lines of code on top of these lines **/ From f60fde3ad7c036a71cefe145dbbe4e87ade403f4 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 03:40:29 +0200 Subject: [PATCH 295/491] Update solution.hide.css --- exercises/07-Very-Specific-Rules/solution.hide.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/07-Very-Specific-Rules/solution.hide.css b/exercises/07-Very-Specific-Rules/solution.hide.css index 55fb5ff4..232aa480 100644 --- a/exercises/07-Very-Specific-Rules/solution.hide.css +++ b/exercises/07-Very-Specific-Rules/solution.hide.css @@ -12,9 +12,9 @@ tr:nth-child(odd) { background: yellow; } -/*********** READ ONLY BLOCK ****** +/*********** READ-ONLY BLOCK ****** You CANNOT UPDATE anything from here on, -only add lines of code on top of this lines +only add lines of code on top of these lines **/ body { From c83a96ed8e4e6d0054883e9d06fbeb4fb5d6d743 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 03:44:29 +0200 Subject: [PATCH 296/491] Update index.html --- exercises/07-Very-Specific-Rules/index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/exercises/07-Very-Specific-Rules/index.html b/exercises/07-Very-Specific-Rules/index.html index 9c691446..301d8f1d 100644 --- a/exercises/07-Very-Specific-Rules/index.html +++ b/exercises/07-Very-Specific-Rules/index.html @@ -10,18 +10,18 @@

    The learning essay

    3 reasons you know you are learning

    - We are going to explain in this pharagraph the 3 most comon signs that you should look into yourself to recognize if you are learning. + We are going to explain in this paragraph the 3 most common signs that you should look into yourself to recognize if you are learning.

    1. You are able to complete the exercises by yourself.
    2. You understand what the teacher is talking about
    3. -
    4. Your are able to have conversations about the topic
    5. +
    6. You are able to have conversations about the topic

    3 reasons you know love what you are learning

    • Time passes fast.
    • -
    • You are anxious to finish this excercise and start the next one.
    • -
    • Is 12am and you don't want to go to sleep.
    • +
    • You are anxious to finish this exercise and start the next one.
    • +
    • It's 12am and you don't want to go to sleep.

    If you can't sleep, what better than watching videos of cats? From 4cb7d59020c03be3ae6c4945bf39e77e7aab6055 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 04:00:16 +0200 Subject: [PATCH 297/491] Update README.md --- exercises/07-Very-Specific-Rules/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/07-Very-Specific-Rules/README.md b/exercises/07-Very-Specific-Rules/README.md index dc922179..ece42bb9 100644 --- a/exercises/07-Very-Specific-Rules/README.md +++ b/exercises/07-Very-Specific-Rules/README.md @@ -6,7 +6,7 @@ tutorial: "https://www.youtube.com/watch?v=2YkLDRZFk40" # **Important:** -In this exercise, you can add your code only above the **READ ONLY BLOCK** of the code, you can add as many lines as you want, but always above. +In this exercise, you can add your code only above the **READ-ONLY BLOCK** of the code, you can add as many lines as you want, but always above. ## 📝 Instructions: From 451b73a78255d8e67fba73c5cb8d306bc3fba79b Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 04:03:47 +0200 Subject: [PATCH 298/491] Update README.es.md --- exercises/07-Very-Specific-Rules/README.es.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/exercises/07-Very-Specific-Rules/README.es.md b/exercises/07-Very-Specific-Rules/README.es.md index 7ec14ada..b3ab50f4 100644 --- a/exercises/07-Very-Specific-Rules/README.es.md +++ b/exercises/07-Very-Specific-Rules/README.es.md @@ -1,21 +1,21 @@ -# `07` Reglas Muy Especificas +# `07` Reglas Muy Específicas ## **Importante:** -En este ejercicio, puedes agregar tu código solo arriba del **READ ONLY BLOCK** del código, puedes agregar tantas líneas como desees, pero siempre arriba. +En este ejercicio, puedes agregar tu código solo arriba del **READ-ONLY BLOCK** del código, puedes agregar tantas líneas como desees, pero siempre arriba. ## 📝 Instrucciones: -1. Establece el color de texto `ul` a rojo (`red`) (anula los conflictos siendo más específico). +1. Establece el color de texto `ul li` a rojo (`red`) (anula los conflictos siendo más específico). 2. Establece el color de fondo (`background-color`) del segundo `li` del `ol` a verde (`green`) (no uses el selector #id ni el .class). -3. Haz que las filas impares de las tablas tengan fondo amarillo usando `tr:nth-child`. +3. Haz que las filas impares de la tabla tengan fondo amarillo usando `tr:nth-child`. ![Example Image](../../.learn/assets/07-1.png?raw=true) >Importante: **NO** debes modificar el archivo index.html -## :bulb: Pista: +## 💡 Pista: -1. El atributo `!important` ayuda a sobreescribir stilos. \ No newline at end of file +1. El atributo `!important` ayuda a sobreescribir estilos. From 5f220ca22434de7cb23b601a4c7a280639d8bfcf Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 17:06:18 +0200 Subject: [PATCH 299/491] Update README.md --- exercises/08-Rounded-Image/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/exercises/08-Rounded-Image/README.md b/exercises/08-Rounded-Image/README.md index 7cedf6b1..c168c000 100644 --- a/exercises/08-Rounded-Image/README.md +++ b/exercises/08-Rounded-Image/README.md @@ -2,7 +2,7 @@ A lot of websites use rounded profile images, a technique that really makes a website more beautiful! -The obvious way create a rounded profile picture is to create an image tag and apply `border-radius:100%`. The problem with this approach, is that it only works for squared pictures... Profile pictures with different height and width will not look like a circle, they will look like ovals: +The obvious way to create a rounded profile picture is to create an image tag and apply `border-radius:100%`. The problem with this approach is that it only works for squared pictures... Profile pictures with different height and width will not look like a circle, they will look like ovals: ![Example Image](../../.learn/assets/08-1.png?raw=true) @@ -10,7 +10,7 @@ The obvious way create a rounded profile picture is to create an image tag and a 1. Use `border-radius`. -2. In this case, in addition to `border-radius`, you will have to use the `object-fit` css property, [here is an explanation](https://www.loom.com/share/15186e456dfd4741887997af40325721). +2. In this case, in addition to `border-radius`, you will have to use the `object-fit` CSS property, [here is an explanation](https://www.loom.com/share/15186e456dfd4741887997af40325721). ## 💡 Hint: @@ -19,4 +19,4 @@ The obvious way create a rounded profile picture is to create an image tag and a + You can also read [this great article about object fit](https://css-tricks.com/on-object-fit-and-object-position/) -+ Additionally you can [read the documentation on object-position](https://developer.mozilla.org/en-US/docs/Web/CSS/object-position) and [the documentation on object-fit](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit) \ No newline at end of file ++ Additionally you can [read the documentation on object-position](https://developer.mozilla.org/en-US/docs/Web/CSS/object-position) and [the documentation on object-fit](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit) From 846c7f7c06b3b76fa1be360bd2818c424f4af05c Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 17:14:08 +0200 Subject: [PATCH 300/491] Update README.es.md --- exercises/08-Rounded-Image/README.es.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/exercises/08-Rounded-Image/README.es.md b/exercises/08-Rounded-Image/README.es.md index 3e7e4c25..a6d6c283 100644 --- a/exercises/08-Rounded-Image/README.es.md +++ b/exercises/08-Rounded-Image/README.es.md @@ -1,10 +1,10 @@ # `08` Imagen Redondeada -Muchos sitios web usan imágenes de perfil redondeadas ¡una técnica que realmente hace que un sitio web sea más hermoso! +Muchos sitios web usan imágenes de perfil redondeadas, ¡una técnica que realmente hace que un sitio web sea más hermoso! La forma obvia de crear una imagen de perfil redondeada es crear una etiqueta de imagen y aplicar un `border-radius: 100%`. -El problema con este enfoque es que solo funciona para imágenes cuadradas... Las imágenes de perfil generalmente tienen diferente altura y ancho no se verán como un círculo, se verán como óvalos: +El problema con este enfoque es que solo funciona para imágenes cuadradas... Las imágenes de perfil generalmente tienen diferente altura y ancho, no se verán como un círculo, se verán como óvalos: ![Example Image](../../.learn/assets/08-1.png?raw=true) @@ -12,12 +12,12 @@ El problema con este enfoque es que solo funciona para imágenes cuadradas... La 1. Usa `border-radius`. -2. Adicionalmente a `border-radius`, tenemos que también utilizar la propiedad `object-fit`, [aqui hay una explicación](https://www.loom.com/share/15186e456dfd4741887997af40325721). +2. Además de `border-radius`, tenemos que utilizar también la propiedad `object-fit`, [aquí hay una explicación](https://www.loom.com/share/15186e456dfd4741887997af40325721). ## 💡 Pista: -+ Si la imagen es más grande que su contenedor y quieres centrarla o enfocarte en una zona en particular puedes utilizar `object-position`. ++ Si la imagen es más grande que su contenedor y quieres centrarla o enfocarte en una zona en particular, puedes utilizar `object-position`. -+ En este articulo puedes leer más [sobre la propiedad object fit](https://css-tricks.com/on-object-fit-and-object-position/) ++ En este artículo puedes leer más [sobre la propiedad object fit](https://css-tricks.com/on-object-fit-and-object-position/) + Adicionalmente, puedes [leer la documentación de object-position](https://developer.mozilla.org/en-US/docs/Web/CSS/object-position) y [la documentación de object-fit](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit) From ef6879b6b5b0b126c38d4d7dcfeaa159713eff64 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 17:14:46 +0200 Subject: [PATCH 301/491] Update README.es.md --- exercises/08-Rounded-Image/README.es.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/08-Rounded-Image/README.es.md b/exercises/08-Rounded-Image/README.es.md index a6d6c283..31f54e0a 100644 --- a/exercises/08-Rounded-Image/README.es.md +++ b/exercises/08-Rounded-Image/README.es.md @@ -18,6 +18,6 @@ El problema con este enfoque es que solo funciona para imágenes cuadradas... La + Si la imagen es más grande que su contenedor y quieres centrarla o enfocarte en una zona en particular, puedes utilizar `object-position`. -+ En este artículo puedes leer más [sobre la propiedad object fit](https://css-tricks.com/on-object-fit-and-object-position/) ++ En este artículo puedes leer más [sobre la propiedad object fit](https://css-tricks.com/on-object-fit-and-object-position/). -+ Adicionalmente, puedes [leer la documentación de object-position](https://developer.mozilla.org/en-US/docs/Web/CSS/object-position) y [la documentación de object-fit](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit) ++ Adicionalmente, puedes [leer la documentación de object-position](https://developer.mozilla.org/en-US/docs/Web/CSS/object-position) y [la documentación de object-fit](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit). From bda40ba4f68bd9060b4636778c8600c6f3ece74d Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 17:15:05 +0200 Subject: [PATCH 302/491] Update README.md --- exercises/08-Rounded-Image/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/08-Rounded-Image/README.md b/exercises/08-Rounded-Image/README.md index c168c000..46631553 100644 --- a/exercises/08-Rounded-Image/README.md +++ b/exercises/08-Rounded-Image/README.md @@ -17,6 +17,6 @@ The obvious way to create a rounded profile picture is to create an image tag an + If the image ends up being bigger than its container (or with different proportions) you can adjust the `object-position` to choose what part of the image you want to display inside of the circle. -+ You can also read [this great article about object fit](https://css-tricks.com/on-object-fit-and-object-position/) ++ You can also read [this great article about object fit](https://css-tricks.com/on-object-fit-and-object-position/). -+ Additionally you can [read the documentation on object-position](https://developer.mozilla.org/en-US/docs/Web/CSS/object-position) and [the documentation on object-fit](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit) ++ Additionally you can [read the documentation on object-position](https://developer.mozilla.org/en-US/docs/Web/CSS/object-position) and [the documentation on object-fit](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit). From 4f57d99edf892d894c6334bf63e4de1f82c5c685 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 17:22:29 +0200 Subject: [PATCH 303/491] Update tests.js --- exercises/08-Rounded-Image/tests.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/exercises/08-Rounded-Image/tests.js b/exercises/08-Rounded-Image/tests.js index 70c5b643..9a0f3614 100644 --- a/exercises/08-Rounded-Image/tests.js +++ b/exercises/08-Rounded-Image/tests.js @@ -13,11 +13,11 @@ describe("All the styles should be applied", () => { const img = document.querySelector(".rounded") - test("the img tag should exist", () => { + test("The img tag should exist", () => { expect(img).toBeTruthy(); }) - test("the width in the img Tag should be equal to its height and vice versa", () => { + test("The width of the img tag should be equal to its height and vice versa", () => { document.querySelector( "head" ).innerHTML = ``; @@ -42,7 +42,7 @@ describe("All the styles should be applied", () => { expect(height).toBe(width); }); - test("the object-fit value of the img Tag should be 'cover'", () => { + test("The object-fit value of the img tag should be 'cover'", () => { document.querySelector( "head" ).innerHTML = ``; @@ -51,7 +51,7 @@ describe("All the styles should be applied", () => { expect(imgStyle["object-fit"]).toBe("cover"); }); - test("the object-position value of the img Tag should be 'top'", () => { + test("The object-position value of the img tag should be 'top'", () => { document.querySelector( "head" ).innerHTML = ``; From efbfceabff62aad8777af3b886584a56629fd186 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 17:47:48 +0200 Subject: [PATCH 304/491] Update README.md --- exercises/09-Anchor-Styles/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/09-Anchor-Styles/README.md b/exercises/09-Anchor-Styles/README.md index 3ce04f9a..a4b23419 100644 --- a/exercises/09-Anchor-Styles/README.md +++ b/exercises/09-Anchor-Styles/README.md @@ -4,11 +4,11 @@ People like to feel that they are clicking on something, a great approach to acc ![Example Image](../../.learn/assets/09-1.png?raw=true) -You can control what css rules apply to each state of an anchor by using the `:hover` (for mouse hover) or `:active` (for mouse pressing) selectors, example: +You can control what CSS rules apply to each state of an anchor by using the `:hover` (for mouse hover) or `:active` (for mouse pressing) selectors, example: ```css a:active { - /* here you can specify whatever css rule that applies + /* here you can specify whatever CSS rule that applies to the anchor while being 'pressed' */ } ``` From d722beb901abb84bc488c0b64bdd3e673e4c83c8 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 17:54:00 +0200 Subject: [PATCH 305/491] Update README.es.md --- exercises/09-Anchor-Styles/README.es.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/09-Anchor-Styles/README.es.md b/exercises/09-Anchor-Styles/README.es.md index 0164b06d..f700cee0 100644 --- a/exercises/09-Anchor-Styles/README.es.md +++ b/exercises/09-Anchor-Styles/README.es.md @@ -4,11 +4,11 @@ A las personas les gusta sentir que están haciendo clic en algo, una manera de ![Example Image](../../.learn/assets/09-1.png?raw=true) -Puedes controlar qué reglas css se aplican a cada estado de un `anchor` utilizando los selectores: `:hover` (para el mouse) o `active` (para presionar el mouse), por ejemplo: +Puedes controlar qué reglas CSS se aplican a cada estado de un `anchor` utilizando los selectores: `:hover` (cuando pasas por encima con el mouse) o `active` (cuando haces clic), por ejemplo: ```css a:active { - /* aquí puedes especificar cualquier regla de css que aplique al anchor mientras se presiona' */ + /* aquí puedes especificar cualquier regla de CSS que aplique al anchor mientras se presiona' */ } ``` From e99823bdd40bbd11c049b6a43f15ebd33c90274e Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 17:57:45 +0200 Subject: [PATCH 306/491] Update tests.js --- exercises/09-Anchor-Styles/tests.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/09-Anchor-Styles/tests.js b/exercises/09-Anchor-Styles/tests.js index 73192e4f..724de97d 100644 --- a/exercises/09-Anchor-Styles/tests.js +++ b/exercises/09-Anchor-Styles/tests.js @@ -20,14 +20,14 @@ describe("All the styles should be applied", () => { expect(cssArray).toBe(".threeDimension"); }) - test("the 'a' tag in the index.html should not be deleted", () => { + test("The 'a' tag in the index.html should not be deleted", () => { // we can read from the source code // console.log(html.toString()); expect(html.toString().indexOf(` -1).toBeTruthy(); }); - test("The border-color rule for the 'threeDimension active ' property should match the instruction color", () => { + test("The border-color rule for the 'a.threeDimension:active' selector should match the instruction color", () => { // get computed styles of any element you like // let cssArray=document.styleSheets[0].cssRules; document.querySelector( From 9898aa6f8711a2a86d508f6f81949df97a1aa325 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 18:09:39 +0200 Subject: [PATCH 307/491] Update README.md --- exercises/10-Your-Own-Font/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/10-Your-Own-Font/README.md b/exercises/10-Your-Own-Font/README.md index 63c24dc3..bdc5c435 100644 --- a/exercises/10-Your-Own-Font/README.md +++ b/exercises/10-Your-Own-Font/README.md @@ -1,6 +1,6 @@ # `10` Your Own Font -Yo canfind Google Fonts here: https://fonts.google.com +You can find Google Fonts here: https://fonts.google.com Pick your favorite one, and then use it by linking your website with the URL in which the font is stored. You have to do that in the `` tag of the HTML document like this: From d853b26a953b4638f183000b3446b93a741526c9 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 18:10:30 +0200 Subject: [PATCH 308/491] Update README.md --- exercises/10-Your-Own-Font/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/10-Your-Own-Font/README.md b/exercises/10-Your-Own-Font/README.md index bdc5c435..1c0f04e1 100644 --- a/exercises/10-Your-Own-Font/README.md +++ b/exercises/10-Your-Own-Font/README.md @@ -8,7 +8,7 @@ Pick your favorite one, and then use it by linking your website with the URL in ``` -After your font is linked you need to assign the `font-family` CSS rule to whatever you want to apply the font, for example an `

    `. +After your font is linked, you need to assign the `font-family` CSS rule to whatever you want to apply the font, for example an `

    `. ## 📝 Instructions: From b274d39676c2a39dbaa50664ab1a58651b36da04 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 18:21:46 +0200 Subject: [PATCH 309/491] Update solution.hide.html --- exercises/10-Your-Own-Font/solution.hide.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/10-Your-Own-Font/solution.hide.html b/exercises/10-Your-Own-Font/solution.hide.html index d1547a63..eeb1c059 100644 --- a/exercises/10-Your-Own-Font/solution.hide.html +++ b/exercises/10-Your-Own-Font/solution.hide.html @@ -3,12 +3,12 @@ - + - + 10 Your Own Font From ed7578e92cdd3c03a1ec031ed8f1fce3050c3ae2 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 18:29:53 +0200 Subject: [PATCH 310/491] Update solution.hide.css --- exercises/10-Your-Own-Font/solution.hide.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/10-Your-Own-Font/solution.hide.css b/exercises/10-Your-Own-Font/solution.hide.css index e36ebf08..c6d008bb 100644 --- a/exercises/10-Your-Own-Font/solution.hide.css +++ b/exercises/10-Your-Own-Font/solution.hide.css @@ -1,4 +1,4 @@ .myTitle { /*your code here*/ - font-family: "Roboto"; /*Varies depending on the font you chose*/ + font-family: "Montserrat"; /*Varies depending on the font you chose*/ } From 55b7b439f6b000a2f60da0a5213aa53fa71f6985 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 18:36:41 +0200 Subject: [PATCH 311/491] Update solution.hide.css --- exercises/10-Your-Own-Font/solution.hide.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/10-Your-Own-Font/solution.hide.css b/exercises/10-Your-Own-Font/solution.hide.css index c6d008bb..85e3a7c3 100644 --- a/exercises/10-Your-Own-Font/solution.hide.css +++ b/exercises/10-Your-Own-Font/solution.hide.css @@ -1,4 +1,4 @@ .myTitle { - /*your code here*/ - font-family: "Montserrat"; /*Varies depending on the font you chose*/ + /* Add your code below this line */ + font-family: "Montserrat"; /* Varies depending on the font you chose */ } From bc2a0a5c5259a1be8f84189eeb9b2361c948d8d9 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 18:41:07 +0200 Subject: [PATCH 312/491] Update tests.js --- exercises/10-Your-Own-Font/tests.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/exercises/10-Your-Own-Font/tests.js b/exercises/10-Your-Own-Font/tests.js index 646f7192..f7c2460b 100644 --- a/exercises/10-Your-Own-Font/tests.js +++ b/exercises/10-Your-Own-Font/tests.js @@ -26,18 +26,18 @@ describe("All the styles should be applied", ()=>{ expect(orangeHoverSelector).toBeTruthy(); }); - test('the h1 tag should have a class "myTitle"', ()=>{ + test('The h1 tag should have a class "myTitle"', ()=>{ //or use query selector to compare hoy mane scriptags do we have const h = document.querySelector("h1"); expect(h.classList.contains("myTitle")).toBeTruthy(); }); - test("The link should be included in the head tag", ()=>{ + test("The google-font link should be included in the head tag", ()=>{ // let headContent=document.getElementsByTagName("*") expect(link.length).toBeGreaterThanOrEqual(2); }); - test("The Head tag should not includes a Style tag", ()=>{ + test("The head tag should not include a style tag", ()=>{ expect(html.toString().indexOf(` -1).toBeFalsy(); }); }); From f3b043492ee8ae44647cbe2d8e482a7696e8eaf5 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 18:53:17 +0200 Subject: [PATCH 313/491] Update README.md --- exercises/11-Font-Awesome-Icons/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/11-Font-Awesome-Icons/README.md b/exercises/11-Font-Awesome-Icons/README.md index 2c09dbcd..bdee8776 100644 --- a/exercises/11-Font-Awesome-Icons/README.md +++ b/exercises/11-Font-Awesome-Icons/README.md @@ -4,7 +4,7 @@ As a developer/designer, you want to use certain icons to make your website easy But using icons can be frustrating and time-consuming because each icon is an image and working with images is horrible! -Font-awesome solve the "image" problem by creating a new font- each letter is a different icon and you can now import the whole font into your website and use whatever icon you want. +Font-awesome solves the "image" problem by creating a new font- each letter is a different icon and you can now import the whole font into your website and use whatever icon you want. After linking your website with font-awesome, you can use the following code to insert a specific icon: From b26d7b80ec6988928de316ea449a440099ace799 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 19:15:50 +0200 Subject: [PATCH 314/491] Update README.md --- exercises/11-Font-Awesome-Icons/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/11-Font-Awesome-Icons/README.md b/exercises/11-Font-Awesome-Icons/README.md index bdee8776..3dfe0831 100644 --- a/exercises/11-Font-Awesome-Icons/README.md +++ b/exercises/11-Font-Awesome-Icons/README.md @@ -4,7 +4,7 @@ As a developer/designer, you want to use certain icons to make your website easy But using icons can be frustrating and time-consuming because each icon is an image and working with images is horrible! -Font-awesome solves the "image" problem by creating a new font- each letter is a different icon and you can now import the whole font into your website and use whatever icon you want. +Font-awesome solves the "image" problem by creating a new font where each letter is a different icon and you can now import the whole font into your website and use whatever icon you want. After linking your website with font-awesome, you can use the following code to insert a specific icon: From 8aa689283b1cb05cc752bafdf46a5b52877a0cf6 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 19:28:22 +0200 Subject: [PATCH 315/491] Update README.md --- exercises/11-Font-Awesome-Icons/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/11-Font-Awesome-Icons/README.md b/exercises/11-Font-Awesome-Icons/README.md index 3dfe0831..3db6538b 100644 --- a/exercises/11-Font-Awesome-Icons/README.md +++ b/exercises/11-Font-Awesome-Icons/README.md @@ -12,7 +12,7 @@ After linking your website with font-awesome, you can use the following code to -You can find all the available names here: http://fontawesome.io/icons/ +You can find all the available icons here: http://fontawesome.io/icons/ ``` ## 📝 Instructions: From 8c67d139bcd89554b19aed86a4dfcbf0a70bbfb0 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 20:12:00 +0200 Subject: [PATCH 316/491] Update README.es.md --- exercises/11-Font-Awesome-Icons/README.es.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/exercises/11-Font-Awesome-Icons/README.es.md b/exercises/11-Font-Awesome-Icons/README.es.md index 23c21ced..324d713e 100644 --- a/exercises/11-Font-Awesome-Icons/README.es.md +++ b/exercises/11-Font-Awesome-Icons/README.es.md @@ -2,19 +2,19 @@ Como desarrollador, querrás utilizar ciertos iconos para que tu sitio web sea fácil de entender. Por ejemplo, sabemos que el icono de "papelera" significa "eliminar". -¡Pero usar iconos puede ser frustrante y llevar mucho tiempo! porque cada icono es una imagen y trabajar con imágenes ¡es horrible! +¡Pero usar iconos puede ser frustrante y llevar mucho tiempo! Porque cada icono es una imagen y trabajar con imágenes ¡es horrible! -Font-awesome resuelve el problema de la "imagen" creando una nueva fuente en donde cada letra es un ícono diferente y ahora puedes importar toda la fuente desde el sitio web y usar el ícono que quieras. +Font-awesome resuelve el problema de la "imagen" creando una nueva fuente en donde cada letra es un icono diferente y ahora puedes importar toda la fuente a tu sitio web y usar el icono que quieras. Después de vincular tu sitio web con font-awesome, puedes usar lo siguiente para codificar e insertar un icono específico: ```html - - -Puedes encontrar todos los nombres disponibles aquí: http://fontawesome.io/icons/ + ``` +*Puedes encontrar todos los iconos disponibles aquí: http://fontawesome.io/icons/* + ## 📝 Instrucciones: From 7d60faffec2556c879a4e68b2156e10e39fdb659 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 20:13:42 +0200 Subject: [PATCH 317/491] Update README.md --- exercises/11-Font-Awesome-Icons/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/11-Font-Awesome-Icons/README.md b/exercises/11-Font-Awesome-Icons/README.md index 3db6538b..8144a004 100644 --- a/exercises/11-Font-Awesome-Icons/README.md +++ b/exercises/11-Font-Awesome-Icons/README.md @@ -11,10 +11,10 @@ After linking your website with font-awesome, you can use the following code to ```html - -You can find all the available icons here: http://fontawesome.io/icons/ ``` +*You can find all the available icons here: http://fontawesome.io/icons/* + ## 📝 Instructions: 1. Add two more items into your list and add a different icon at the beginning of each item. From 20e71b07b361e1dbcc4bd31e3dcb6ef1705ea7a1 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 20:13:56 +0200 Subject: [PATCH 318/491] Update README.md --- exercises/11-Font-Awesome-Icons/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/11-Font-Awesome-Icons/README.md b/exercises/11-Font-Awesome-Icons/README.md index 8144a004..a70f4531 100644 --- a/exercises/11-Font-Awesome-Icons/README.md +++ b/exercises/11-Font-Awesome-Icons/README.md @@ -13,7 +13,7 @@ After linking your website with font-awesome, you can use the following code to ``` -*You can find all the available icons here: http://fontawesome.io/icons/* +> *You can find all the available icons here: http://fontawesome.io/icons/* ## 📝 Instructions: From e913fb354bb3a7874d9b4ec3d27c3c1ef49ddaf2 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 20:14:36 +0200 Subject: [PATCH 319/491] Update README.es.md --- exercises/11-Font-Awesome-Icons/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/11-Font-Awesome-Icons/README.es.md b/exercises/11-Font-Awesome-Icons/README.es.md index 324d713e..719b9b17 100644 --- a/exercises/11-Font-Awesome-Icons/README.es.md +++ b/exercises/11-Font-Awesome-Icons/README.es.md @@ -13,7 +13,7 @@ Después de vincular tu sitio web con font-awesome, puedes usar lo siguiente par ``` -*Puedes encontrar todos los iconos disponibles aquí: http://fontawesome.io/icons/* +> *Puedes encontrar todos los iconos disponibles aquí: http://fontawesome.io/icons/* ## 📝 Instrucciones: From baacdf4585f170f2e0f4f55309cefd827d627386 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 21:18:54 +0200 Subject: [PATCH 320/491] Update README.md --- exercises/11-Font-Awesome-Icons/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/11-Font-Awesome-Icons/README.md b/exercises/11-Font-Awesome-Icons/README.md index a70f4531..4d935144 100644 --- a/exercises/11-Font-Awesome-Icons/README.md +++ b/exercises/11-Font-Awesome-Icons/README.md @@ -13,7 +13,7 @@ After linking your website with font-awesome, you can use the following code to ``` -> *You can find all the available icons here: http://fontawesome.io/icons/* +> *You can find all the available icons here: https://fontawesome.com/search?o=r&m=free* ## 📝 Instructions: From cb8871ba53b542985f00fc8c3ad38e86ec339c9f Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 21:20:15 +0200 Subject: [PATCH 321/491] Update README.es.md --- exercises/11-Font-Awesome-Icons/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/11-Font-Awesome-Icons/README.es.md b/exercises/11-Font-Awesome-Icons/README.es.md index 719b9b17..8e658c02 100644 --- a/exercises/11-Font-Awesome-Icons/README.es.md +++ b/exercises/11-Font-Awesome-Icons/README.es.md @@ -13,7 +13,7 @@ Después de vincular tu sitio web con font-awesome, puedes usar lo siguiente par ``` -> *Puedes encontrar todos los iconos disponibles aquí: http://fontawesome.io/icons/* +> *Puedes encontrar todos los iconos disponibles aquí: https://fontawesome.com/search?o=r&m=free* ## 📝 Instrucciones: From d7c8138c0651a8116bde522a445ef9fe5d57cb95 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 21:26:24 +0200 Subject: [PATCH 322/491] Update solution.hide.html --- exercises/11-Font-Awesome-Icons/solution.hide.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/11-Font-Awesome-Icons/solution.hide.html b/exercises/11-Font-Awesome-Icons/solution.hide.html index e9778b12..431e6b22 100644 --- a/exercises/11-Font-Awesome-Icons/solution.hide.html +++ b/exercises/11-Font-Awesome-Icons/solution.hide.html @@ -11,7 +11,7 @@
    • Hello
    • Hello
    • -
    • Hello
    • +
    • Hello
    From 51133d5c33d66dd6f66bb7a41f37db9eb2a92efa Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 21:35:51 +0200 Subject: [PATCH 323/491] Update tests.js --- exercises/11-Font-Awesome-Icons/tests.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/exercises/11-Font-Awesome-Icons/tests.js b/exercises/11-Font-Awesome-Icons/tests.js index 075d2f0e..56072996 100644 --- a/exercises/11-Font-Awesome-Icons/tests.js +++ b/exercises/11-Font-Awesome-Icons/tests.js @@ -10,7 +10,7 @@ let cssArray = null; describe("All the styles should be applied", ()=>{ const icons = document.querySelectorAll("i"); - test("ul tag should exists", ()=>{ + test("the ul tag should exist", ()=>{ expect(document.querySelector("ul")).toBeTruthy(); }); test("At least 3 li tags should exist", ()=>{ @@ -19,14 +19,14 @@ describe("All the styles should be applied", ()=>{ test("At least 3 i tags should exist", ()=>{ expect(document.querySelectorAll("i").length).toBe(3); }); - test(" LI innerHTML exist", ()=>{ + test("There should be some text on the li tags", ()=>{ expect(document.querySelector("li")).toBeTruthy(); const li = document.querySelectorAll("li"); for (let i = 0; i < li.length; i++) { expect(li[i].innerHTML).toBeTruthy(); } }); - test('the i tag(s) should have Font Awesome class(es) starting with "fa" | ex. "fa-solid"', ()=>{ + test('The i tags should have any Font Awesome class starting with "fa" | ex. "fa-solid"', ()=>{ //or use query selector to compare hoy mane scriptags do we have expect(icons).toBeTruthy(); From 37682cde249164ff47e18d4ebbd237dffa933514 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 21:37:57 +0200 Subject: [PATCH 324/491] Update tests.js --- exercises/11-Font-Awesome-Icons/tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/11-Font-Awesome-Icons/tests.js b/exercises/11-Font-Awesome-Icons/tests.js index 56072996..682064c8 100644 --- a/exercises/11-Font-Awesome-Icons/tests.js +++ b/exercises/11-Font-Awesome-Icons/tests.js @@ -10,7 +10,7 @@ let cssArray = null; describe("All the styles should be applied", ()=>{ const icons = document.querySelectorAll("i"); - test("the ul tag should exist", ()=>{ + test("The ul tag should exist", ()=>{ expect(document.querySelector("ul")).toBeTruthy(); }); test("At least 3 li tags should exist", ()=>{ From db6c0be20dbef960e30c1a41763d6ad1d5c6167c Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 21:39:17 +0200 Subject: [PATCH 325/491] Update README.es.md --- exercises/11-Font-Awesome-Icons/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/11-Font-Awesome-Icons/README.es.md b/exercises/11-Font-Awesome-Icons/README.es.md index 8e658c02..14ad44c3 100644 --- a/exercises/11-Font-Awesome-Icons/README.es.md +++ b/exercises/11-Font-Awesome-Icons/README.es.md @@ -4,7 +4,7 @@ Como desarrollador, querrás utilizar ciertos iconos para que tu sitio web sea f ¡Pero usar iconos puede ser frustrante y llevar mucho tiempo! Porque cada icono es una imagen y trabajar con imágenes ¡es horrible! -Font-awesome resuelve el problema de la "imagen" creando una nueva fuente en donde cada letra es un icono diferente y ahora puedes importar toda la fuente a tu sitio web y usar el icono que quieras. +Font Awesome resuelve el problema de la "imagen" creando una nueva fuente en donde cada letra es un icono diferente y ahora puedes importar toda la fuente a tu sitio web y usar el icono que quieras. Después de vincular tu sitio web con font-awesome, puedes usar lo siguiente para codificar e insertar un icono específico: From 59e1e6c4e7dcc6d3327a2018abd8ac38547f02f1 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 21:39:43 +0200 Subject: [PATCH 326/491] Update README.md --- exercises/11-Font-Awesome-Icons/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/11-Font-Awesome-Icons/README.md b/exercises/11-Font-Awesome-Icons/README.md index 4d935144..e2d1efdc 100644 --- a/exercises/11-Font-Awesome-Icons/README.md +++ b/exercises/11-Font-Awesome-Icons/README.md @@ -4,7 +4,7 @@ As a developer/designer, you want to use certain icons to make your website easy But using icons can be frustrating and time-consuming because each icon is an image and working with images is horrible! -Font-awesome solves the "image" problem by creating a new font where each letter is a different icon and you can now import the whole font into your website and use whatever icon you want. +Font Awesome solves the "image" problem by creating a new font where each letter is a different icon and you can now import the whole font into your website and use whatever icon you want. After linking your website with font-awesome, you can use the following code to insert a specific icon: From b6a29ef318c5b66b17fc399fbc28c4bca27b273f Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 21:42:50 +0200 Subject: [PATCH 327/491] Update styles.css --- exercises/11-Font-Awesome-Icons/styles.css | 1 + 1 file changed, 1 insertion(+) diff --git a/exercises/11-Font-Awesome-Icons/styles.css b/exercises/11-Font-Awesome-Icons/styles.css index b22aedca..52fe9b9c 100644 --- a/exercises/11-Font-Awesome-Icons/styles.css +++ b/exercises/11-Font-Awesome-Icons/styles.css @@ -1,3 +1,4 @@ li { + font-size: 2.5rem; list-style: none; } From c4cfa607c0404e911f46c3430388cd8141643540 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 21:51:36 +0200 Subject: [PATCH 328/491] Update README.es.md --- exercises/11-Font-Awesome-Icons/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/11-Font-Awesome-Icons/README.es.md b/exercises/11-Font-Awesome-Icons/README.es.md index 14ad44c3..2a78a9b0 100644 --- a/exercises/11-Font-Awesome-Icons/README.es.md +++ b/exercises/11-Font-Awesome-Icons/README.es.md @@ -18,5 +18,5 @@ Después de vincular tu sitio web con font-awesome, puedes usar lo siguiente par ## 📝 Instrucciones: -Agrega dos elementos más a tu lista(`li`) y agrega un icono diferente al comienzo de cada elemento. +Agrega dos elementos (`li`) más a tu lista y agrega un icono diferente al comienzo de cada elemento. From baa20e6a1e356abe07cee8ef2f7478ed8d4c3950 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 21:52:05 +0200 Subject: [PATCH 329/491] Update README.md --- exercises/11-Font-Awesome-Icons/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/11-Font-Awesome-Icons/README.md b/exercises/11-Font-Awesome-Icons/README.md index e2d1efdc..f9c7c09f 100644 --- a/exercises/11-Font-Awesome-Icons/README.md +++ b/exercises/11-Font-Awesome-Icons/README.md @@ -17,5 +17,5 @@ After linking your website with font-awesome, you can use the following code to ## 📝 Instructions: -1. Add two more items into your list and add a different icon at the beginning of each item. +1. Add two more items (`li`) into your list and add a different icon at the beginning of each item. From d2e0f14dce20dade95aeb7dd8107067e537cc57c Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 22:03:19 +0200 Subject: [PATCH 330/491] Update README.md --- exercises/10-Your-Own-Font/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/10-Your-Own-Font/README.md b/exercises/10-Your-Own-Font/README.md index 1c0f04e1..e2632833 100644 --- a/exercises/10-Your-Own-Font/README.md +++ b/exercises/10-Your-Own-Font/README.md @@ -5,7 +5,7 @@ You can find Google Fonts here: https://fonts.google.com Pick your favorite one, and then use it by linking your website with the URL in which the font is stored. You have to do that in the `` tag of the HTML document like this: ```Plain/Text - + ``` After your font is linked, you need to assign the `font-family` CSS rule to whatever you want to apply the font, for example an `

    `. From e824aab7854c1180305ec6c30647cd44d4ed3b99 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 22:03:58 +0200 Subject: [PATCH 331/491] Update README.es.md --- exercises/10-Your-Own-Font/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/10-Your-Own-Font/README.es.md b/exercises/10-Your-Own-Font/README.es.md index 16e4ab9a..bebc2839 100644 --- a/exercises/10-Your-Own-Font/README.es.md +++ b/exercises/10-Your-Own-Font/README.es.md @@ -5,7 +5,7 @@ Aquí puedes encontrar las fuentes de Google: https://fonts.google.com Elige la que más te guste, y úsala vinculando tu sitio web con la URL en la que se almacena la fuente. Tienes que hacer eso en la etiqueta `` del documento HTML de esta manera: ```Plain/Text - + ``` Después de vincular tu fuente, debes asignar la regla CSS `font-family` a lo que quieras aplicarle la fuente, por ejemplo, un `

    `. From b09e86c79aa398cc4e0f7d316ea9a2ab9f1de6e5 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Wed, 5 Apr 2023 23:55:03 +0200 Subject: [PATCH 332/491] Update tests.js --- exercises/11-Font-Awesome-Icons/tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/11-Font-Awesome-Icons/tests.js b/exercises/11-Font-Awesome-Icons/tests.js index 682064c8..a1e11eee 100644 --- a/exercises/11-Font-Awesome-Icons/tests.js +++ b/exercises/11-Font-Awesome-Icons/tests.js @@ -19,7 +19,7 @@ describe("All the styles should be applied", ()=>{ test("At least 3 i tags should exist", ()=>{ expect(document.querySelectorAll("i").length).toBe(3); }); - test("There should be some text on the li tags", ()=>{ + test("The i tags should be inside the li tags", ()=>{ expect(document.querySelector("li")).toBeTruthy(); const li = document.querySelectorAll("li"); for (let i = 0; i < li.length; i++) { From 96004a3008f5ccc5437fada7e0be1b30b91f90c9 Mon Sep 17 00:00:00 2001 From: ErnestoXG Date: Thu, 6 Apr 2023 20:20:19 +0000 Subject: [PATCH 333/491] updated instructions for clarity --- exercises/04-Class-Selector/README.es.md | 2 +- exercises/04-Class-Selector/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/04-Class-Selector/README.es.md b/exercises/04-Class-Selector/README.es.md index e3d7f2a5..e8bd37ae 100644 --- a/exercises/04-Class-Selector/README.es.md +++ b/exercises/04-Class-Selector/README.es.md @@ -18,6 +18,6 @@ Usa la propiedad `class` del elemento HTML para seleccionarlo. Las reglas de est ## 📝 Instrucciones: En este momento hay una clase seleccionada en el CSS llamada -`.b-blue`. +`b-blue`. Por favor aplica la clase a ambas etiquetas HTML `

    `. diff --git a/exercises/04-Class-Selector/README.md b/exercises/04-Class-Selector/README.md index d0f7ccae..0dd45e76 100644 --- a/exercises/04-Class-Selector/README.md +++ b/exercises/04-Class-Selector/README.md @@ -22,7 +22,7 @@ Use the class property of the HTML element to select it. Styling rules will appl ## 📝 Instructions: -Right now there is a class selected on the CSS that is called `.b-blue`. +Right now there is a class selected on the CSS that is called `b-blue`. Please apply that class to both of the HTML `

    ` tags. From 489a61e3c549c4f154c1b0d83b0f94746355ebd5 Mon Sep 17 00:00:00 2001 From: lorenagubaira <102861577+Lorenagubaira@users.noreply.github.com> Date: Mon, 10 Apr 2023 17:28:37 +0000 Subject: [PATCH 334/491] codespace reference --- README.es.md | 6 ++++-- README.md | 13 ++++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/README.es.md b/README.es.md index a7cbcdf7..209bf0f3 100644 --- a/README.es.md +++ b/README.es.md @@ -40,9 +40,11 @@ Una completa selección de Ejercicios autograduados sobre CSS ¡para cualquier interesado en aprender CSS! -## Instalación en un clic +## Instalación en un clic (recomendado) -[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io#https://github.com/4GeeksAcademy/css-tutorial-exercises-course) +Puedes empezar estos ejercicios en pocos segundos haciendo clic en: [Abrir en Codespaces](https://codespaces.new/?repo=4GeeksAcademy/css-layouts-tutorial-exercises) (recomendado) o [Abrir en Gitpod](https://gitpod.io#https://github.com/4GeeksAcademy/css-layouts-tutorial-exercises.git). + +> Una vez ya tengas abirto VSCode los ejercicios de LearnPack deberían empezar automáticamente, si esto no sucede puedes intentar empezar los ejercicios escribiendo este comando en tu terminal: `$ learnpack start` ## Instalación manual diff --git a/README.md b/README.md index a2d3ef40..87813aca 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,8 @@ Hi! I'm [Alejandro Sanchez @alesanchezr](https://github.com/alesanchezr), really excited to have you here! 🎉 😂 Learning to code is hard, you need coaching! [DM me on twitter](https://twitter.com/alesanchezr) if you have any questions. +*Estas instrucciones [están disponibles en 🇪🇸 español](https://github.com/4GeeksAcademy/css-tutorial-exercises-course/blob/master/README.es.md) :es:* + ## You'll be learning the following concepts: 1. How to apply CSS to your website in 3 different ways: Inline, by grouping them together inside a ``; @@ -42,7 +42,7 @@ describe("All the styles should be applied", () => { expect(height).toBe(width); }); - test("The object-fit value of the img tag should be 'cover'", () => { + test("The object-fit value of the tag should be 'cover'", () => { document.querySelector( "head" ).innerHTML = ``; @@ -51,7 +51,7 @@ describe("All the styles should be applied", () => { expect(imgStyle["object-fit"]).toBe("cover"); }); - test("The object-position value of the img tag should be 'top'", () => { + test("The object-position value of the tag should be 'top'", () => { document.querySelector( "head" ).innerHTML = ``; @@ -60,7 +60,7 @@ describe("All the styles should be applied", () => { expect(imgStyle["object-position"]).toBe("top"); }); - test("You should not change the existing head tag elements", () => { + test("You should not change the existing tag elements", () => { let head = document.querySelector('head') expect(head).toBeTruthy() From 8faa4093e4d4cfd8525ad4ed6a889b40ea62e5b3 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 11 Apr 2023 17:54:33 +0200 Subject: [PATCH 345/491] Update README.es.md --- exercises/08-Rounded-Image/README.es.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/exercises/08-Rounded-Image/README.es.md b/exercises/08-Rounded-Image/README.es.md index 31f54e0a..a1b3d8d9 100644 --- a/exercises/08-Rounded-Image/README.es.md +++ b/exercises/08-Rounded-Image/README.es.md @@ -12,7 +12,9 @@ El problema con este enfoque es que solo funciona para imágenes cuadradas... La 1. Usa `border-radius`. -2. Además de `border-radius`, tenemos que utilizar también la propiedad `object-fit`, [aquí hay una explicación](https://www.loom.com/share/15186e456dfd4741887997af40325721). +2. Usa las propiedades `width` y `height` para hacer que la imagen sea cuadrada. + +3. Además de `border-radius`, tenemos que utilizar también la propiedad `object-fit`, [aquí hay una explicación](https://www.loom.com/share/15186e456dfd4741887997af40325721). ## 💡 Pista: From 4b9074972f8ff1dc00fd44d1395e84def032132b Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 11 Apr 2023 17:57:21 +0200 Subject: [PATCH 346/491] Update README.md --- exercises/08-Rounded-Image/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/exercises/08-Rounded-Image/README.md b/exercises/08-Rounded-Image/README.md index 46631553..f3074a62 100644 --- a/exercises/08-Rounded-Image/README.md +++ b/exercises/08-Rounded-Image/README.md @@ -10,7 +10,9 @@ The obvious way to create a rounded profile picture is to create an image tag an 1. Use `border-radius`. -2. In this case, in addition to `border-radius`, you will have to use the `object-fit` CSS property, [here is an explanation](https://www.loom.com/share/15186e456dfd4741887997af40325721). +2. Use the properties `width` and `height` to make the image square shaped. + +3. In this case, in addition to `border-radius`, you will have to use the `object-fit` CSS property, [here is an explanation](https://www.loom.com/share/15186e456dfd4741887997af40325721). ## 💡 Hint: From 4a39434ee6fe5d421aef6ad10cc95bb3e9c6e7a2 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 11 Apr 2023 18:02:49 +0200 Subject: [PATCH 347/491] Update test.js --- exercises/04.3-id-Selector/test.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/exercises/04.3-id-Selector/test.js b/exercises/04.3-id-Selector/test.js index adc3f260..ed2b823e 100644 --- a/exercises/04.3-id-Selector/test.js +++ b/exercises/04.3-id-Selector/test.js @@ -8,24 +8,24 @@ jest.dontMock('fs'); const span = document.querySelector("span"); const link = document.querySelector("link"); -test("There should be a span tag", () => { +test("There should be a tag", () => { expect(span).toBeTruthy() }); -test("The span tag should have the id 'button1'", () => { +test("The tag should have the id 'button1'", () => { expect(span).toBeTruthy(); let id = span.id expect(id).toBeTruthy(); expect(id).toBe('button1'); }); -test("The span tag should not contain any inline style", () => { +test("The tag should not contain any inline style", () => { let emptyBodyInlineStyle = {}; expect(span).toBeTruthy() expect(span.style._values).toEqual(emptyBodyInlineStyle); }); -test("You should not change the existing head tag elements", () => { +test("You should not change the existing tag elements", () => { let head = document.querySelector('head'); expect(head).toBeTruthy(); From 7810dfeab3cccd458eccdfb087947e4a169a63ef Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 11 Apr 2023 18:03:53 +0200 Subject: [PATCH 348/491] Update tests.js --- exercises/05-Specificity/tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/05-Specificity/tests.js b/exercises/05-Specificity/tests.js index f3f8b814..a09aa84a 100644 --- a/exercises/05-Specificity/tests.js +++ b/exercises/05-Specificity/tests.js @@ -8,7 +8,7 @@ jest.dontMock('fs'); describe("All the styles should be applied", function () { - test("You should not change the existing head tag elements", function () { + test("You should not change the existing tag elements", function () { let head = document.querySelector('head') expect(head).toBeTruthy() From c8c602e1f84aafa675c5b34660233ed132b94d32 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 11 Apr 2023 18:06:21 +0200 Subject: [PATCH 349/491] Update tests.js --- exercises/06-Practicing-Rules/tests.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/exercises/06-Practicing-Rules/tests.js b/exercises/06-Practicing-Rules/tests.js index d9fd4156..e691255c 100644 --- a/exercises/06-Practicing-Rules/tests.js +++ b/exercises/06-Practicing-Rules/tests.js @@ -37,7 +37,7 @@ describe("All the styles should be applied", () => { let styles = window.getComputedStyle(body); expect(styles["padding-left"]).toBe("20px"); }); - test("The font-family in the h1 tag should be 'Courier'", () => { + test("The font-family in the

    tag should be 'Courier'", () => { document.querySelector( "head" ).innerHTML = ``; @@ -46,7 +46,7 @@ describe("All the styles should be applied", () => { // get computed styles of any element you like expect(h1TagStyles["font-family"].toLowerCase()).toBe("\"courier\""); }); - test("The color in the h1 tag should be 'red'", () => { + test("The color in the

    tag should be 'red'", () => { document.querySelector( "head" ).innerHTML = ``; @@ -55,7 +55,7 @@ describe("All the styles should be applied", () => { // get computed styles of any element you like expect(h1TagStyles["color"]).toBe("red"); }); - test("the text-decoration in the h2 tag should be 'underline'", () => { + test("the text-decoration in the

    tag should be 'underline'", () => { document.querySelector( "head" ).innerHTML = ``; @@ -102,7 +102,7 @@ describe("All the styles should be applied", () => { } expect(orangeHoverSelector).toBe('green'); }); - test("You should not change the existing head tag elements", () => { + test("You should not change the existing tag elements", () => { let head = document.querySelector('head') expect(head).toBeTruthy() From 31640a5e7e739994d2b9adc2c9948ba9c3594f0a Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 11 Apr 2023 18:19:39 +0200 Subject: [PATCH 350/491] Update solution.hide.css --- exercises/09-Anchor-Styles/solution.hide.css | 1 + 1 file changed, 1 insertion(+) diff --git a/exercises/09-Anchor-Styles/solution.hide.css b/exercises/09-Anchor-Styles/solution.hide.css index 101d281c..8c12ea5b 100644 --- a/exercises/09-Anchor-Styles/solution.hide.css +++ b/exercises/09-Anchor-Styles/solution.hide.css @@ -7,6 +7,7 @@ text-decoration: none; text-align: center; color: black; + font-size: 22px; } a.threeDimension:active { From 963ebaa133f189b1fb74153b18712a048f109fd6 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 11 Apr 2023 18:20:19 +0200 Subject: [PATCH 351/491] Update styles.css --- exercises/09-Anchor-Styles/styles.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/exercises/09-Anchor-Styles/styles.css b/exercises/09-Anchor-Styles/styles.css index 7eaa9bea..895dc3d6 100644 --- a/exercises/09-Anchor-Styles/styles.css +++ b/exercises/09-Anchor-Styles/styles.css @@ -8,9 +8,10 @@ text-decoration: none; text-align: center; color: black; + font-size: 22px; } a.threeDimension:active { /* your code here*/ -} \ No newline at end of file +} From 1a03a658634f9e2c07cabc4c4a1991725578d617 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 11 Apr 2023 18:23:27 +0200 Subject: [PATCH 352/491] Update tests.js --- exercises/09-Anchor-Styles/tests.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/09-Anchor-Styles/tests.js b/exercises/09-Anchor-Styles/tests.js index 724de97d..1dea80c1 100644 --- a/exercises/09-Anchor-Styles/tests.js +++ b/exercises/09-Anchor-Styles/tests.js @@ -20,7 +20,7 @@ describe("All the styles should be applied", () => { expect(cssArray).toBe(".threeDimension"); }) - test("The 'a' tag in the index.html should not be deleted", () => { + test("The tag in the index.html should not be deleted", () => { // we can read from the source code // console.log(html.toString()); expect(html.toString().indexOf(` -1).toBeTruthy(); @@ -71,7 +71,7 @@ describe("All the styles should be applied", () => { }); - test("You should not change the existing head tag elements", () => { + test("You should not change the existing tag elements", () => { let head = document.querySelector('head') expect(head).toBeTruthy() From e09f4394dc748c58c6cc5e1ee408f7a609cbcef8 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 11 Apr 2023 18:29:37 +0200 Subject: [PATCH 353/491] Update test.js --- exercises/01.1-The-Style-Tag/test.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/exercises/01.1-The-Style-Tag/test.js b/exercises/01.1-The-Style-Tag/test.js index a4be505b..0b3c714b 100644 --- a/exercises/01.1-The-Style-Tag/test.js +++ b/exercises/01.1-The-Style-Tag/test.js @@ -7,16 +7,16 @@ jest.dontMock('fs'); const p = document.querySelector("p"); -test("There should be a p tag", ()=>{ +test("There should be a

    tag", ()=>{ expect(p).toBeTruthy(); }) -test("The p tag color should be blue", ()=>{ +test("The

    tag color should be blue", ()=>{ let styles = window.getComputedStyle(p); expect(styles["color"]).toBe("blue"); }); -test("The p tag should not contain any inline style", ()=>{ +test("The

    tag should not contain any inline style", ()=>{ let emptyBodyInlineStyle = {}; expect(p.style._values).toEqual(emptyBodyInlineStyle); -}); \ No newline at end of file +}); From 9ecb581595a0dc757ae532212cd4c03b858b3c03 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 11 Apr 2023 18:31:03 +0200 Subject: [PATCH 354/491] Update tests.js --- exercises/01.2-Your-First-Style/tests.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/01.2-Your-First-Style/tests.js b/exercises/01.2-Your-First-Style/tests.js index 0eabdf65..32bf609b 100644 --- a/exercises/01.2-Your-First-Style/tests.js +++ b/exercises/01.2-Your-First-Style/tests.js @@ -13,7 +13,7 @@ describe("All the styles should be applied", ()=>{ expect(styles["color"]).toBe("yellow"); }); - test("The body tag should not contain any inline style", ()=>{ + test("The tag should not contain any inline style", ()=>{ let bodyInlineStyle = document.getElementsByTagName("body"); let emptyBodyInlineStyle = {}; expect(bodyInlineStyle[0].style._values).toEqual(emptyBodyInlineStyle); @@ -24,7 +24,7 @@ describe("All the styles should be applied", ()=>{ expect(a.style._values).toEqual(emptyBodyInlineStyle); }); - test("You should not change the existing head tag elements", ()=>{ + test("You should not change the existing tag elements", ()=>{ let head = document.querySelector('head') expect(head).toBeTruthy() From 2cd2ff5aa6bfd125bf781e0691755660d3baac4a Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 11 Apr 2023 18:32:06 +0200 Subject: [PATCH 355/491] Update tests.js --- exercises/02-Separate-Stylesheet/tests.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/exercises/02-Separate-Stylesheet/tests.js b/exercises/02-Separate-Stylesheet/tests.js index e3f44fc4..2a46c829 100644 --- a/exercises/02-Separate-Stylesheet/tests.js +++ b/exercises/02-Separate-Stylesheet/tests.js @@ -10,13 +10,13 @@ describe("All the styles should be applied", ()=>{ const link = document.querySelector("link"); const body = document.querySelector("body"); - test("The body tag should not contain any inline style", ()=>{ + test("The tag should not contain any inline style", ()=>{ document.querySelector("head").innerHTML = ``; let emptyBodyInlineStyle={}; expect(body.style._values).toEqual(emptyBodyInlineStyle) }); - test("You should not change the existing head tag elements", ()=>{ + test("You should not change the existing tag elements", ()=>{ let head = document.querySelector('head') expect(head).toBeTruthy() @@ -27,7 +27,7 @@ describe("All the styles should be applied", ()=>{ expect(href).toEqual('./styles.css') }); - test("Your body tag background color should be blue", ()=>{ + test("Your tag background color should be blue", ()=>{ let styles = window.getComputedStyle(body) expect(styles["background-color"]).toBe("blue") }) From 58022d125dc64847b5163ea9cbc197200cc4a157 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 11 Apr 2023 18:33:18 +0200 Subject: [PATCH 356/491] Update tests.js --- exercises/02.1-Background/tests.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/02.1-Background/tests.js b/exercises/02.1-Background/tests.js index eacf944a..b0612a23 100644 --- a/exercises/02.1-Background/tests.js +++ b/exercises/02.1-Background/tests.js @@ -11,7 +11,7 @@ describe("All the styles should be applied", ()=>{ const link = document.querySelector("link"); const title = document.querySelector('title'); - test("The body tag should not contain any inline style", ()=>{ + test("The tag should not contain any inline style", ()=>{ document.querySelector( "head" ).innerHTML = ``; @@ -37,7 +37,7 @@ describe("All the styles should be applied", ()=>{ expect(styles["background-repeat"]).toBe("repeat"); }); - test("You should not change the existing head tag elements", ()=>{ + test("You should not change the existing tag elements", ()=>{ let head = document.querySelector('head') expect(head).toBeTruthy() From 1d76734376f1bdbc0bdad0805045b01e45d6359d Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 11 Apr 2023 18:35:48 +0200 Subject: [PATCH 357/491] Update tests.js --- exercises/03-Inline-Styles/tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/03-Inline-Styles/tests.js b/exercises/03-Inline-Styles/tests.js index af82a4b3..e37fcb80 100644 --- a/exercises/03-Inline-Styles/tests.js +++ b/exercises/03-Inline-Styles/tests.js @@ -7,7 +7,7 @@ jest.dontMock("fs"); describe("The Table tag should contain inline style background: green", ()=>{ - test("You should not change the existing head tag elements", ()=>{ + test("You should not change the existing tag elements", ()=>{ let head = document.querySelector('head') expect(head).toBeTruthy() From 2be6b49a03b7b80b514529a58f48f33f6f1811f7 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 11 Apr 2023 18:36:58 +0200 Subject: [PATCH 358/491] Update test.js --- exercises/04-Class-Selector/test.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/exercises/04-Class-Selector/test.js b/exercises/04-Class-Selector/test.js index bd342616..320b80ea 100644 --- a/exercises/04-Class-Selector/test.js +++ b/exercises/04-Class-Selector/test.js @@ -6,10 +6,10 @@ document.documentElement.innerHTML = html.toString(); jest.dontMock("fs"); -describe("Both p tags should have a blue background", () => { +describe("Both

    tags should have a blue background", () => { const body = document.querySelector("body") const p = document.querySelectorAll("p"); - test("You should not change the existing head tag elements", () => { + test("You should not change the existing tag elements", () => { let head = document.querySelector('head') expect(head).toBeTruthy() @@ -20,7 +20,7 @@ describe("Both p tags should have a blue background", () => { expect(title).toBe('04 Class selector') }); - test("The body tag should not contain any inline style", () => { + test("The tag should not contain any inline style", () => { document.querySelector( "head" ).innerHTML = ``; @@ -28,10 +28,10 @@ describe("Both p tags should have a blue background", () => { expect(body.style._values).toEqual(emptyBodyInlineStyle) }); - test("There should be two p tags", () => { + test("There should be two

    tags", () => { expect(p.length).toBe(2) }); - test("Both p tags should have a class name 'b-blue'", () => { + test("Both

    tags should have a class name 'b-blue'", () => { p.forEach(e=>{ let eClass = e.getAttribute("class"); expect(eClass).toBe("b-blue") From f5f4148debd506029d51d8557af2103e1fdb09c6 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 11 Apr 2023 18:38:13 +0200 Subject: [PATCH 359/491] Update tests.js --- exercises/04.1-Combined-Rules/tests.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/04.1-Combined-Rules/tests.js b/exercises/04.1-Combined-Rules/tests.js index ab8cc62f..e325ce5f 100644 --- a/exercises/04.1-Combined-Rules/tests.js +++ b/exercises/04.1-Combined-Rules/tests.js @@ -11,7 +11,7 @@ describe("All the styles should be applied", ()=> { const link = document.querySelector("link"); const title = document.querySelector('title'); - test("The body tag should not contain any inline style", ()=> { + test("The tag should not contain any inline style", ()=> { document.querySelector( "head" ).innerHTML = ``; @@ -113,7 +113,7 @@ describe("All the styles should be applied", ()=> { expect(padLeft).toBeFalsy(); }); - test("You should not change the existing head tag elements", ()=> { + test("You should not change the existing tag elements", ()=> { let head = document.querySelector('head') expect(head).toBeTruthy() From d78f767fe2c84dd8d86dee46dd6c008b95ec8667 Mon Sep 17 00:00:00 2001 From: Jose Mora <109150320+josemoracard@users.noreply.github.com> Date: Tue, 11 Apr 2023 18:41:25 +0200 Subject: [PATCH 360/491] Update tests.js --- exercises/11-Font-Awesome-Icons/tests.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/exercises/11-Font-Awesome-Icons/tests.js b/exercises/11-Font-Awesome-Icons/tests.js index a1e11eee..b481bcfc 100644 --- a/exercises/11-Font-Awesome-Icons/tests.js +++ b/exercises/11-Font-Awesome-Icons/tests.js @@ -10,23 +10,23 @@ let cssArray = null; describe("All the styles should be applied", ()=>{ const icons = document.querySelectorAll("i"); - test("The ul tag should exist", ()=>{ + test("The