Home > Back-end >  How can I convert a three-column gradient to two columns?
How can I convert a three-column gradient to two columns?

Time:03-03

I'm trying to do a 50/50 vertical background. I am attempting to use background-gradient to accomplish this but it is splitting the background into thirds instead of in halves.

If I change the degrees to 90 it will split the screen in half horizontally but when changed to 180, it's either only splitting the top half of the screen or it's splitting the screen into thirds. Could someone explain what is going on and how to fix it?

enter image description here

  body {
  background: linear-gradient(180deg, rgba(1, 91, 187, 1) 50%, rgba(254, 213, 0, 1) 50%);
}

h2 {
  text-align: center;
  font: 100% Stencil;
  color: red;
  font-size: 4em;
}

caption {
  text-align: center;
  font: 100% Ink Free;
  color: pink;
  font-size: 3.5em;
  font-weight: bold;
  margin-bottom: .5em;
}

table {
  margin-left: auto;
  margin-right: auto;
  border-collapse: collapse;
  text-align: center;
}

th {
  font: 100% Old English Text MT;
  font-weight: bold;
  font-size: 3em;
}

td {
  font: 100% Lucida Calligraphy;
  font-size: 2em;
  border-spacing: 0;
  border: 1px solid black;
  padding-top: .5em;
  padding-bottom: .5em;
  padding-left: 2.5em;
  padding-right: 2.5em;
}

tr td:nth-child(1),
tr td:nth-child(3) {
  background: #33adff;
}

tr td:nth-child(2) {
  background: #c0e0f2;
<h2>A Table of Animals, Plants, and Cars</h2>
<table>
  <caption>Here is My Second Table in HTML</caption>
  <thead>
    <tr>
      <th scope="col">&#128049;Animals&#128054;</th>
      <th scope="col">&#127794;Plants&#127795;</th>
      <th scope="col">&#128664;Cars&#128663;</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Cat</td>
      <td>Pine</td>
      <td>Chevrolet</td>
    </tr>
    <tr>
      <td>Dog</td>
      <td>Oak</td>
      <td>Ford</td>
    </tr>
    <tr>
      <td>Rabbit</td>
      <td>Cedar</td>
      <td>Dodge</td>
    </tr>
    <tr>
      <td>Wolf</td>
      <td>Spruce</td>
      <td>Toyota</td>
    </tr>
  </tbody>
</table>

CodePudding user response:

Just add no-repeat to your background property

background: linear-gradient(180deg, rgba(1,91,187,1) 50%, rgba(254,213,0,1) 50%) no-repeat;

CodePudding user response:

Perhaps the desired effect you want to accomplish can be done with another aproach, using :before and :after pseudo-selectors. Something like this:

.split-bg {
    display: block;
    position: relative;
    min-height: 100vh;
    width: 100%;
}

.split-bg::before,
.split-bg::after {
    content: "";
    position: absolute;
    width: 100%;
    height: 50%;
    top: 0;
    left: 0;
}

.split-bg::before {
    background-color: rgba(1,91,187,1);
}

.split-bg::after {
    background-color: rgba(254,213,0,1);
    transform: translateY(100%);
}

CodePudding user response:

Add

  background-repeat: no-repeat;
  background-attachment: fixed;
   height: 100%

to your background.

With CSS background-attachement, you tell css to fix the body background.

Also a good practice is to add height:100% as well to make the body full height of the screen.

  body {
  background: linear-gradient(180deg, rgba(1, 91, 187, 1) 50%, rgba(254, 213, 0, 1) 50%);
  height: 100%;
  background-attachment: fixed;
  background-repeat: no-repeat;
}

h2 {
  text-align: center;
  font: 100% Stencil;
  color: red;
  font-size: 4em;
}

caption {
  text-align: center;
  font: 100% Ink Free;
  color: pink;
  font-size: 3.5em;
  font-weight: bold;
  margin-bottom: .5em;
}

table {
  margin-left: auto;
  margin-right: auto;
  border-collapse: collapse;
  text-align: center;
}

th {
  font: 100% Old English Text MT;
  font-weight: bold;
  font-size: 3em;
}

td {
  font: 100% Lucida Calligraphy;
  font-size: 2em;
  border-spacing: 0;
  border: 1px solid black;
  padding-top: .5em;
  padding-bottom: .5em;
  padding-left: 2.5em;
  padding-right: 2.5em;
}

tr td:nth-child(1),
tr td:nth-child(3) {
  background: #33adff;
}

tr td:nth-child(2) {
  background: #c0e0f2;
<h2>A Table of Animals, Plants, and Cars</h2>
<table>
  <caption>Here is My Second Table in HTML</caption>
  <thead>
    <tr>
      <th scope="col">&#128049;Animals&#128054;</th>
      <th scope="col">&#127794;Plants&#127795;</th>
      <th scope="col">&#128664;Cars&#128663;</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Cat</td>
      <td>Pine</td>
      <td>Chevrolet</td>
    </tr>
    <tr>
      <td>Dog</td>
      <td>Oak</td>
      <td>Ford</td>
    </tr>
    <tr>
      <td>Rabbit</td>
      <td>Cedar</td>
      <td>Dodge</td>
    </tr>
    <tr>
      <td>Wolf</td>
      <td>Spruce</td>
      <td>Toyota</td>
    </tr>
  </tbody>
</table>

Edit: make background:linear-garident not fixed, but based on the content, use background-attachement:scroll instead

body {
  background: linear-gradient(180deg, rgba(1, 91, 187, 1) 50%, rgba(254, 213, 0, 1) 50%);
  height: 100%;
  background-attachment: scroll;
  background-repeat: no-repeat;
}

h2 {
  text-align: center;
  font: 100% Stencil;
  color: red;
  font-size: 4em;
}

caption {
  text-align: center;
  font: 100% Ink Free;
  color: pink;
  font-size: 3.5em;
  font-weight: bold;
  margin-bottom: .5em;
}

table {
  margin-left: auto;
  margin-right: auto;
  border-collapse: collapse;
  text-align: center;
}

th {
  font: 100% Old English Text MT;
  font-weight: bold;
  font-size: 3em;
}

td {
  font: 100% Lucida Calligraphy;
  font-size: 2em;
  border-spacing: 0;
  border: 1px solid black;
  padding-top: .5em;
  padding-bottom: .5em;
  padding-left: 2.5em;
  padding-right: 2.5em;
}

tr td:nth-child(1),
tr td:nth-child(3) {
  background: #33adff;
}

tr td:nth-child(2) {
  background: #c0e0f2;
<h2>A Table of Animals, Plants, and Cars</h2>
<table>
  <caption>Here is My Second Table in HTML</caption>
  <thead>
    <tr>
      <th scope="col">&#128049;Animals&#128054;</th>
      <th scope="col">&#127794;Plants&#127795;</th>
      <th scope="col">&#128664;Cars&#128663;</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Cat</td>
      <td>Pine</td>
      <td>Chevrolet</td>
    </tr>
    <tr>
      <td>Dog</td>
      <td>Oak</td>
      <td>Ford</td>
    </tr>
    <tr>
      <td>Rabbit</td>
      <td>Cedar</td>
      <td>Dodge</td>
    </tr>
    <tr>
      <td>Wolf</td>
      <td>Spruce</td>
      <td>Toyota</td>
    </tr>
  </tbody>
</table>

Also, pay attention to broswer capability, Safari seems not support it as @A Haworth suggested.

  • Related