12 Scalable Vector Graphics (SVG)

Scalar Vector Graphics (SVG) is an XML language, where “X” stands for extensible. Unlike HTML, XML is more strict, and any errors may cause it to malfunction. Initially, the World Wide Web Consortium (W3C) attempted to update XHTML, but the inability to open websites due to mistakes proved to be a significant obstacle for XHTML 2.0. Consequently, HTML5 emerged as the standard that we still use today.

Just like HTML provides elements for defining headers, paragraphs, tables, and so on, SVG provides elements for squares, circles, ellipses, lines, polylines, polygons, and paths. These are the element names, and just like HTML, they are use the greater and less than symbols <circle cx="150" cy="150" r="80"/> where r is the radius of the circle. cx and cx the horizontal and vertical center position of the circle. As SVG is part of the Document object model DOM, it is possible to fill and stroke shapes using inline CSS, the same way you would using it in HTML. A 180 pixel square with a black stroke and red fill: <rect x="100" height="150" y="100" width="150" style="stroke: black; fill: red;"/>

Like illustrator files, SVG documents can become quite complex, as there can be many such elements, which can be filled with gradients or rotated, with filter effects, animations, interactivity, JavaScript, and so on. Because I do not expect anyone to hand code anything but the simplest shapes, there are programs available, like Illustrator, or the free Illustrator alternative, Inkscape, both of which exports and save to the SVG format. You can then link to that like any other picture or cut and paste the code directly into the HTML document. A benefit of SVG is that it works seamlessly into the HTML document, and uses CSS for naming layers, elements, etc.

I can display the same illustrator file I created for canvas using SVG. Where canvas renders the file into a bitmap, SVG remain vector, meaning it can scale without losing resolution.


Introductory Framing and Concluding Call to Action

At first glance, a website needs to introduce itself, and the main body should conclude with a clear call to action. Being mindful of your introduction and conclusion will result in a better website.

Look at yourself from the perspective of your target audience and ask yourself, “How will they perceive me?” Keep them engaged as you share all about yourself, and conclude with a clear call to action: what unique value or interest do you offer that aligns with their needs and desires?

It can be as simple as a QR code to the website or a “stay in touch” message.

A call to action (CTA) is a marketing term used to encourage readers or viewers of content to take a specific action. In an email newsletter, a CTA is usually a button or hyperlink that prompts the reader to take action, such as clicking a link to a website, signing up for a service, or making a purchase. The primary goal of a CTA is to motivate the audience to interact with the content and take action aligned with the intended objectives.

Here’s a selection of CTA’s for artists

  • Visit my website: Encourage your readers to visit your website to learn more about your artwork, upcoming events, or to purchase your work.
  • Follow me on social media: Invite your readers to follow you on your social media platforms to stay up-to-date on your latest work, events, and other updates.
  • Join my mailing list: Encourage your readers to join your mailing list to receive exclusive content, early access to new pieces, and special promotions.
  • Attend my upcoming event: If you have an upcoming exhibition, workshop, or other event, encourage your readers to attend and support your work.
  • Book a meeting: Invite your readers to arrange a studio visit.
  • Share my work with others: Ask your readers to share your work with friends and family who may be interested in purchasing or commissioning a piece.
  • Collaborate with me: If you are open to collaborations with other artists or creatives, invite your readers to reach out and discuss potential opportunities such as commissions.
  • Leave a review: Ask your satisfied customers to leave a review on your website or social media platforms to help attract new customers.
  • Commission a custom piece: Invite your readers to commission a custom piece that is tailored to their preferences.
  • Donate to a cause: If you have a cause or charity that you support, encourage your readers to donate or participate in a fundraiser.
  • Tell them where they can see more of your art: your website, a gallery, an exhibition, an online gallery.
  • Thank you for your support: Always express your gratitude and thank your readers for their ongoing support of your art and creative endeavors.

08 CSS Frameworks

There are many CSS frameworks. A CSS framework is comprised of ready made CSS to be applied to HTML. If you learn a framework, you can apply it while marking up the content and end up with a finished webpage by the time you finish. They have been carefully crafted and present all kinds of ready-made front end solutions. Most create ready made classes that you apply to your HTML. They often incorporate SASS a CSS preprocessor ( CSS matures?), or Post CSS to extend CSS, and include useful JavaScript snippets. Frameworks have classes built-in for common website elements: footer, slider, navigation bar, hamburger menu, column-based layouts, etc. Some, like Pico, target the HTML elements themselves without creating classes.

The advantages of a CSS Framework is speed. Ready to use CSS styles allows for fast and convenient development. They make it is easy to implement advanced features and visual elements, from forms, buttons, navbars, breadcrumbs, and users can take advantage of clean symmetrical layouts. As they are tweaked to work on all browsers, the finished product just works.

The disadvantage is that they take time to learn, guide development along predictable lines. Websites look like they originated using one or another CSS framework. That is not necessarily a bad thing, but hand-coding is much more flexible. It takes longer to learn how to hand code well enough to pull a unique website off as well as one generated by using a CSS framework.

CSS Frameworks

Bootstrap has been around for a long time, morphed from the old way of doing layout, is very comprehensive, and has a sizable following. Looks great, but predictable.

Other CSS frameworks have stepped up, from Tailwind Which is more flexible than bootstrap (watch tutorial) to minimalist Pico that jettisons the use of classes and targets the HTML elements themselves. These links should get you started.

08 Website Builders

In this assignment, you will create an issue website using website-generating software. This task will provide you with an opportunity to learn about website-generating software. If you have previously created a site using a website builder, you may submit it, as the objective of this exercise is to demonstrate your familiarity with the technology.

Content Management Systems (CMS)

Most web sites in the real world are not hand coded, but use a Content Management System, or CMS. A CMS uses a database and a programing language to create the web pages. Sites like Amazon, Google, The NY Times, or financial institutions use proprietary CMSs. Most sites do not need that kind of performance or redundancy, and are built using open source software, usually PHP, Apache, and the database MySQL. While a CMS does not have to use a database, most do.

Open Source Solutions

WordPress, Drupal and Joomla are three popular open source CMS platforms. WordPress has become the most popular of these, with a 65% market share. It powers 45% of all websites. Another type of website builder is a CSS framework. These solutions are free, but require hosting.

Commercial Solutions

Website-generating software is typically free to try, but often require subscription fees. If the subscription fee is $10 a month, it is $120 per year, and $600 every five years. Many fees are higher. The subscription fee should be calculated based on the anticipated lifespan of your website.
The WordPress platform and CSS frameworksare free, but you need to secure hosting and a domain name, which typically costs from $16 per year if you use the $1 hosting plan recommended in the tools of the trade article. Adobe’s Express is also free, provided you have an Adobe subscription. Cargo is free for Parsons students (using the Cargo Student Code: 2905333d), but you will eventually transition out of student status. Wix and SquareSpace offer a 50% discount for the first year as a student, but they revert to regular pricing thereafter. If you intend to sell products on your website, Shopify, SquareSpace, and Wix offer commerce plans, but these plans typically cost over $25 per month or $1,500 over five years.
WordPress developed the Woo Commerce plugin, which is free. Please don’t confuse the free access to their software on WordPress.org with the commercial services offered by Woo Commerce plugin and WordPress.com.
Website-generating software does not provide the same level of control and customization as traditional coding languages. However, the templates and graphical user interfaces can make the process relatively straightforward.
I encourage exploration of the different website-generating software options. A manual ( source) for WordPress 6.5 will help get you started. Additional helpful guides and resources are available online for all of these options.

05 AI for Layout

using artificial intelligence to help you create your website, is not as straightforward as asking a simple question. It will answer in code, but you will need to know how to place the code, and how to fill it in, so it looks like the website you’re hoping to make. That said, it’s easy enough to use it to create various examples of what you are trying to work with, and can be an incredible learning aid. That’s why I’m pushing you to use AI to help you, because, if you become a better coder, and understand what this all means, because of it, that’s the answer I’m looking for. Be liberal in the the questions you ask and request corrections, to get the code you want.

ChatGPT 3.5

I’ve had some luck with ChatGPT 3.5 and 4, but it’s a mixed bag. Not everything works, and you have to know what you are doing before you can understand what does and does not work, so use it, but beware. ChatGPT 4 is better than 3.5, but I let my subscription expire, and I can’t expect everyone to spend the $20 a month on the newer version, so this uses 3.5.

Open up a CodePen and put in the HTML, CSS, and Javascript that the program provides. My recommendations is to build modular, meaning first get the general outlines working, then ask it to build smaller things. It does not do well to put the whole thing together, so I am not worried about you not leaning how to code. You have to know enough about what you are doing, to make this work.

What follows are a number of prompts. The first one is pretty lame, but I remain too general. I try to tighten it up, and make it more interesting, but as you can see, I never get beyond a simple wireframe. This may help you get started, and I think that, by looking at the code it produces, you get a better idea of how the code works, but I think, in the end, you will have to code your website yourself, maybe with some AI, but it sure will not create your website for you.

First AI Example I need a really fantastic dynamite pulsating illustration portfolio website that can sell my illustrations to all kinds of audiences, from hip to corporate. Make it magical.

See the Pen
AI#3
by onno de jong (@onno)
on CodePen.

Second AI Example Can you create a responsive illustration portfolio website using CSS grid? I would like it to have 6 sections for different styles . Please color the background of each section a different color.

See the Pen
AI#2
by onno de jong (@onno)
on CodePen.

Third AI example Can you help me create a complete web page using different layout strategies. This is for an illustration portfolio and it needs to have several sections. I would prefer if the menu were fixed or used sticky positioning, and that the sections are animated and slide from one the next when I press the menu. Make each section’s background a different color.

See the Pen
Untitled
by onno de jong (@onno)
on CodePen.


.

08 Engage AI Project

As an alternative to an issue website using a website builder, you can utilize AI to improve your portfolio. This project builds on the energy you put into creating your portfolio, by engaging AI to help you make it better. Now that you understand what it takes to build a website, you can rely on AI (or any other technology) to help you perfect it.
This is not as easy as asking AI to create your website. You need to be in the driver’s seat. Ask it to help you code certain things, and integrate the AI code goodness back into your self-promotion website 2.0. Use any source for code you find on the web or AI. All I ask is that you document where you got the code from. Does it have to be your portfolio? No. You can create a website about any issue you like.

03 Container Queries

Container queries enable you to apply styles to an element based on the size of the element’s container. While Media Queries ushered in an ethic of responsive design, it is not granular. The entire page has to go through the viewport breaking points, which is fine for the major design elements, but not so good for the many tweaks that go into designing a responsive web page. Finessing the design for different devices often requires many breakpoints. Container queries allow child elements to react to changes in their parent element size, making it possible to finesse every element of the page’s responsive design. You can now increase or decrease padding, change font sizes, add or remove background images, or completely change the display property and orientation of child elements, for example, based on the size of the parent.

How to set up the Parent/Container

  1. Target the element you wish to target as a containment query by using class or id.
  2. Set up the containment context for the element by setting the container-type property. The values are size, which is the logical properties description that describes both height and width, inline-size, which means only width, and normal, which means neither height nor width, but the element is a query container that can receive container style queries. Because we most often think in terms of width, inline-with is the easiest value to.
  3. Name your container, using the container-name property. You can give it more than one name (separated by a space), in case you wish to target it with more than one @container rule. Chose an context appropriate name.
  4. The container shorthand does both: container: Charley / inline-size.
  5. Finally, target the named container @container Charley (min-width: 700px) { } It works just like media queries, so you already understand how to implement those, it is easy to style the child element definitions.The styles are applied when the conditions are true.
  6. The container elements should be beneath the original style definitions describing the element, to override the existing style.

Container Queries specific measurements

Measurements for the viewport are standardized. How wide is it, how high is it, etc. Container queries have similar measurements requirements, and have corresponding measurements:

  • cqw (container query width) – 1% of the container’s width
  • cqh (container query height) – 1% of the container’s height
  • cqi (container query inline) – 1% of the container’s inline size
  • cqb (container query block) – 1% of the container’s block size
  • cqmin (container query minimum) – the smaller value of cqi and cqb
  • cqmax (container query maximum) – the larger value of cqi and cqb

That allows you to write, for example, a text size that varies in height depending on the parent’s size. font-size: clamp(2rem, 15cqi, 4rem); where the 15cqi refers to 15% of the container’s inline size. The clamp() function gives this a minimum value of 2rem, and a maximum of 4rem. In the meantime, if 15cqi is between these values, the text will shrink and grow correspondingly.

Self-Aware Modules

I can see container queries being used to build all kinds of self aware widgets that behave as you expect them to, no matter where they are placed. Container queries can be reused anywhere on the page without needing to know the actual size, as it will restyle itself to fit whatever space is allocated. As a designer, you think in modular patterns rather than pages, where responsive design is not thought of in regards to the device, but to all the other elements on the page.

See Container Queries in action

Click on the logo to go to CodePen to see it (in the upper right hand corner, where it says edit on CodePen)

See the Pen
CSS Container Queries Demo (+ polyfill)
by Bramus (@bramus)
on CodePen.

Additional Resources

09 Call to Action

A call to action can bring success to your web presence. If you use the right words, you can inspire your audience to take action — like download your resume, or project, etc. If it does not stand out, your audience may not notice it.

What is a call to action?

A call to action (or CTA) is a prompt designed to inspire the target audience of a marketing campaign to take a desired action. It encourages people to click on a link, leave a social media comment, visit an online store, make a purchase, etc. It can be a Text link, a Button, or even plain text without a link. “Buy Now” or “Download Now” are typical examples of simple calls to action.

A good call to action triggers the user to do what you wish them to do. Users often need some direction as to what to do next. It is possible to use several call to actions to engage the user’s possible options. A call to action is not the menu system, which represents the site architecture.

A call to action uses short, strong, and persuasive language. It needs to call up a value proposition that is relevant and clear. It should entice the user, by provoking emotion or enthusiasm. A good call to action engages the audience with a narrative they already support and believe in, like exclusivity, as many people fear missing out. Last chance, limited lime, or urgent are used to get people to act.

A call to action is often the first thing you see, but it can be at the end of a story, for example. Wherever it appears, a call to action provides your reader with an actionable task.

It starts with a verb. Strong verbs that directly engage users for commerce are buy, now, shop, save, For a non profit, donate, volunteer, give, support. For a newsletter or activity, subscribe, join. There are many strong verbs, like learn more, see how, find out, click here, continue, etc. A Call to Action is usually very short, but it can run longer, too, such as “Subscribe today so you’ll never miss a post.”

A list of strong verbs for different calls.

  • Ecommerce: Buy, Shop, Order, Reserve, Save, Add to Cart, Pick, View
  • Non-profit: Donate, Commit, Volunteer, Adopt, Give, Support
  • Newsletter or community: Subscribe, Join, Sign Up, Refer,
  • Freebie giveaway: Download, Get, Grab, Claim, Take advantage of
  • General: Learn More, See More, See How, Start, Find Out, Check it Out, Click here, Continue, Swipe Up

The possibilities are endless.

< !DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">




Parsons 2017 Fall Web Design





how do I create a responsive three column responsive web page using css grid.  

To create a three-column responsive web page using CSS grid, you can follow these steps:

  1. Create the HTML structure:

<div class=“grid-container”>

  <div class=“grid-item”>Column 1</div>

  <div class=“grid-item”>Column 2</div>

  <div class=“grid-item”>Column 3</div>

</div>

  1. Add CSS to create the grid container and set the number of columns:

.grid-container {

  display: grid;

  grid-template-columns: repeat(3, 1fr);

  grid-gap: 20px;

}

This will create a grid container with three columns of equal width and a gap of 20 pixels between them.

  1. Add CSS to make the grid responsive:

@media screen and (max-width: 768px) {

  .grid-container {

    grid-template-columns: 1fr;

  }

}

This will change the grid to a single column when the screen size is less than or equal to 768 pixels.

  1. Add CSS to style the grid items:

.grid-item {

  background-color: #fff;

  padding: 20px;

  text-align: center;

  font-size: 20px;

  box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.3);

}

This will add some basic styling to the grid items, including a white background, padding, center alignment, font size, and a box shadow.

Here’s the complete CSS code:

.grid-container {

  display: grid;

  grid-template-columns: repeat(3, 1fr);

  grid-gap: 20px;

}

@media screen and (max-width: 768px) {

  .grid-container {

    grid-template-columns: 1fr;

  }

}

.grid-item {

  background-color: #fff;

  padding: 20px;

  text-align: center;

  font-size: 20px;

  box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.3);

}

Note that you can customize the CSS to suit your specific needs and design preferences.

Onno:

great! now create a portfolio web page for a design student looking for employment

Sure! Here’s an example of a portfolio web page for a design student looking for employment:

HTML code:

<!DOCTYPE html>

<html lang=“en”>

  <head>

    <meta charset=“UTF-8”>

    <title>Design Portfolio | Jane Doe</title>

    <link rel=“stylesheet” href=“style.css”>

  </head>

  <body>

    <header>

      <h1>Jane Doe</h1>

      <nav>

        <ul>

          <li><a href=“#about”>About</a></li>

          <li><a href=“#work”>Work</a></li>

          <li><a href=“#contact”>Contact</a></li>

        </ul>

      </nav>

    </header>

    <main>

      <section id=“about”>

        <h2>About Me</h2>

        <p>I am a recent graduate from XYZ University with a degree in Graphic Design. Throughout my studies, I have developed a strong passion for visual storytelling and creating unique designs that capture the essence of a brand. I am constantly seeking new challenges and opportunities to expand my skill set.</p>

        <img src=“profile-pic.jpg” alt=“Jane Doe”>

      </section>

      <section id=“work”>

        <h2>My Work</h2>

        <div class=“grid-container”>

          <div class=“grid-item”>

            <img src=“project1.jpg” alt=“Project 1”>

            <h3>Project 1</h3>

            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi euismod purus velit, a volutpat enim pellentesque ac.</p>

          </div>

          <div class=“grid-item”>

            <img src=“project2.jpg” alt=“Project 2”>

            <h3>Project 2</h3>

            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi euismod purus velit, a volutpat enim pellentesque ac.</p>

          </div>

          <div class=“grid-item”>

            <img src=“project3.jpg” alt=“Project 3”>

            <h3>Project 3</h3>

            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi euismod purus velit, a volutpat enim pellentesque ac.</p>

          </div>

        </div>

      </section>

      <section id=“contact”>

        <h2>Contact Me</h2>

        <form action=“#” method=“post”>

          <label for=“name”>Name:</label>

          <input type=“text” id=“name” name=“name”>

          <label for=“email”>Email:</label>

          <input type=“email” id=“email” name=“email”>

          <label for=“message”>Message:</label>

          <textarea id=“message” name=“message”></textarea>

          <button type=“submit”>Send Message</button>

        </form>

      </section>

    </main>

    <footer>

      <p>&copy; 2023 Jane Doe</p>

    </footer>

  </body>

</html>

CSS code:

/* Global styles */

* {

  box-sizing: border-box;

  margin: 0;

  padding: 0;

}

body {

  font-family: Arial, sans-serif;

  font-size: 16px;

  line-height: 1.5;

}

h1, h2, h3 {

  font-family: ‘Montserrat’, sans-serif;

}

a {

  color: #333;

  text-decoration: none;

}

a

onno:

Can you use images from the web to make this attractive?

Sure! Here’s an updated HTML code for the portfolio web page, with image URLs from the web:

<!DOCTYPE html>

<html lang=“en”>

  <head>

    <meta charset=“UTF-8”>

    <title>Design Portfolio | Jane Doe</title>

    <link rel=“stylesheet” href=“style.css”>

  </head>

  <body>

    <header>

      <h1>Jane Doe</h1>

      <nav>

        <ul>

          <li><a href=“#about”>About</a></li>

          <li><a href=“#work”>Work</a></li>

          <li><a href=“#contact”>Contact</a></li>

        </ul>

      </nav>

    </header>

    <main>

      <section id=“about”>

        <h2>About Me</h2>

        <p>I am a recent graduate from XYZ University with a degree in Graphic Design. Throughout my studies, I have developed a strong passion for visual storytelling and creating unique designs that capture the essence of a brand. I am constantly seeking new challenges and opportunities to expand my skill set.</p>

        <img src=“https://picsum.photos/400/400?random=1” alt=“Jane Doe”>

      </section>

      <section id=“work”>

        <h2>My Work</h2>

        <div class=“grid-container”>

          <div class=“grid-item”>

            <img src=“https://picsum.photos/400/400?random=2” alt=“Project 1”>

            <h3>Project 1</h3>

            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi euismod purus velit, a volutpat enim pellentesque ac.</p>

          </div>

          <div class=“grid-item”>

            <img src=“https://picsum.photos/400/400?random=3” alt=“Project 2”>

            <h3>Project 2</h3>

            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi euismod purus velit, a volutpat enim pellentesque ac.</p>

          </div>

          <div class=“grid-item”>

            <img src=“https://picsum.photos/400/400?random=4” alt=“Project 3”>

            <h3>Project 3</h3>

            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi euismod purus velit, a volutpat enim pellentesque ac.</p>

          </div>

        </div>

      </section>

      <section id=“contact”>

        <h2>Contact Me</h2>

        <form action=“#” method=“post”>

          <label for=“name”>Name:</label>

          <input type=“text” id=“name” name=“name”>

          <label for=“email”>Email:</label>

          <input type=“email” id=“email” name=“email”>

          <label for=“message”>Message:</label>

          <textarea id=“message” name=“message”></textarea>

          <button type=“submit”>Send Message</button>

        </form>

      </section>

    </main>

    <footer>

      <p>&copy; 2023 Jane Doe</p>

    </footer>

  </body>

</html>

Note that the src attributes of the img elements now point to image URLs from the web, obtained using the Lorem Picsum service.

Onno:

No background picture to make eveything unified? How about design elements. Can we do it in 3 columns?

Sure! Here’s an updated HTML code for the portfolio web page with a background image, design elements, and a three-column layout using CSS Grid:

<!DOCTYPE html>

<html lang=“en”>

  <head>

    <meta charset=“UTF-8”>

    <title>Design Portfolio | Jane Doe</title>

    <link rel=“stylesheet” href=“style.css”>

  </head>

  <body>

    <header>

      <h1>Jane Doe</h1>

      <nav>

        <ul>

          <li><a href=“#about”>About</a></li>

          <li><a href=“#work”>Work</a></li>

          <li><a href=“#contact”>Contact</a></li>

        </ul>

      </nav>

    </header>

    <main>

      <section id=“about” class=“section”>

        <div class=“grid-container”>

          <div class=“grid-item”>

            <h2>About Me</h2>

            <p>I am a recent graduate from XYZ University with a degree in Graphic Design. Throughout my studies, I have developed a strong passion for visual storytelling and creating unique designs that capture the essence of a brand. I am constantly seeking new challenges and opportunities to expand my skill set.</p>

          </div>

          <div class=“grid-item”>

            <img src=“https://picsum.photos/400/400?random=1” alt=“Jane Doe”>

          </div>

        </div>

      </section>

      <section id=“work” class=“section”>

        <h2>My Work</h2>

        <div class=“grid-container”>

          <div class=“grid-item”>

            <img src=“https://picsum.photos/400/400?random=2” alt=“Project 1”>

            <h3>Project 1</h3>

            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi euismod purus velit, a volutpat enim pellentesque ac.</p>

          </div>

          <div class=“grid-item”>

            <img src=“https://picsum.photos/400/400?random=3” alt=“Project 2”>

            <h3>Project 2</h3>

            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi euismod purus velit, a volutpat enim pellentesque ac.</p>

          </div>

          <div class=“grid-item”>

            <img src=“https://picsum.photos/400/400?random=4” alt=“Project 3”>

            <h3>Project 3</h3>

            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi euismod purus velit, a volutpat enim pellentesque ac.</p>

          </div>

        </div>

      </section>

      <section id=“contact” class=“section”>

        <h2>Contact Me</h2>

        <form action=“#” method=“post”>

          <label for=“name”>Name:</label>

          <input type=“text” id=“name” name=“name”>

          <label for=“email”>Email:</label>

          <input type=“email” id=“email” name=“email”>

          <label for=“message”>Message:</label>

          <textarea id=“message” name=“message”></textarea>

          <button type=“submit”>Send Message</button>

        </form>

      </section>

    </main>

    <footer>

      <p>&copy; 2023 Jane Doe</p>

    </footer>

  </body>

</html>

And

/* Reset default margin and padding */

* {

  margin: 0;

  padding: 0;

}

/* Set the background image */

body {

  background-image: url(“https://picsum.photos/1920/1080?random=5”);

  background-size: cover;

}

/* Style the header */

header {

  display: flex;

  justify-content: space-between;

  align-items: center;

  padding: 20px;

}

h1 {

  font-size: 2.5rem;

  font-weight: bold;

  color: #fff;

}

nav ul {

  display: flex;

  list-style: none;

}

nav li {

  margin: 0 20px;

}

nav a {

  color: #fff;

  text-decoration: none;

  font-size: 1.2rem;

  font-weight: bold;

}

/* Style the main content */

main {

  display: flex;

  flex-direction: column;

  align-items: center;

  padding: 50px 20px;

}

.section {

  width: 100%;

  margin-bottom: 50px;

}

.grid-container {

  display: grid;

  grid-template-columns: repeat(3, 1fr);

  gap: 30px;

}

.grid-item {

  background-color: #fff;

  padding: 20px;

  border-radius: 10px;

  box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);

}

img {

  max-width: 100%;

  height: auto;

  margin-bottom: 20px;

  border-radius: 5px;

}

h2 {

  font-size: 2rem;

  font-weight: bold;

  color: #fff;

  margin-bottom: 20px;

}

h3 {

  font-size: 1.5rem;

  font-weight: bold;

  margin-bottom: 10px;

}

p {

  font-size: 1.2rem;

  line-height: 1.5;

  margin-bottom: 20px;

}

form label {

  font-size: 1.2rem;

  font-weight: bold;

  margin-bottom: 10px;

  display: block;

}

form input,

form textarea {

  padding: 10px;

  margin-bottom: 20px;

  border-radius: 5px;

  border: none;

  font-size: 1.2rem;

}

form button {

  background-color: #333;

  color: #fff;

  padding: 10px 20px;

  border-radius: 5px;

  border: none;

  font-size: 1.2rem;

  font-weight: bold;

  cursor: pointer;

  transition: background-color 0.2s ease-in-out;

}

form button:hover {

  background-color: #555;

}

This should style the HTML code I provided earlier and create a visually appealing portfolio web page with the requested design elements.

Onno:

Nw could you make it responsive so it looks good on a smart phone?

Sure! Here’s the updated CSS code with media queries to make the portfolio web page responsive for smaller screens such as smartphones:

/* Reset default margin and padding */

* {

  margin: 0;

  padding: 0;

}

/* Set the background image */

body {

  background-image: url(“https://picsum.photos/1920/1080?random=5”);

  background-size: cover;

}

/* Style the header */

header {

  display: flex;

  justify-content: space-between;

  align-items: center;

  padding: 20px;

}

h1 {

  font-size: 2.5rem;

  font-weight: bold;

  color: #fff;

}

nav ul {

  display: flex;

  list-style: none;

}

nav li {

  margin: 0 20px;

}

nav a {

  color: #fff;

  text-decoration: none;

  font-size: 1.2rem;

  font-weight: bold;

}

/* Style the main content */

main {

  display: flex;

  flex-direction: column;

  align-items: center;

  padding: 50px 20px;

}

.section {

  width: 100%;

  margin-bottom: 50px;

}

.grid-container {

  display: grid;

  grid-template-columns: repeat(3, 1fr);

  gap: 30px;

}

.grid-item {

  background-color: #fff;

  padding: 20px;

  border-radius: 10px;

  box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);

}

img {

  max-width: 100%;

  height: auto;

  margin-bottom: 20px;

  border-radius: 5px;

}

h2 {

  font-size: 2rem;

  font-weight: bold;

  color: #fff;

  margin-bottom: 20px;

}

h3 {

  font-size: 1.5rem;

  font-weight: bold;

  margin-bottom: 10px;

}

p {

  font-size: 1.2rem;

  line-height: 1.5;

  margin-bottom: 20px;

}

form label {

  font-size: 1.2rem;

  font-weight: bold;

  margin-bottom: 10px;

  display: block;

}

form input,

form textarea {

  padding: 10px;

  margin-bottom: 20px;

  border-radius: 5px;

  border: none;

  font-size: 1.2rem;

}

form button {

  background-color: #333;

  color: #fff;

  padding: 10px 20px;

  border-radius: 5px;

  border: none;

  font-size: 1.2rem;

  font-weight: bold;

  cursor: pointer;

  transition: background-color 0.2s ease-in-out;

}

form button:hover {

  background-color: #555;

}

/* Media queries for smaller screens */

@media screen and (max-width: 768px) {

  header {

    flex-direction: column;

    align-items: center;

  }

  nav ul {

    margin-top: 20px;

  }

  .grid-container {

    grid-template-columns: repeat(1, 1fr);

  }

  

  .grid-item {

    margin-bottom: 30px;

  }

  h1 {

    font-size: 2rem;

    text-align: center;

  }

  h2 {

    font-size: 1.5rem;

  }

  h3 {

    font-size: 1.2rem;

  }

  p {


Site Links