как правильно вращать раздел / div в грид-дизайне - PullRequest
0 голосов
/ 05 октября 2018

ОПИСАНИЕ

Я пытаюсь взять баннер, состоящий из нескольких частей, который расположен горизонтально в верхней части страницы при просмотре в окне разумного размера на рабочем столе / ноутбуке / планшетеи поверните его (-90 градусов) так, чтобы он отображался вертикально на левой стороне страницы при просмотре на небольшом экране (например, на телефоне).

Это своего рода продолжение из предыдущая идея - когда я переключался между двумя разными баннерами, и текст на баннере двигался вертикально вниз, не поворачивая их.Есть некоторые проблемы с этим решением, так что я хотел бы посмотреть, смогу ли я просто повернуть горизонтальный баннер, который у меня есть (с некоторыми незначительными модами)

Я нашел похожую концепцию здесь -с этой демоверсией jsfiddle , но, похоже, она не может заставить меня работать.

.rotateObj h2 span {
    width:150px; /* same as height of .rotateObj */
    -webkit-transform-origin:84px 70px;
    display:inline-block;
    -webkit-transform:rotate(-90deg);
    text-align:center;
}

НЕКОТОРЫЙ ФОН

  • Это сетка
  • Это [пытается быть] адаптивным дизайном
  • Пример того, что я получил, можно найти на jsfiddle

    #h_banner {
        grid-column: 1/2;
        grid-template-columns: 80px auto 80px 80px;
        -ms-transform: roate(-90deg) translate(-150px, -10px);
        -webkit-transform: rotate(-90deg) translate(-150px, -160px);
        transform: rotate(-90deg) translate(-150px, -160px);
        position: fixed;
    }
    
  • Если вы сделаете раздел «результат» широким, вы должны увидеть горизонтальный баннер, который достаточно хорошо масштабируется по ширине окна и не подвержен влияниюизменения в высоте.

  • Если вы сделаете раздел «результат» узким, вы должны увидеть, что у меня есть относительно повернутого баннера, однако позиционирование является специальным и на него влияет изменение высоты.
  • Этот код CSS начинается со строки 55;попытка поворота начинается со строки 67.
  • Поворотная часть работает, как и ожидалось, но не остается там, где я хочу, поэтому мне пришлось добавить перевод, но значение для перевода было полученоили, возможно, именно поэтому высота влияет на это.

МОЯ НАДЕЖДА

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

1 Ответ

0 голосов
/ 05 октября 2018

Вам также необходимо учитывать transform-origin, и вы можете сделать это следующим образом:

transform: rotate(-90deg) translateX(-100%);
transform-origin: top left;

Полный код:

body {
  padding: 0;
  margin: 0;
}

#page {
  display: grid;
  grid-template-columns: 200px auto;
  grid-template-rows: 200px auto;
}

#header {
  grid-column: 1/3;
  grid-row: 1/2;
  display: grid;
  grid-template-columns: 200px auto;
  grid-template-rows: 200px auto;
}

#logo {
  grid-column: 1/2;
  grid-row: 1/2;
  place-self: center;
  border: 2px solid red;
  position: fixed;
}

#h_banner {
  grid-column: 1/3;
  grid-row: 1/2;
  display: grid;
  grid-template-columns: 200px auto 200px;
  background: gray;
  z-index: 10;
}

#banner_h {
  font-family: Arial, Helvetica, sans-serif;
  white-space: nowrap;
  font-size: 6vw;
  place-self: center;
  grid-column: 2/3;
  grid-row: 1/2;
}

#ban_img_left {
  grid-column: 1/2;
  grid-row: 1/2;
  place-self: center;
}

#ban_img_right {
  grid-column: 3/4;
  grid-row: 1/2;
  place-self: center;
}

#menu {
  display: none;
}

#main {
  grid-column: 2/3;
  grid-row: 2/3;
}

@media only screen and (max-width: 1000px) and (max-height: 2000px) {
  /* [smaller] iPhone portrait */
  #page {
    grid-template-columns: 80px auto;
    grid-template-rows: auto;
  }
  #header {
    grid-column: 1/2;
    grid-template-columns: auto;
    grid-template-rows: auto;
  }
  #logo {
    display: none;
  }
  #h_banner {
    grid-column: 1/2;
    grid-template-columns: 80px auto 80px 80px;
    transform: rotate(-90deg) translateX(-100%);
    position: fixed;
    transform-origin: top left;
  }
  position: fixed;
}

#banner_h {
  font-size: 5vh;
}

#menu {
  display: grid;
}

#main {
  grid-row: 1/3;
}


}
@media only screen and (max-width: 1000px) and (max-height: 500px) {
  /* [smaller] iPhone landscape */
  
  #banner_v {
    line-height: 3.5vh;
  }
}
<html>

<head>
  <title>Responsive Banner Tests</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <link rel="stylesheet" type="text/css" href="./forfiddle.css" />
</head>

<body>
  <section id="page">
    <section id="header">
      <div id="logo">LOGO</div>
      <div id="h_banner">
        <div id="ban_img_left">L_IMG</div>
        <div id="banner_h">
          Mumble &amp; Grumble
        </div>
        <div id="ban_img_right">R_IMG</div>
        <div id="menu">MENU</div>
      </div>
      <!-- h_banner -->
    </section>
    <!-- header -->
    <section id="main">
      <p>Mary had a little lamb, whose fleece was white as snow<br/>and every where that Mary went her lamb was sure to go</p>
      <p>Humpty Dumpty sat on a wall, Humpty Dumpty had a great fall<br/>All the King's horses and all the King's mend<br/>Couldn't put him back together again</p>
      <p>Home for the deranged, where the beer and the cantaolpe play<br/>Where pink elepants roam<br/>on the walls of your home<br/>and the flies are all rowdy all day</p>
      <p>Yippie dippie dee<br/>An apple climbed a tree<br/>He dropped his pants<br/>and fell in a trance<br/>Yippie dippie dee</p>
      <p>In case you were wondering this is all just filler text to try to ensure that the window can be scrolled verticlally to verify that the horizontal header banner scrolls correctly, leaving the logo visible.</p>
      <p>Also, we need to verify that when the screen is narrow (e.g.: like for a phone), that the horizontal banner and logo go away<br/>and are replacd by a vertical banner that stays fixed in place.</p>
      <p>In both cases, we want to make sure that the text in the banner scales according to width/height</p>
      <p>And now, we repeat all of the above...</p>
      <p>Mary had a little lamb, whose fleece was white as snow<br/>and every where that Mary went her lamb was sure to go</p>
      <p>Humpty Dumpty sat on a wall, Humpty Dumpty had a great fall<br/>All the King's horses and all the King's mend<br/>Couldn't put him back together again</p>
      <p>Home for the deranged, where the beer and the cantaolpe play<br/>Where pink elepants roam<br/>on the walls of your home<br/>and the flies are all rowdy all day</p>
      <p>Yippie dippie dee<br/>An apple climbed a tree<br/>He dropped his pants<br/>and fell in a trance<br/>Yippie dippie dee</p>
      <p>In case you were wondering this is all just filler text to try to ensure that the window can be scrolled verticlally to verify that the horizontal header banner scrolls correctly, leaving the logo visible.</p>
      <p>Also, we need to verify that when the screen is narrow (e.g.: like for a phone), that the horizontal banner and logo go away<br/>and are replacd by a vertical banner that stays fixed in place.</p>
      <p>In both cases, we want to make sure that the text in the banner scales according to width/height</p>
      <p>And now, we repeat all of the above...</p>
      <p>Mary had a little lamb, whose fleece was white as snow<br/>and every where that Mary went her lamb was sure to go</p>
      <p>Humpty Dumpty sat on a wall, Humpty Dumpty had a great fall<br/>All the King's horses and all the King's mend<br/>Couldn't put him back together again</p>
      <p>Home for the deranged, where the beer and the cantaolpe play<br/>Where pink elepants roam<br/>on the walls of your home<br/>and the flies are all rowdy all day</p>
      <p>Yippie dippie dee<br/>An apple climbed a tree<br/>He dropped his pants<br/>and fell in a trance<br/>Yippie dippie dee</p>
      <p>In case you were wondering this is all just filler text to try to ensure that the window can be scrolled verticlally to verify that the horizontal header banner scrolls correctly, leaving the logo visible.</p>
      <p>Also, we need to verify that when the screen is narrow (e.g.: like for a phone), that the horizontal banner and logo go away<br/>and are replacd by a vertical banner that stays fixed in place.</p>
      <p>In both cases, we want to make sure that the text in the banner scales according to width/height</p>
      <p>And now, we repeat all of the above...</p>
      <p>Mary had a little lamb, whose fleece was white as snow<br/>and every where that Mary went her lamb was sure to go</p>
      <p>Humpty Dumpty sat on a wall, Humpty Dumpty had a great fall<br/>All the King's horses and all the King's mend<br/>Couldn't put him back together again</p>
      <p>Home for the deranged, where the beer and the cantaolpe play<br/>Where pink elepants roam<br/>on the walls of your home<br/>and the flies are all rowdy all day</p>
      <p>Yippie dippie dee<br/>An apple climbed a tree<br/>He dropped his pants<br/>and fell in a trance<br/>Yippie dippie dee</p>
      <p>In case you were wondering this is all just filler text to try to ensure that the window can be scrolled verticlally to verify that the horizontal header banner scrolls correctly, leaving the logo visible.</p>
      <p>Also, we need to verify that when the screen is narrow (e.g.: like for a phone), that the horizontal banner and logo go away<br/>and are replacd by a vertical banner that stays fixed in place.</p>
      <p>In both cases, we want to make sure that the text in the banner scales according to width/height</p>
      <p>And now, we repeat all of the above...</p>
    </section>
    <!-- main -->
  </section>
  <!-- page -->
</body>

</html>
...