css -Как разместить текст и кнопку на сетке изображения? - PullRequest
3 голосов
/ 15 марта 2020

Я создал CSS сетку с 5 изображениями, которая выглядит следующим образом:

enter image description here

Ниже показано, что я пытаюсь достичь:

enter image description here

Тем не менее, я использую сетку CSS и задаюсь вопросом, смогу ли я достичь этого без маржи?

Мой код:

 <!--CSS Grid to display home page images -->
<div class="wrapper">

    <div class=" bed"><img src="{{asset('/images/Home_Bed.jpg')}}" alt="">

    </div>
    <div class="pillow"><img src="{{asset('/images/Home_Pillow.jpg')}}" alt=""></div>
    <div class=" kitchen"><img src="{{asset('/images/Home_Kitchen.jpg')}}" alt=""></div>
    <div class=" living-room"><img src="{{asset('/images/Shop_Page.jpg')}}" alt=""></div>
    <div class=" sofa"><img src="{{asset('/images/Home_Sofa.jpg')}}" alt=""></div>




</div>

@endsection

@push('style')
<style>

@media (max-width: 700px) {

.bed {
  grid-column: 1/-1;
  grid-row: 1 / -3;
}
.pillow {
  grid-column: 3;
  grid-row: 1 / 3;
}



.kitchen {
  grid-column: 3;
  grid-row: 2 / 5;
}



.living-room {
  grid-column: 1 / 3;
  grid-row: 3 / -1;
}



.sofa {
  grid-column-start: 3;
  grid-row: 5 / -1;
}

}



.wrapper {
  display: grid;
  grid-template-columns: 3fr 2fr 3fr;
  grid-template-rows: repeat(8, 1fr);
  padding: 5em;
  grid-gap: 2.5em;
  background-color: black;

  height: 900px;
  max-width: 100%;
}

.wrapper>div {
  position: relative;
}

.wrapper>div::after {
  position: absolute;
  transform: translate(-50%, -50%);
  top: 50%;
  left: 50%;
  background-color: black;
  color: white;
  padding: .5rem;
}

.bed {
  grid-column: 1/2;
  grid-row: 1/3;
  height: 110%;
  width:100%;
}


.pillow {
  grid-column: 2;
  grid-row: 1 / 3;
  height: 110%;
  width:90%;
}



.kitchen {
  grid-column: 3;
  grid-row: 2 / 5;
}



.living-room {
  grid-column: 1 / 3;
  grid-row: 3 / -1;
}



.sofa {
  grid-column-start: 3;
  grid-row: 5 / -1;
}



img {
  width: 100%;
  height: 100%;
  border-radius: 20px;
}


body{
    background-color: black;
    }


.container {
  position: relative;

}


    .heading-part {
        border-bottom: 3px solid #e5e5e5;
        display: inline-block;
        width: 100%;
    }

    .main-title {
        margin-bottom: 0;
        font-size: 1.5rem;
        float: left;
        text-transform: uppercase;
    }

    .main-title::after {
        border-bottom: 3px solid #552244;
        content: "";
        display: block;
        margin-bottom: -3px;
        padding: 2px;
    }
</style>
@endpush

Мне нужно, чтобы текст и кнопка были внизу каждого изображения, а размер шрифта должен быть разным, поскольку каждое изображение имеет разное разрешение. Есть ли способ реализовать это элегантно, не делая мой код похожим на беспорядок?

Можно ли как-то элегантно реализовать это в соответствии с размером изображения?

Редактировать:

Так выглядит на мобильном телефоне

enter image description here

Ответы [ 2 ]

4 голосов
/ 15 марта 2020

Текст в ваших макетах выглядит как go где-то при нажатии, поэтому это ссылка, а не кнопка. Каждый .wrapper > div уже относительно позиционирован, что делает его ограничивающим контейнером для любых абсолютно позиционированных потомков. Поэтому вы можете добавить ссылку на .wrapper > div и закрепить ее в нижнем углу каждой ячейки сетки.

Все, что вам нужно добавить, это следующее. Затем вы бы выбрали стиль по своему вкусу:

.wrapper>div>a {
  position: absolute;
  bottom: 10px;
  right: 10px;
  color: white;
  text-decoration: none;
}

А затем HTML:

<div class=" bed">
  <img src="{{asset('/images/Home_Bed.jpg')}}" alt="">
  <a href="#">Label <span class="">➡</span></a>
</div>

.bed {
  grid-column: 1/-1;
  grid-row: 1 / -3;
}

.pillow {
  grid-column: 3;
  grid-row: 1 / 3;
}

.kitchen {
  grid-column: 3;
  grid-row: 2 / 5;
}

.living-room {
  grid-column: 1 / 3;
  grid-row: 3 / -1;
}

.sofa {
  grid-column-start: 3;
  grid-row: 5 / -1;
}

.wrapper {
  display: grid;
  grid-template-columns: 3fr 2fr 3fr;
  grid-template-rows: repeat(8, 1fr);
  padding: 5em;
  grid-gap: 2.5em;
  background-color: black;
  height: 900px;
  max-width: 100%;
}

.wrapper>div {
  position: relative;
}

.wrapper>div>a {
  position: absolute;
  bottom: 10px;
  right: 10px;
  color: white;
  text-decoration: none;
}

.wrapper>div::after {
  position: absolute;
  transform: translate(-50%, -50%);
  top: 50%;
  left: 50%;
  background-color: black;
  color: white;
  padding: .5rem;
}

.bed {
  grid-column: 1/2;
  grid-row: 1/3;
  height: 110%;
  width: 100%;
}


.pillow {
  grid-column: 2;
  grid-row: 1 / 3;
  height: 110%;
  width: 90%;
}



.kitchen {
  grid-column: 3;
  grid-row: 2 / 5;
}



.living-room {
  grid-column: 1 / 3;
  grid-row: 3 / -1;
}



.sofa {
  grid-column-start: 3;
  grid-row: 5 / -1;
}



img {
  width: 100%;
  height: 100%;
  border-radius: 20px;
}


body {
  background-color: black;
}


.container {
  position: relative;

}


.heading-part {
  border-bottom: 3px solid #e5e5e5;
  display: inline-block;
  width: 100%;
}

.main-title {
  margin-bottom: 0;
  font-size: 1.5rem;
  float: left;
  text-transform: uppercase;
}

.main-title::after {
  border-bottom: 3px solid #552244;
  content: "";
  display: block;
  margin-bottom: -3px;
  padding: 2px;
}
<div class="wrapper">
  <div class=" bed">
    <img src="{{asset('/images/Home_Bed.jpg')}}" alt="">
    <a href="#">Label <span class="">➡</span></a>
  </div>
  <div class="pillow"><img src="{{asset('/images/Home_Pillow.jpg')}}" alt=""><a href="#">Label <span class="">➡</span></a></div>
  <div class=" kitchen"><img src="{{asset('/images/Home_Kitchen.jpg')}}" alt=""><a href="#">Label <span class="">➡</span></a></div>
  <div class=" living-room"><img src="{{asset('/images/Shop_Page.jpg')}}" alt=""><a href="#">Label <span class="">➡</span></a></div>
  <div class=" sofa"><img src="{{asset('/images/Home_Sofa.jpg')}}" alt=""><a href="#">Label <span class="">➡</span></a></div>
</div>

jsfiddle

1 голос
/ 15 марта 2020
Hope this will work...

HTML -

<div class="wrapper">
    <div class="bed">
        <span>[your text here]&nbsp;<button>[button]</button></span>
        <img src="{{asset('/images/Home_Bed.jpg')}}" alt="">
    </div>
    <div class="pillow">
        <span>[your text here]&nbsp;<button>[button]</button></span>
        <img src="{{asset('/images/Home_Pillow.jpg')}}" alt="">
    </div>
    <div class="kitchen">
        <span>[your text here]&nbsp;<button>[button]</button></span>
        <img src="{{asset('/images/Home_Kitchen.jpg')}}" alt="">
    </div>
    <div class="living-room">
        <span>[your text here]&nbsp;<button>[button]</button></span>
        <img src="{{asset('/images/Shop_Page.jpg')}}" alt="">
    </div>
    <div class="sofa">
        <span>[your text here]&nbsp;<button>[button]</button></span>
        <img src="{{asset('/images/Home_Sofa.jpg')}}" alt="">
    </div>
</div>

CSS -

.wrapper > div {
    position: relative;
}
.wrapper div span {
    position: absolute;
    bottom: 10px;
    right: 10px;
    z-index: 1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...