Как сделать так, чтобы определенный раздел был полностью выровнен друг с другом с помощью CSS? - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь воссоздать эту графику с нуля, используя css, html и javascript в терминах мобильных устройств.Это оригинал: Recreate Image

Это моя версия enter image description here

Часть, в которой я застрял, выравнивает ключевые характеристикиидеально как в мобильном и 1024px размера.Но мне не повезло.Я использую flexbox, и я думал об использовании направления как способа, но я не знаю, где мне следует указать контейнерный div или что.Я не хочу использовать фреймворк, такой как Bootstrap.Мне нужно сделать это на пустом месте.Можете ли вы порадовать меня?Большое спасибо

    <!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Convertibles</title>
    <link rel="stylesheet" type="text/css" href="css/styles.css">
</head>

<body>

    <div class="container">
        <header>
            <h1>Convertibles</h1>
            <p class="subtext">2-in-1 laptop plus tablet</p>
        </header>


        <ul class="item-list">

            <!-- Item 1 Start-->
            <li class="item item1">
                <img src="images/chromebookpro.jpg">
                <div class="item-text">
                    <h2>Google Pixelbook</h2>
                    <p class="pricing">Starting at $999</p>
                    <p>The first high performance Chromebook with Google Assistent built in. Features a four-in-one design offering laptop, tablet, tent, and entertainment modes, an all day battery with fast charging, a sleek aluminum body, and an optional pen. </p>
                    <p class="item-specs"> Key Specs</p>
                    <div class="item-text-specs">
                        <div class="item-list">
                            <p class="article">12.3" Quad HD LCD</p>
                            <p class="article">Intel processor&reg;</p>
                        </div>
                        <div class="item-list">
                            <p class="article">128/256/512 GB</p>
                            <p class="article">8/16 GB memory</p>
                        </div>
                    </div>
                </div>
            </li>
            <!-- Item 1 End-->


            <!-- Item 2 Start-->
            <li class="item item2">
                <img src="images/chromebookpro.jpg">
                <div class="item-text">
                    <h2>Samsung Chromebook Pro</h2>
                    <p class="pricing">Starting at $549</p>
                    <p>The power of a Chromebook. The versatility of a tablet. A 360 degree rotating screen and an Intel&reg; Core&trade; M3 processor helps get things done. Write and create naturally with a built-in pen.</p>
                    <p class="item-specs"> Key Specs</p>
                    <div class="item-text-specs">
                        <div class="item-list">
                            <p class="article">12.3" Quad HD LCD</p>
                            <p class="article">Intel processor&reg;</p>
                        </div>
                        <div class="item-list">
                            <p class="article">32 GB eMMC</p>
                            <p class="article">1 x 4 GB memory</p>
                        </div>
                    </div>
                </div>
            </li>
            <!-- Item 2 End-->

            <!-- Item 3 Start-->
            <li class="item item3">
                <img src="images/chromebookpro.jpg">
                <div class="item-text">
                    <h2>ASUS Chromebook Flip C302</h2>
                    <p class="pricing">Starting at $499</p>
                    <p>Flip between a high-performance Chromebook, a handy backlit tablet, and anything in between with a 360 degree hinge.</p>
                    <p class="item-specs"> Key Specs</p>
                    <div class="item-text-specs">
                        <div class="item-list">
                            <p class="article">12.5" (16:9) LED</p>
                            <p class="article">Intel processor&reg;</p>
                        </div>
                        <div class="item-list">
                            <p class="article">0.53" thin</p>
                            <p class="article">4/8 GB memory</p>
                        </div>
                    </div>
                </div>
            </li>
            <!-- Item 3 End-->

        </ul>
    </div>
    <script src=""></script>
</body>

@import url('https://fonts.googleapis.com/css?family=Roboto');

* {box-sizing: border-box;}

body {background-color: #FFFFFF;}

.container {
    padding: 1rem 1rem;
    max-width: 1200px;
    min-width: 320px;
    margin: 0 auto;
}

ul {
    margin: 0;
    padding: 0;
    list-style: none;

}
li {
    padding: 1rem; 
    /*background: #F8F9FA;*/
    color: #202020;
    opacity: 0.9;
}

li:hover {
    box-shadow: 1px 2px 3px 0px rgba(25,25,25,0.6);
    opacity: 1;
    transition:all 0.5s ease;  
}


h1 {
    font-family: 'Roboto', sans-serif;
    font-weight: lighter;
    font-size: 2.5em;
    color: #202124;
    text-align: center;
    margin-top: -20px;
    height: 25px;
    width: 100%;
}
h2 {
    margin: 0;
    font-family: 'Roboto', sans-serif;
  font-weight: lighter;
}
.subtext {
    font-family: 'Roboto', sans-serif;
    font-weight: lighter;
    font-size: 0.9em;
    color: #202124;
    text-align: center;         
}

.pricing {
    font-family: 'Roboto', sans-serif;
    font-weight: lighter;
    font-size: 0.9em;
    margin-top: 0em;
    color: grey;
}
p {
    color: #555;
    line-height: 2em;
    font-family: 'Roboto', sans-serif;
    font-size: 0.9em;
    font-weight: bold;
}
img {
    width: 100%; margin-bottom:1.5rem; border-radius: 5px;
}

.item-specs {
    font-family: 'Roboto', sans-serif;
    font-weight: bolder;
    padding: 0.8em 0;
    border-top: 1px solid #e7e7e7;
    color: black;
    margin-top: 2em;
    margin-bottom: -1em;
}


/* Flexbox Styling */

.item-list {
  display: flex; 
  flex-wrap: wrap;
  }
.item {
  flex: 100%;
  margin: 0 0 1.25rem;
}

.article {
  flex: 0 0 50%;
  font-family: 'Roboto', sans-serif;
  font-size: 0.7em;
  font-weight: lighter;

}

@media (min-width: 36em) {

.item { 
  flex: 0 0 calc( 50% - 1.25rem / 2 );
  margin-left: 1.25rem;
}

 .item:nth-child(odd){ 
   margin-left: 0;
 }  

}

@media (min-width: 60em) {
.item {flex: 0 0 calc(100% / 3 - 0.875rem);
}

.item:nth-child(odd), item:nth-child(even) { 
    margin-left: 1.25rem;
}

 .item:nth-child(3n+1) { 
  margin-left: 0;} 
}

1 Ответ

0 голосов
/ 19 сентября 2018

Есть несколько способов добиться этого.


Статический

Самый простой, но самый хрупкий способ - это обернуть верхнюю часть в <div> определить высотусамого высокого окна, и установите это как min-height в CSS.Но это приводит к проблемам с удобством сопровождения, если текст слишком длинный или поля настраивают ширину на разных размерах экрана.

HTML

<li class="item item1">
    <div class="item-intro">
        <img src="images/chromebookpro.jpg">
        <h2>Google Pixelbook</h2>
        <p class="pricing">Starting at $999</p>
        <p>The first high performance Chromebook with Google Assistent built in. Features a four-in-one design offering laptop, tablet, tent, and entertainment modes, an all day battery with fast charging, a sleek aluminum body, and an optional pen. </p>
    </div>
    <div class="item-text-specs">
        <p class="item-specs"> Key Specs</p>
        <div class="item-list">
            <p class="article">12.3" Quad HD LCD</p>
            <p class="article">Intel processor&reg;</p>
        </div>
        <div class="item-list">
            <p class="article">128/256/512 GB</p>
            <p class="article">8/16 GB memory</p>
        </div>
    </div>
</li>

CSS

.item-intro {
    min-height: 300px;
}

Динамический - Чистый CSS

Другой вариант - сделать два поля для описания верхнего и нижнего элементов.Затем, используя flexbox, вы можете сделать так, чтобы высоты автоматически соответствовали друг другу.Но это становится сложным для мобильной реакции и потребует использования order.Вы также можете использовать grid для достижения чего-то похожего.

HTML

<ul class="item-list">

    <!-- Item 1 Start-->
    <li class="item item1">
        <img src="images/chromebookpro.jpg">
        <div class="item-text">
            <h2>Google Pixelbook</h2>
            <p class="pricing">Starting at $999</p>
            <p>The first high performance Chromebook with Google Assistent built in. Features a four-in-one design offering laptop, tablet, tent, and entertainment modes, an all day battery with fast charging, a sleek aluminum body, and an optional pen. </p>
        </div>
    </li>

    <div class="item-text-specs item1">
        <p class="item-specs"> Key Specs</p>
        <div class="item-list">
            <p class="article">12.3" Quad HD LCD</p>
            <p class="article">Intel processor&reg;</p>
        </div>
        <div class="item-list">
            <p class="article">128/256/512 GB</p>
            <p class="article">8/16 GB memory</p>
        </div>
    </div>
    <!-- Item 1 End-->


    <!-- Item 2 Start-->
    <li class="item item2">
        <img src="images/chromebookpro.jpg">
        <div class="item-text">
            <h2>Samsung Chromebook Pro</h2>
            <p class="pricing">Starting at $549</p>
            <p>The power of a Chromebook. The versatility of a tablet. A 360 degree rotating screen and an Intel&reg; Core&trade; M3 processor helps get things done. Write and create naturally with a built-in pen.</p>
        </div>
    </li>
    <div class="item-text-specs item2">
        <p class="item-specs"> Key Specs</p>
        <div class="item-list">
            <p class="article">12.3" Quad HD LCD</p>
            <p class="article">Intel processor&reg;</p>
        </div>
        <div class="item-list">
            <p class="article">32 GB eMMC</p>
            <p class="article">1 x 4 GB memory</p>
        </div>
    </div>
    <!-- Item 2 End-->

    <!-- Item 3 Start-->
    <li class="item item3">
        <img src="images/chromebookpro.jpg">
        <div class="item-text">
            <h2>ASUS Chromebook Flip C302</h2>
            <p class="pricing">Starting at $499</p>
            <p>Flip between a high-performance Chromebook, a handy backlit tablet, and anything in between with a 360 degree hinge.</p>
        </div>
    </li>
    <div class="item-text-specs item3">
        <p class="item-specs"> Key Specs</p>
        <div class="item-list">
            <p class="article">12.5" (16:9) LED</p>
            <p class="article">Intel processor&reg;</p>
        </div>
        <div class="item-list">
            <p class="article">0.53" thin</p>
            <p class="article">4/8 GB memory</p>
        </div>
    </div>
    <!-- Item 3 End-->

</ul>

CSS

.item,
.item-text-specs {
  flex: 0 1 100%;
}

/* Only needed for desktop */
@media (max-width: 768px) {
  .item-text-specs.item1 {
    order: 4;
  }
  .item-text-specs.item2 {
    order: 5;
  }
  .item-text-specs.item3 {
    order: 6;
  }
}

Динамический - JS

Последний вариант - написать фрагмент JavaScript, который проходит по верхним блокам, находит самый высокий блок и применяет эту высоту ко всем блокам.Вам придется изменить HTML-код, чтобы отделить верхнее описание в <div>, как показано в примере Static .Я не собираюсь писать Javascript, потому что это займет много времени, но это должно быть относительно просто.Наиболее сложной функцией будет запуск регулировки высоты при изменении размера окна, если также изменяется ширина блоков.Из-за этого может быть проще использовать jQuery в зависимости от вашего знакомства с Javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...