วิธีเปลี่ยนลำดับบรรพบุรุษขององค์ประกอบลูกดิ้น

ฉันกำลังทำงานกับหน้าผลิตภัณฑ์(https://codepen.io/oleksiukmary/pen/qPLPMb?editors=1100) และมี 2 คอนเทนเนอร์ - เนื้อหาและรูปภาพภายในคอนเทนเนอร์ Flex สำหรับอุปกรณ์มือถือ (‹768px) ฉันต้องเปลี่ยนลำดับของบล็อกรูปภาพ (เสร็จสิ้น):

 @media only screen and (max-width: 768px) {
  padding: 5%;
  order: 2;
}

และย้ายชื่อและราคาจากบล็อกเนื้อหาด้านบนรูปภาพ -> เช่น

  • ชื่อ
  • ราคา
  • ภาพ
  • เนื้อหาที่เหลือ

ชื่อและราคาเป็นบรรพบุรุษของ flex child และจากสิ่งที่ฉันรู้ ฉันไม่สามารถย้ายพวกเขาออกจากคอนเทนเนอร์ได้ มีความคิดอย่างไรในการทำเช่นนี้?


person Mary Oleksiuk    schedule 18.10.2017    source แหล่งที่มา
comment
ดังที่คุณค้นพบ คุณจะไม่สามารถย้ายพวกมันออกจากคอนเทนเนอร์ได้ คุณสามารถใช้ JavaScript เล็กน้อยได้หรือไม่?   -  person Brett DeWoody    schedule 18.10.2017
comment
@BrettDeWoody ใช่แน่นอน ฉันจะทำอย่างไร?   -  person Mary Oleksiuk    schedule 18.10.2017


คำตอบ (1)


นี่คือวิธีแก้ปัญหาโดยใช้ JavaScript บริสุทธิ์จำนวนน้อยที่สุด (ไม่มี jQuery) แนวคิดคือการโคลนองค์ประกอบ .product__image และวางโคลนในตำแหน่งที่ต้องการ (ระหว่าง .product__price ถึง .product__description)

จากนั้นเราจะใช้ CSS ง่ายๆ เพื่อซ่อน/แสดงโคลน/ต้นฉบับในขนาดหน้าจอต่างๆ สำหรับหน้าจอที่ต่ำกว่า 768px เราจะซ่อนต้นฉบับและแสดงโคลน และสำหรับหน้าจอที่สูงกว่า 768px เราจะแสดงต้นฉบับและซ่อนโคลน

ฉันได้รวมลิงก์ไปยัง Codepen ไว้ที่ด้านล่าง ซึ่งง่ายต่อการดูการตอบสนอง

var productImage = document.querySelector('.product__image');
var productContent = document.querySelector('.product__content');
var productDescription = document.querySelector('.product__description');

productImageClone = productImage.cloneNode(true);
productContent.insertBefore(productImageClone, productDescription);
.product {
  display: flex;
  @media only screen and (max-width: 768px) {
    flex-direction: column;
  }
  &__content {
    width: 50%;
    padding: 5% 10% 5%;
    @media only screen and (max-width: 768px) {
      padding: 5%;
      order: 2;
    }
    @media only screen and (max-width: 768px) {
      width: 100%;
      padding: 35px 28px 28px 28px;
    }
    .product__image {
      @media only screen and (min-width: 768px) {
        display: none;
      }
      @media only screen and (max-width: 768px) {
        display: block;
      }
    }
  }
  &__title {
    padding-bottom: 8px;
    font-size: 38px;
    line-height: 40px;
    font-weight: 500;
    color: #000;
    @media only screen and (max-width: 768px) {
      font-size: 28px;
      line-height: 30px;
    }
  }
  &__description {
    padding-bottom: 15px;
    font-size: 16px;
    line-height: 24px;
    color: #000;
    @media only screen and (max-width: 768px) {
      font-size: 12px;
      line-height: 18px;
    }
  }
  &__price {
    padding-bottom: 9px;
    font-size: 16px;
    line-height: 21px;
    font-weight: 500;
    color: #000;
    &--discount {
      color: #000;
      text-decoration: line-through;
    }
  }
  &__small-title {
    font-size: 14px;
    line-height: 25px;
    font-weight: 700;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: #000;
  }
  &__colors {
    padding: 10px 0;
    &-item {
      display: inline-block;
      margin-right: 14px;
    }
    &-link {
      width: 34px;
      height: 34px;
      display: inline-block;
      border: 1px solid transparent;
      border-radius: 34px;
      text-align: center;
      img {
        width: 100%;
      }
      &:hover,
      &--active {
        border: 1px solid #000;
      }
    }
  }
  &__size {
    margin-bottom: 30px;
    &-item {
      display: inline-block;
      margin-right: 12px;
      font-size: 14px;
      line-height: 15px;
      font-weight: 700;
      color: #000;
    }
    &-link {
      width: 34px;
      height: 34px;
      display: inline-block;
      line-height: 34px;
      text-align: center;
      border: 1px solid transparent;
      border-radius: 34px;
      &:hover,
      &--active {
        border: 1px solid #000;
      }
    }
  }
  .button {
    width: 100%;
    margin-bottom: 15px;
  }
  &__image {
    @media only screen and (max-width: 768px) {
      display: none;
    }
  }
  &-thumbnails {
    &__item {
      display: inline-block;
      margin-top: 14px;
      margin-right: 23px;
      position: relative;
    }
    &__image {
      width: 117px;
      height: 117px;
    }
    &__link {
      &::after {
        position: absolute;
        content: "";
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        opacity: 0;
        background-color: #fff;
        transition: opacity .5s ease;
      }
      &:hover {
        &::after {
          opacity: 0.5;
        }
      }
    }
  }
}
<section class="product">
  <div class="product__content">
    <h1 class="product__title">Product name with short description</h1>
    <p class="product__price"><span class="product__price--discount">$24.99 </span>$19.99</p>
    <p class="product__description">Nam porttitor blandit accumsan. Ut vel dictum sem, a pretium dui. In malesuada enim in dolor euismod, id commodo mi consectetur. Curabitur at vestibulum nisi. Nullam vehicula nisi velit. Mauris turpis nisl, molestie ut</p>

    <p class="product__small-title">Color: white, red & gray</p>
    <ul class="product__colors">
      <li class="product__colors-item">
        <a href="/th#" class="product__colors-link"><img src="{{'black-red_color.svg' | asset_url }}" alt="Red white option"></a>
      </li>
      <li class="product__colors-item">
        <a href="/th#" class="product__colors-link"><img src="{{'black-red_color.svg' | asset_url }}" alt="Red white option"></a>
      </li>
    </ul>

    <p class="product__small-title">Size: Small</p>
    <ul class="product__size">
      <li class="product__size-item"><a class="product__size-link" href="/th#">XS</a></li>
      <li class="product__size-item"><a class="product__size-link" href="/th#">S</a></li>
      <li class="product__size-item"><a class="product__size-link" href="/th#">M</a></li>
      <li class="product__size-item"><a class="product__size-link" href="/th#">L</a></li>
      <li class="product__size-item"><a class="product__size-link" href="/th#">XL</a></li>
    </ul>

    <a class="button button--green" href="/th#">Add your map</a>
    <a class="button" href="/th#">Add to Cart</a>


  </div>
  <div class="product__image">
    <img src="https://cdn.shopify.com/s/files/1/2420/2709/t/1/assets/bg_girl_home-image.jpg?14680714382635068032" alt="Product">

    <ul class="product-thumbnails">
      <li class="product-thumbnails__item">
        <a class="product-thumbnails__link" href="/th#"><img class="product-thumbnails__image" src="https://cdn.shopify.com/s/files/1/2420/2709/t/1/assets/product_image.jpg?14680714382635068032" alt="Product"></a>
      </li>
      <li class="product-thumbnails__item">
        <a class="product-thumbnails__link" href="/th#"><img class="product-thumbnails__image" src="https://cdn.shopify.com/s/files/1/2420/2709/t/1/assets/product_image.jpg?14680714382635068032" alt="Product"></a>
      </li>
      <li class="product-thumbnails__item">
        <a class="product-thumbnails__link" href="/th#"><img class="product-thumbnails__image" src="https://cdn.shopify.com/s/files/1/2420/2709/t/1/assets/product_image.jpg?14680714382635068032" alt="Product"></a>
      </li>
      <li class="product-thumbnails__item">
        <a class="product-thumbnails__link" href="/th#"><img class="product-thumbnails__image" src="https://cdn.shopify.com/s/files/1/2420/2709/t/1/assets/product_image.jpg?14680714382635068032" alt="Product"></a>
      </li>
    </ul>
  </div>
</section>

และนี่คือ Codepen เพื่อให้คุณทดลองใช้การตอบสนองได้

person Brett DeWoody    schedule 18.10.2017