Переключение порядка блочных элементов с помощью CSS [дубликат]



этот вопрос уже есть ответ здесь:




  • Как я могу изменить порядок своих divs с помощью CSS?

    23 ответов



Рассказ



допустим, мой HTML уже установлен в камне:



<div id="blockA">Block A</div>
<div id="blockB">Block B</div>
<div id="blockC">Block C</div>


это будет выглядеть так:



------------
| Block A |
------------
| Block B |
------------
| Block C |
------------


теперь я хочу переключить порядок блоков. Как я могу сделать это только с CSS?



------------
| Block C |
------------
| Block A |
------------
| Block B |
------------


Я знаю, что есть хакерские решения, такие как использование position:absolute, но это не сохраняет эффективное использование display:block собственность. То есть, блоки толкают другие блоки вниз, когда они растут в размерах.



Долгая История



когда пользователь использует компьютер для просмотра моей веб-страницы, блоки отображаются в следующем порядке:




  1. Общая информация.

  2. расписание занятий.

  3. приложение для iPhone реклама


реклама приложения для iPhone размещается последней, потому что это не очень важно для пользователей компьютеров. Небольшой процент пользователей компьютеров достанет свой телефон и установит приложение.



если мобильный пользователь приходит на этот сайт, реклама приложения для iPhone должна быть самой важной вещью на странице. Поэтому его следует переместить наверх:




  1. реклама приложения для iPhone

  2. общие информация.

  3. расписание занятий.


Я хотел бы, чтобы пользователи iPhone и компьютеров использовали один и тот же HTML, но у них есть css media query, переключающий порядок блоков.



@media only screen and (max-device-width: 480px) {
#blockC {
/* magic order switching */
}
}
472   11  

11 ответов:

как уже было предложено, Flexbox ответ - в частности, потому что вам нужно только в поддержку один современный браузер: мобильное сафари.

посмотреть:http://jsfiddle.net/thirtydot/hLUHL/

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

CSS:

#blockContainer {
    display: -webkit-box;
    display: -moz-box;
    display: box;

    -webkit-box-orient: vertical;
    -moz-box-orient: vertical;
    box-orient: vertical;
}
#blockA {
    -webkit-box-ordinal-group: 2;
    -moz-box-ordinal-group: 2;
    box-ordinal-group: 2;
}
#blockB {
    -webkit-box-ordinal-group: 3;
    -moz-box-ordinal-group: 3;
    box-ordinal-group: 3;
}

HTML:

<div id="blockContainer">
    <div id="blockA">Block A</div>
    <div id="blockB">Block B</div>
    <div id="blockC">Block C</div>
</div>

вот" простой как можно " пример, для изменения порядка div-элементов (при изменении размера окна браузера):

<!DOCTYPE html>
<html>
  <head>
    <title>foobar</title>
    <style>
      @media screen and (max-width:300px){
        #parent{
          display:flex;
          flex-flow: column;
        }
        #a{order:2;}
        #c{order:1;}
        #b{order:3;}
      }
    </style>
  </head>
  <body>
    <div id="parent">
      <div id="a">one</div>
      <div id="b">two</div>
      <div id="c">three</div>
    </div>
  </body>
</html>

пример: http://jsfiddle.net/devnull/qyroxexv/ (измените ширину окна, чтобы увидеть эффект изменения порядка divs)

Я знал, что это старый, но я нашел более простое решение, и оно работает на ie10, firefox и chrome:

<div id="wrapper">
  <div id="one">One</div>
  <div id="two">Two</div>
  <div id="three">Three</div>
</div> 

Это css:

#wrapper {display:table;}
#one {display:table-footer-group;}
#three {display:table-header-group;}

и в итоге:

"Three"
"Two"
"One"

Я нашел его здесь.

обновление: два легких CSS решения:

используя гибкий график работы, flex-flow и ордер:

Пример1: Демо-Скрипка

    body{
        display:flex;
        flex-flow: column;
    }
    #blockA{
        order:4;
    }
    #blockB{
        order:3;
    }
    #blockC{
        order:2;
    }

альтернативно, обратный масштаб Y:

Example2: Demo Fiddle

body{
    -webkit-transform: scaleY(-1);
    transform: scaleY(-1);
}
div{
    -webkit-transform: scaleY(-1);
    transform: scaleY(-1);
}

этот метод работал для меня без элемента:

#blockA,
#blockB,
#blockC {
    border: 1px solid black;
    padding: 20px;
}


.reverseOrder,
#blockA,
#blockB,
#blockC {
    -webkit-transform: rotate(180deg);
       -moz-transform: rotate(180deg);
        -ms-transform: rotate(180deg);
         -o-transform: rotate(180deg);
            transform: rotate(180deg);
}
<div class="reverseOrder">
    <div id="blockA">Block A</div>
    <div id="blockB">Block B</div>
    <div id="blockC">Block C</div>
</div>

HTML:

<div id="blockC second-order">Block C</div>
<div id="blockA">Block A</div>
<div id="blockB">Block B</div>
<div id="blockC first-order">Block C</div>

CSS

.second-order {
     display: none;
}

@media only screen and (max-device-width: 480px) {
     .first-order: {
         display: none;
     }

     .second-order: {
         display: block;
     }
}

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

у меня есть ответы на этот вопрос, хотя прошел один год, потому что я искал решение, я прочитал это и получил эту идею.

<div id="container">
    <div id="a">Block A</div>
    <div id="b">Block B</div>
    <div id="c">Block C</div>
</div>

допустим, высота блока составляет 100px

#container     {position:relative; height: 300px;}
#a, #b, #c     {position:absolute; height: 100px}
#c             {top: 0px;}
#b             {top: 100px;}
#a             {top: 200px;}

вы можете возиться с полями:http://jsfiddle.net/zV2p4/

но вам, вероятно, будет лучше использовать position: absolute. Это не меняет display: block, но это сделает ширину авто. Чтобы исправить это, сделайте divs width: 100%

мне удалось сделать это с помощью CSS display: table-*. Я не тестировал с более чем 3 блоками, хотя.

скрипка

возможно в CSS3: http://www.w3.org/TR/css3-writing-modes/#writing-mode

Почему бы не изменить порядок тегов? Ваша HTML-страница не сделана из камня, не так ли?

Как это по старинке...

поместите объявление сверху и снизу и используйте медиа-запросы для отображения:нет, если это необходимо.

Если бы объявление было не слишком большим, оно не добавило бы слишком большой размер для загрузки, вы даже можете настроить, куда объявление отправило вас для iPhone/ПК.

Comments

    Ничего не найдено.