2015-09-07 59 views
0

我試圖複製eBay的「今日」特色賣方佈局與4方形圖像組成一個盒子(見圖片),但使用Bootstrap。我真的很難理解我如何才能做到這一點。我可以或多或少地獲得正方形,並且在lg,md和sm規則上看起來不錯,因爲當然事情不需要按比例放置,我可以每個方格都固定寬度和高度。但是,當涉及到移動設備時,由於需要根據窗口大小調整窗口大小,因此會熄滅該窗口。4個圖像的響應式網格

enter image description here

,我已經想出了目前的HTML基本上是一個網格分成9和3,(COL-XS-9和Col-XS-3),用一套高度給出在每個桌面/平板電腦寬度。

圖像有時會是平方圖像,其他時候它們將是橫向或縱向格式的圖像,在這種情況下,它們將保持縱橫比並擴展到其最大尺寸,但在包含div的範圍內。

有沒有一種方法,我可以實現這個使用Bootstrap或我需要看看替代品使用JavaScript例如?下面

代碼,以防萬一,你需要看一看:

HTML

<div id="featured-merchant-container"> 
    <div class="featured-merchant-listings"> 
    <div class="row"> 
     <div class="primary-img-container col-xs-9 col-sm-9 col-md-9 col-lg-9 no-padding-right"> 
     <div class="big-hero-image"> 
      <a ng-if="merchant.userListings[0].primaryImage" ng-href="/#!/users/{{merchant._id}}"> 
      <span class="thumb"> 
       <img ng-src="{{merchant.userListings[0].primaryImage}}" /> 
      </span> 
      </a> 
      <a ng-if="!merchant.userListings[0].primaryImage" ng-href="/#!/users/{{merchant._id}}"> 
      <span class="thumb"> 
       <img ng-src="img/placeholder.png" /> 
      </span> 
      </a> 
     </div> 
     </div> 
     <div class="secondary-img-container col-xs-3 col-sm-3 col-md-3 col-lg-3 no-padding-left"> 
     <div class="big-hero-images"> 
      <div class="first"> 
      <a ng-if="merchant.userListings[1].primaryImage" ng-href="/#!/users/{{merchant._id}}"> 
       <span class="thumb"> 
       <img ng-src="{{merchant.userListings[1].primaryImage}}" /> 
       </span> 
      </a> 
      <a ng-if="!merchant.userListings[1].primaryImage" ng-href="/#!/users/{{merchant._id}}"> 
       <span class="thumb"> 
       <img ng-src="img/placeholder.png" /> 
       </span> 
      </a> 
      </div> 
      <div class="second"> 
      <a ng-if="merchant.userListings[2].primaryImage" ng-href="/#!/users/{{merchant._id}}"> 
       <span class="thumb"> 
       <img ng-src="{{merchant.userListings[2].primaryImage}}" /> 
       </span> 
      </a> 
      <a ng-if="!merchant.userListings[2].primaryImage" ng-href="/#!/users/{{merchant._id}}"> 
       <span class="thumb"> 
       <img ng-src="img/placeholder.png" /> 
       </span> 
      </a> 
      </div> 
      <div class="last"> 
      <a ng-if="merchant.userListings[3].primaryImage" ng-href="/#!/users/{{merchant._id}}"> 
       <span class="thumb"> 
       <img ng-src="{{merchant.userListings[3].primaryImage}}" /> 
       </span> 
      </a> 
      <a ng-if="!merchant.userListings[3].primaryImage" ng-href="/#!/users/{{merchant._id}}"> 
       <span class="thumb"> 
       <img ng-src="img/placeholder.png" /> 
       </span> 
      </a> 
      </div> 
     </div> 
     </div> 
     </div> 
    </div> 
</div> 

CSS:

#featured-merchant-container { 
    border: 1px solid green-grey; 


    .big-hero-image { 
      text-align:center; 
      .thumb { 
       display:block; 
       border-right:1px solid green-grey; 
       height:413px; 
       display:table-cell; 
       vertical-align:middle; 
       text-align:center; 
       img { 
        width:100%; 
        height:413px; 
       } 
      } 
    } 

    .big-hero-images { 
      text-align:center; 
      // border-left:1px solid green-grey; 
      .thumb { 
       display:block; 
       height:137px; 
       display:table-cell; 
       vertical-align:middle; 
       text-align:center; 
       img { 
        width:100%; 
        height:137px; 
       } 
      } 
      .first, .second { 
        border-bottom:1px solid green-grey; 
       } 
    } 
} 

請幫助我。這是推動我瘋了:(。謝謝!

+0

嵌套的CSS是不是有效的CSS是這個SASS(http://sass-lang.com)或LESS(http://lesscss.org)? –

+0

道歉,這是手寫筆https://learnboost.github.io/stylus/,但這與LESS和SASS非常相似。 –

回答

0

感謝您的回答所有人。

我設法做到這一點的方法是完全取消對網格的Bootstrap的使用。我反而圍繞百分比構建網格。我在網上閱讀了一些關於如何提供百分比作爲填充頂部的值可以基本上爲您提供具有某種縱橫比的容器的內容。例如,如果您想要一個保持寬高比爲4:3的div,您要做的是在該div的樣式表中添加

padding-top:75%; 

只要div具有給定的寬度,就可以使用padding-top百分比技巧提供它的高度。由於我希望網格中的所有div均爲正方形,因此我向其中的每一個添加了

`padding-top:100%;` 

。因此,在電網大圖像時,CSS(筆)如下:

.big-image { 
     width: 75%; 
     /* whatever width you want */ 
     display: inline-block; 
     position: relative; 
     float:left; 
     -moz-box-sizing: border-box; 
     -webkit-box-sizing: border-box; 
     -ms-box-sizing: border-box; 
     box-sizing: border-box; 
     font-size:0px; 

     &:after { 
      padding-top: 100%; 
      /* 16:9 ratio */ 
      display: block; 
      content: ''; 
     } 
} 

當然,你可以在下面看到,在div需要被相對定位,並填充有待內添加:在CSS選擇器之後。

我希望這有助於某人。謝謝

0

你可以做一些與flex-box佈局?

.cols {overflow: hidden;} 
 
.cols .col {float: left; width: 25%;} 
 
.cols .col:first-child {width: 75%;} 
 
.cols .col img {width: 100%;} 
 

 
.flex-container { 
 
    display: -ms-flexbox; 
 
    display: -webkit-flex; 
 
    display: flex; 
 
    -webkit-flex-direction: column; 
 
    -ms-flex-direction: column; 
 
    flex-direction: column; 
 
    -webkit-flex-wrap: nowrap; 
 
    -ms-flex-wrap: nowrap; 
 
    flex-wrap: nowrap; 
 
    -webkit-justify-content: flex-start; 
 
    -ms-flex-pack: start; 
 
    justify-content: flex-start; 
 
    -webkit-align-content: stretch; 
 
    -ms-flex-line-pack: stretch; 
 
    align-content: stretch; 
 
    -webkit-align-items: flex-start; 
 
    -ms-flex-align: start; 
 
    align-items: flex-start; 
 
} 
 

 
.flex-item { 
 
    -webkit-order: 0; 
 
    -ms-flex-order: 0; 
 
    order: 0; 
 
    -webkit-flex: 1 0 auto; 
 
    -ms-flex: 1 0 auto; 
 
    flex: 1 0 auto; 
 
    -webkit-align-self: auto; 
 
    -ms-flex-item-align: auto; 
 
    align-self: auto; 
 
}
<div class="cols"> 
 
    <div class="col"> 
 
    <img src="http://placehold.it/350x350" alt="" /> 
 
    </div> 
 
    <div class="col"> 
 
    <div class="flex-container"> 
 
     <div class="flex-item"><img src="http://placehold.it/350x350" alt="" /></div> 
 
     <div class="flex-item"><img src="http://placehold.it/350x350" alt="" /></div> 
 
     <div class="flex-item"><img src="http://placehold.it/350x350" alt="" /></div> 
 
    </div> 
 
    </div> 
 
</div>

+0

感謝您的回答。 這裏的問題是,圖像並不總是正方形。希望他們是正方形的,但如果他們不是,我需要居中並水平對齊它們,所以我可能需要使用display:table和display:table-cell css規則。我基本上需要大平方和3個小方格,不管大小和圖像本身的縱橫比如何,它們都保持爲正方形,並且尺寸相互成正比。 –

+0

@JamieMclaughlan歡迎。它是否適合你? –

+0

對不起,我剛剛編輯了我上面的答案。 –

0

如果您的圖片將是各種尺寸的,那麼你需要要麼使用背景圖像的背景大小設置爲覆蓋。

.flex-item 
    background-size cover 
    background-image url(http://placehold.it/350x350) 

或者您需要使用object-fit,這是真棒,但在IE中有可怕的支持。

.flex-item img 
    object-fit cover