CSS Flexbox и отзывчивый - довольно классный c макет статьи - можно обойтись без JS и без возни с DOM? - PullRequest
1 голос
/ 27 мая 2020

Это то, к чему я стремлюсь:

enter image description here

Это код , который я пробовал . Это первая настольная версия, и она работает. Но не для мобильных устройств, и мне сказали сначала написать код для мобильных устройств. Я хотел бы получить набор "хореографий" для настольных и мобильных устройств без JS, если это возможно. Возможен вариант, дополняющий flexbox.

html {
	box-sizing: border-box;
	font-size: 100%;
}
*, *:before, *:after {
	box-sizing: inherit;
}

.grid {
  display: flex;
  flex-wrap: wrap;
  margin-right: -10px;
  margin-left: -10px;
}


.col-m-1 {
	width: 8.333%;
}
.col-m-2 {
	width: 16.667%;
}
.col-m-3 {
	width: 25%;
}
.col-m-4 {
	width: 33.333%;
}
.col-m-5 {
	width: 41.667%;
}
.col-m-6 {
	width: 50%;
}
.col-m-7 {
	width: 58.333%;
}
.col-m-8 {
	width: 66.667%;
}
.col-m-9 {
	width: 75%;
}
.col-m-10 {
	width: 83.333%;
}
.col-m-11 {
	width: 91.667%;
}
.col-m-12 {
	width: 100%;
}




@media (min-width: 769px){
	.col-d-1 {
		width: 8.333%;
	}
	.col-d-2 {
		width: 16.667%;
	}
	.col-d-3 {
		width: 25%;
	}
	.col-d-4 {
		width: 33.333%;
	}
	.col-d-5 {
		width: 41.667%;
	}
	.col-d-6 {
		width: 50%;
	}
	.col-d-7 {
		width: 58.333%;
	}
	.col-d-8 {
		width: 66.667%;
	}
	.col-d-9 {
		width: 75%;
	}
	.col-d-10 {
		width: 83.333%;
	}
	.col-d-11 {
		width: 91.667%;
	}
	.col-d-12 {
		width: 100%;
	}
}
<head>
	<meta charset="utf-8">
</head>
<body>
 <article class="grid article">
    <div class="my-img-supclass col-m-12 col-t-4 col-d-4">
      <img src="img.jpg">
    </div>
    <div class="col-m-12 col-t-8 col-d-8">
      <h2 class="article-h2"><span>a h2 title</span></h2>
      <p class="article-p">some content</p>
    </div>
  </article>
<body>

Это не работает на мобильных устройствах, изображение становится полностью внизу, очевидно, начиная со 2-го div.

1 Ответ

2 голосов
/ 27 мая 2020

Это хороший вариант использования CSS Grid . На сайте CSS -Tricks есть хорошая шпаргалка для сетки. Эта функция поддерживается всеми основными браузерами .

Идея состоит в том, что вы определите body (или контейнер div) для отображения в виде сетки с именованными областями сетки. (через grid-template-areas). Области соответствуют изображению, заголовку и телу.

Затем внутри вашего медиа-запроса вы можете переназначить макет сетки.

Я настроил свой медиа-запрос на запуск в 800px, так что когда вы запустите приведенный ниже фрагмент стека, вы должны увидеть мобильное представление. Если вы нажмете «полноэкранный режим» во фрагменте, вы увидите вид рабочего стола.

body {
  display: grid;
  grid-template-areas:
      "hero-image article-title"
      "hero-image article-body";
}

.hero-image {
  grid-area: hero-image;
  background: lime;
}

.article-title {
  grid-area: article-title;
  background: yellow;
  color: red;
}

.article-body {
  grid-area: article-body;
  background: magenta;
}

@media (max-width: 800px) {
  body {
    grid-template-areas:
        "article-title"
        "hero-image"
        "article-body";
}
<div class="hero-image">image</div>
<div class="article-title">title</div>
<div class="article-body">body</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...