Issue facing in Css grid in wordpress - css

I hope all are doing well, I am working on WordPress I have written an HTML markup for grid where at single row 2 images are need to show but the they are vertical showing each row a single image I want grid
<div class="our-specialties Container">
<h3 class="primary-text"> Pizzas </h3>
<div class="container-grid">
<?php
$args = array(
'post_type' => 'specialties',
'post_per_page' => 10,
'orderby' => 'title',
'order' => 'ASC',
'category_name'=> 'pizza'
) ;
$pizzas = new WP_Query($args);
while($pizzas->have_posts()): $pizzas->the_post(); ?>
<div class="columns2-4">
<a href="<?php the_permalink(); ?>">
<?php the_post_thumbnail('specialties'); ?>
<h4><?php the_title(); ?><span><?php the_field('price');?></span> </h4>
<?php the_content(); ?>
</a>
</div>
<?php endwhile; wp_reset_postdata(); ?>
</div>
<h3 class="primary-text"> Others </h3>
<div class="container-grid">
<?php
$args = array(
'post_type' => 'specialties',
'post_per_page' => 10,
'orderby' => 'title',
'order' => 'ASC',
'category_name'=> 'other'
) ;
$pizzas = new WP_Query($args);
while($pizzas->have_posts()): $pizzas->the_post(); ?>
<div class="columns2-4">
<a href="<?php the_permalink(); ?>">
<?php the_post_thumbnail('specialties'); ?>
<h4><?php the_title(); ?><span><?php the_field('price');?></span> </h4>
<?php the_content(); ?>
</a>
</div>
<?php endwhile; wp_reset_postdata(); ?>
</div>
</div>
code for the style sheet
#media only screen and (min-width:768px){
.container-grid{
margin-left: -10px;
margin-right: -10px;
}
.container-grid::after{
content:'';
display: block;
clear: both;
}
[class*='columns']{
padding: 0 10px;
float: left;
}
.columns2-4{
width: 50%;
}
}
here the images are show single at each row means a vertical one by one images are there, let me know where i am making mistake code looks perfect, the above css codes with classes in html is described, any trick so to solve css
i am creating a menus section, i am following an author but he has different result for the same code i have different

add box-sizing: border-box; to your column like this :
.container-grid {
margin-left: -10px;
margin-right: -10px;
}
.container-grid::after {
content: '';
display: block;
clear: both;
}
[class*='columns'] {
padding: 0 10px;
float: left;
box-sizing: border-box;
}
.columns2-4 {
width: 50%;
}
img {
max-width: 100%;
}
<div class="our-specialties Container">
<h3 class="primary-text"> Pizzas </h3>
<div class="container-grid">
<div class="columns2-4">
<a href="#">
<img src="http://lorempixel.com/200/200/" />
<h4>title<span>20 $</span> </h4>
lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum
</a>
</div>
<div class="columns2-4">
<a href="#">
<img src="http://lorempixel.com/200/200/" />
<h4>title<span>20 $</span> </h4>
lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum
</a>
</div>
<div class="columns2-4">
<a href="#">
<img src="http://lorempixel.com/200/200/" />
<h4>title<span>20 $</span> </h4>
lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum
</a>
</div>
<div class="columns2-4">
<a href="#">
<img src="http://lorempixel.com/200/200/" />
<h4>title<span>20 $</span> </h4>
lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum
</a>
</div>
</div>
</div>

Related

Two grids in a grid but different height? How?

Can I ask you for help with this https://play.tailwindcss.com/fIuk5aXhz0?
What I have now:
What I need here is to have the red div height lower, just after HELLO 2 of the green box, like this:
<link href="https://unpkg.com/tailwindcss#^2/dist/tailwind.min.css" rel="stylesheet"/>
<div class="grid grid-cols-4 gap-6">
<div class="grid gap-4 bg-red-500">
<span>HELLO 1</span>
<span>HELLO 2</span>
</div>
<div class="grid gap-4 col-span-3 bg-green-500">
<span>HELLO 1</span>
<span>HELLO 2</span>
<span>HELLO 3</span>
<span>HELLO 4</span>
<span>HELLO 5</span>
<span>HELLO 6</span>
</div>
</div>
I think you can use auto-rows-min and wrap these two of HELLO in a div in this case.
example
I understood it like this. Left column should not be affected by the height of the right column, right? If so, then I would have implemented it that way.
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/tailwindcss/2.2.19/tailwind.min.css' media='all' />
<div class="bg-gray-400 min-h-screen flex items-center justify-center ">
<div class="grid grid-cols-2 gap-2 w-1/2">
<div class="row-span-2 rounded ">
<div class="bg-white p-10 rounded bg-green-100 mb-2">Block A</div>
<div class="bg-white p-10 rounded bg-green-100 ">Block B</div>
</div>
<div class="row-span-2 bg-white p-10 rounded">lorem lorem lroem lorem lorem lroem lorem lorem lroemlorem lorem lroemlorem lorem lroem lorem lorem lroem lorem lorem lroem lorem lorem lroem lorem lorem lroem lorem lorem lroem lorem lorem lroem lorem lorem lroem lorem lorem lroem lorem lorem lroem lorem lorem lroem lorem lorem lroem lorem lorem lroem lorem lorem lroem lorem lorem lroem lorem lorem lroem lorem lorem lroem lorem lorem lroem lorem lorem lroem lorem lorem lroem lorem lorem lroem
lorem lorem lroem lorem lorem lroem lorem lorem lroem
</div>
</div>
</div>

Bootstrap center all columns in whole row

I'm currently creating a web page with Bootstrap and I'm using columns. My page looks like that:
I'd like to center the last column (in the second row) but the page is dynamic and I don't know how many containers there are.
I found this two solutions on Google:
1) Add this to my css:
.col-centered{
float: none;
margin: 0 auto;
}
2) Add this to the class tag attribute
col-lg-offset-4
But both solutions look like this:
That is not what i want. I want it to look like this:
How can i achieve this?
Bootstrap's columns are floating by default with css float property. With float we can't middle align columns. However with display: inline-block we can. All we need is to remove float from styles of columns and change them to inline-block with vertical-align: middle and you will get what you want. But don't forget to remove extra space that comes with inline-block.
Here is the trick.
.wrapper {
background: green;
padding: 20px 0;
}
.box {
border-radius: 10px;
margin-bottom: 30px;
background: #fff;
padding: 10px;
color: #000;
}
.center-align {
letter-spacing: -4px;
text-align: center;
font-size: 0;
}
.center-align [class*='col-'] {
display: inline-block;
vertical-align: top;
letter-spacing: 0;
font-size: 14px;
float: none;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<div class="wrapper">
<div class="container center-align">
<div class="row">
<div class="col-xs-4">
<div class="box">
<p>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</p>
</div>
</div>
<div class="col-xs-4">
<div class="box">
<p>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</p>
</div>
</div>
<div class="col-xs-4">
<div class="box">
<p>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</p>
</div>
</div>
<div class="col-xs-4">
<div class="box">
<p>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</p>
</div>
</div>
</div>
</div>
<div class="container center-align">
<div class="row">
<div class="col-xs-4">
<div class="box">
<p>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</p>
</div>
</div>
<div class="col-xs-4">
<div class="box">
<p>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</p>
</div>
</div>
<div class="col-xs-4">
<div class="box">
<p>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</p>
</div>
</div>
<div class="col-xs-4">
<div class="box">
<p>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</p>
</div>
</div>
<div class="col-xs-4">
<div class="box">
<p>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</p>
</div>
</div>
</div>
</div>
</div>
Note: Setting font-size: 0; letter-spacing: -4px on parent and applying parent's font-size: 14px; letter-spacing: 0 back on child elements will remove white space that comes with inline-block.
Bootstrap has built-in functionality to achieve the layout you are after, without the introduction of additional CSS rules. Simply use the .col-md-offset-* class:
Move columns to the right using .col-md-offset-* classes. These classes increase the left margin of a column by * columns. For example, .col-md-offset-4 moves .col-md-4 over four columns.
Your layout would end up looking similar to this:
.show-grid {
margin-bottom: 15px;
}
.your-custom-div {
height: 50px;
background-color: green;
color: white;
text-align: center;
}
<!DOCTYPE html>
<html lang="en">
<head>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
<div class="container">
<div class="row show-grid">
<div class="col-md-4">
<div class="your-custom-div">
.col-md-4
</div>
</div>
<div class="col-md-4">
<div class="your-custom-div">
.col-md-4
</div>
</div>
<div class="col-md-4">
<div class="your-custom-div">
.col-md-4
</div>
</div>
<div class="clearfix visible-md"></div>
</div>
<div class="row show-grid">
<div class="col-md-4 col-md-offset-4">
<div class="your-custom-div">
.col-md-4 .col-md-offset-4
</div>
</div>
<div class="clearfix visible-md"></div>
</div>
</div>
</body>
</html>
EDIT #1: For your requirement of not knowing how many columns you will be fetching from your database for the second row, another option would be to use a conditional during the output of the HTML to also output a .col-md-offset-4 class if the modulo of the number of items in your collection divided by the number of columns is equal to 1, or proceed as usual otherwise. In ASP.NET with Razor, this would look something like this (the example below is kept simple on purpose to demonstrate the proposed logic, it can be refactored to it's own HTML helper class, accounting for other column sizes as well):
#{
bool lastItemShouldBeCentered = Foo.Count % 3 == 1;
for (int i = 0; i < Foo.Count; i++)
{
bool isLastItem = i == Foo.Count - 1;
if (isLastItem && lastItemShouldBeCentered)
{
<div class="col-md-4 col-md-offset-4">
// Foo[i] content here
</div>
}
else
{
<div class="col-md-4">
// Foo[i] content here
</div>
}
}
}
EDIT #2: Looks like I misread your requirement. For 1 left-over column, this solution will suffice. For more, I would go with #Muhammad's answer.
You need to add the last block of text into a different row and change the "col-md-4" to "col-md-12".
<div class="row">
<div class="col-md-4"> // column 1
bla bla bla
</div>
<div class="col-md-4"> //column 2
bla bla bla
</div>
<div class="col-md-4"> // column 3
bla bla bla
</div>
</div>
<div class="row">
<center>
<div class="col-md-12"> //last column, also note I changed it to 12
bla bla bla
</div>
</center>
</div>

Strip full screen in fixed twitter bootstrap layout

I would like to create this layout with twitter bootstrap.
http://i.stack.imgur.com/f6mn7.png
This my start Fiddle
http://jsfiddle.net/antoc/n8ec9j2h/
My html
<div class="container-fluid">
<div class="container">
<div class="row">
<div class="col-md-4">
<h3 class="bg-blue">title</h3>
<p>Lorem ipsum</p>
</div>
<div class="col-md-8">
<h3 class="bg-red">title</h3>
<p>Lorem ipsum</p>
<h3 class="bg-green">title</h3>
<p>Lorem ipsum</p>
</div>
</div>
</div>
My problems are:
how to create the blu, red and green strip in css?
how to create the yellow background in css?
Add some margin/padding hackery into it... like this updated fiddle
Here's the relevent CSS:
.bg-yellow{
background:yellow;
margin:-10px 0 -9999px -9999px;
padding:10px 0 9999px 9999px;
}
.bg-blue {
margin-left:-1000px;
padding-left:1000px;
}
.bg-green, .bg-red{
margin-right:-1000px;
}
And the HTML
<div class="container">
<div class="row">
<div class="col-md-4">
<h3 class="bg-blue">title</h3>
<div class="bg-yellow">
<p>Lorem ipsum</p>
</div>
</div>
<div class="col-md-8">
<h3 class="bg-red">title</h3>
<p>Lorem ipsum</p>
<h3 class="bg-green">title</h3>
<p>Lorem ipsum</p>
</div>
</div>
</div>
Other than some padding editing for the yellow box and some text content, I think this is what you wanted:
http://jsfiddle.net/AndrewL32/n8ec9j2h/17/
<div class="row">
<div class="col-md-3 bg-yellow">
<h3 class="bg-blue">title</h3>
<p>Lorem ipsumLorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsumLorem ipsumLorem ipsum Lorem ipsumLorem ipsum</p>
<p>Lorem ipsumLorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsumLorem ipsumLorem ipsum Lorem ipsumLorem ipsum</p>
</div>
<div class="col-md-9">
<h3 class="bg-red">title</h3>
<p>Lorem ipsum</p>
<h3 class="bg-green">title</h3>
<p>Lorem ipsum</p>
</div>
</div>

CSS: Select every 2nd child but not every 4th

I need to select every 2nd child of an element but if it is a multiple of 4 (4, 8, 12...) it should not be selected. So the "sequenze" that i want would be [2, 6, 10, 14].
My current solution is:
p:nth-child(2n) {
background: purple;
}
p:nth-child(4n) {
background: white;
}
Now the 2nd, 6th, 10th and 14th elements have a purple background color. But this isn't a fancy way to solve the problem.
Can I somehow combine these two selectors into something like
p:nth-child(2n \ 4n) { //Just an idea how this selector could work
background: purple;
}
This should work for your sequence ([2, 6, 10, 14].):
p:nth-child(4n-2) {
background: purple;
}
p:nth-child(4n-2) {
background: purple;
color: #FFF;
}
<p>Lorem ipsum 1</p>
<p>Lorem ipsum 2</p>
<p>Lorem ipsum 3</p>
<p>Lorem ipsum 4</p>
<p>Lorem ipsum 5</p>
<p>Lorem ipsum 6</p>
<p>Lorem ipsum 7</p>
<p>Lorem ipsum 8</p>
<p>Lorem ipsum 9</p>
<p>Lorem ipsum 10</p>
<p>Lorem ipsum 11 </p>
<p>Lorem ipsum 12</p>
<p>Lorem ipsum 13 </p>
<p>Lorem ipsum 14 </p>
<p>Lorem ipsum 15</p>
<p>Lorem ipsum 16</p>
How about this:
p:nth-child(4n+2) {
background: purple;
}

Vertical lines with CSS

I have a #comments element which contains .comment elements. I would like to have 5 vertical lines from left to right, each 1px in width, 100% height (till the end of the #comments element), with 20px between them and without images. I tried to do that myself, but my CSS-fu isn't that high. Any help would be much appreciated.
HTML:
<div id="comments">
<div class="comment level1">Lorem ipsum dolor sit amet</div>
<div class="comment level2">Lorem ipsum dolor sit amet</div>
<div class="comment level3">Lorem ipsum dolor sit amet</div>
</div>
CSS:
#comments {
width: 400px;
border: 1px solid black;
}
.comment {
margin: 10px 0;
}
.level1 {}
.level2 { margin-left: 20px; }
.level3 { margin-left: 40px; }
Demo.
Here's how I imagine it:
|[comment ]
| |[comment ]
| |[comment ]
| | |[comment]
Is there some reason you need to have all the divs as direct children of the outer parent div? If you nest the divs you can accomplish this very easily:
css:
div div {
border-left: 1px solid black;
padding-left:20px;
}
nested html
<div id="comments">
<div>Lorem ipsum dolor sit amet</div>
<div>Lorem ipsum dolor sit amet
<br/>
<div>Lorem ipsum dolor sit amet
<br/>
<div>Lorem ipsum dolor sit amet
<br/>
<div>Lorem ipsum dolor sit amet</div>
<div>Lorem ipsum dolor sit amet
<br/>
<div>Lorem ipsum dolor sit amet</div>
</div>
</div>
</div>
</div>
</div>
updated fiddle showing how it would look here nested down to 5 levels:
http://jsfiddle.net/webchemist/tuZB6/4/

Resources