2016-12-01 38 views
3

我正在尋找一種更優雅的方式來將正確的圖標與左邊的文字垂直對齊,因爲負邊距可能會有點瑕疵。將圖標與文字對齊而不使用負邊距

div.main { 
 
    border: 1px solid black; 
 
    padding: 14px; 
 
} 
 

 
div.icons { 
 
    margin-top: -1.65em; 
 
} 
 

 
div.icon { 
 
    font-size: 2rem; 
 
    color: blue; 
 
    border: 0.1px solid blue; 
 
    border-radius: 3px; 
 
    margin-left: -1px; 
 
    padding: 3px; 
 
    float: right; 
 
}
<link rel='stylesheet prefetch' href='https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css'> 
 
<link rel='stylesheet prefetch' href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css'> 
 

 

 
<div class="main"> 
 
    <div class="summary">Some text</div> 
 
    <div class="icons pull-right"> 
 
    <div class="icon fa fa-line-chart"> 
 
    </div> 
 
    <div class="icon fa fa-bar-chart"> 
 
    </div> 
 
    </div> 
 
</div>

+1

最好使用'和'垂直對齊顯示直列block':middle'。你避免做一些事情,比如設置不太好的負值。 – Mardzis

+0

@Mardzis我會補充說,任何「幻數」都是脆弱的,因爲如果你總是需要重新設置它們,如果你只需要重構一小部分,那麼你最終會做太多的工作 –

回答

1

你仍然可以使用自定義樣式時,你需要:

使用代碼:

使用Flexbox的

支持ie10+

div.main { 
 
    border: 1px solid black; 
 
    padding: 14px; 
 

 
    display: flex; 
 
    align-items: center; 
 
    justify-content: space-between; 
 

 
} 
 

 
div.icon { 
 
    font-size: 2rem; 
 
    color: blue; 
 
    border: 0.1px solid blue; 
 
    border-radius: 3px; 
 
    margin-left: -1px; 
 
    padding: 3px; 
 
    float: right; 
 
}
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
<link rel='stylesheet prefetch' href='https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css'> 
 
<link rel='stylesheet prefetch' href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css'> 
 
</head> 
 

 
<body> 
 
    
 
    <div class="main"> 
 
    <div class="summary">Some text</div> 
 
    <div class="icons"> 
 
    <div class="icon fa fa-line-chart"> 
 
    </div> 
 
    <div class="icon fa fa-bar-chart"> 
 
    </div> 
 
    </div> 
 
</div> 
 
    
 
</body> 
 
</html>

使用表格樣式

支持ie8+

div.main { 
 
    border: 1px solid black; 
 
    padding: 14px; 
 

 
    display: table; 
 
    width: 100%; 
 

 
} 
 

 
div.summary { 
 
    display: table-cell; 
 
    vertical-align: middle; 
 
} 
 

 
div.icon { 
 
    font-size: 2rem; 
 
    color: blue; 
 
    border: 0.1px solid blue; 
 
    border-radius: 3px; 
 
    margin-left: -1px; 
 
    padding: 3px; 
 
    float: right; 
 
}
<link rel='stylesheet prefetch' href='https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css'> 
 
<link rel='stylesheet prefetch' href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css'> 
 
<div class="main"> 
 
    <div class="summary">Some text</div> 
 
    <div class="icons"> 
 
    <div class="icon fa fa-line-chart"> 
 
    </div> 
 
    <div class="icon fa fa-bar-chart"> 
 
    </div> 
 
    </div> 
 
</div>

看看this flexbox guidethis guide on flexbox without flexbox

還要考慮使用不依賴於標籤,即更明確的類名來看看BEM

+0

謝謝!我更喜歡用justify-content:space-between的解決方案,因爲這也讓我從圖標中刪除了float:right(我只需要在html中將它們反轉) –

1

一個好方法是同時設置,圖標和文字,在單獨的元素,然後給他們下面的CSS屬性:

.mySelectors{ 
    display: inline-block; 
    vertical-align: middle; 
} 
1

如果flexbox是選項,只需爲main添加display: flex,爲icons添加水平定位:

div.icons { 
    margin-left:auto; 
} 

align-items: center垂直對齊。

見下面的演示:

div.main { 
 
    border: 1px solid black; 
 
    padding: 14px; 
 
    display: flex; 
 
    align-items: center; 
 
} 
 

 
div.icons { 
 
    margin-left:auto; 
 
} 
 

 
div.icon { 
 
    font-size: 2rem; 
 
    color: blue; 
 
    border: 0.1px solid blue; 
 
    border-radius: 3px; 
 
    margin-left: -1px; 
 
    padding: 3px; 
 
}
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
<link rel='stylesheet prefetch' href='https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css'> 
 
<link rel='stylesheet prefetch' href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css'> 
 
</head> 
 

 
<body> 
 
    
 
    <div class="main"> 
 
    <div class="summary">Some text</div> 
 
    <div class="icons pull-right"> 
 
    <div class="icon fa fa-line-chart"> 
 
    </div> 
 
    <div class="icon fa fa-bar-chart"> 
 
    </div> 
 
    </div> 
 
</div> 
 
    
 
</body> 
 
</html>

+0

文本不會似乎不在母公司的中間。 –

+0

@MichielBorkent加入'align-items:center'太...現在檢查它... – kukkuz

0

您可以簡單地使用flexbox這樣做。

  • 應用display: flex父這是你的情況
  • div.main和應用margin-left: auto到要對齊窗口的右邊子。

像下面的東西。

div.main { 
 
    border: 1px solid black; 
 
    padding: 14px; 
 
    display: flex; 
 
} 
 

 
div.icons { 
 
    margin-left: auto; 
 
    /*margin-top: -1.65em;*/ 
 
} 
 

 
div.icon { 
 
    font-size: 2rem; 
 
    color: blue; 
 
    border: 0.1px solid blue; 
 
    border-radius: 3px; 
 
    margin-left: -1px; 
 
    padding: 3px; 
 
    float: right; 
 
}
<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
    <link rel='stylesheet prefetch' href='https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css'> 
 
    <link rel='stylesheet prefetch' href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css'> 
 
    </head> 
 

 
    <body> 
 

 
    <div class="main"> 
 
     <div class="summary">Some text</div> 
 
     <div class="icons pull-right"> 
 
     <div class="icon fa fa-line-chart"> 
 
     </div> 
 
     <div class="icon fa fa-bar-chart"> 
 
     </div> 
 
     </div> 
 
    </div> 
 

 
    </body> 
 
</html>

希望這將幫助你以某種方式(Y)。

的Flex箱參考 - complete flexbox reference

2

您可以使用CSS Flexbox的。並使用flex的align屬性。看看下面的代碼片段:

div.main { 
 
    border: 1px solid black; 
 
    padding: 14px; 
 
    display: flex; 
 
    align-items: center; 
 
} 
 

 
div.summary { 
 
    flex: 1; 
 
} 
 

 
div.icon { 
 
    font-size: 2rem; 
 
    color: blue; 
 
    border: 0.1px solid blue; 
 
    border-radius: 3px; 
 
    margin-left: -1px; 
 
    padding: 3px; 
 
    float: right; 
 
}
<html> 
 
<head> 
 
<link rel='stylesheet prefetch' href='https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css'> 
 
<link rel='stylesheet prefetch' href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css'> 
 
</head> 
 

 
<body> 
 
    
 
    <div class="main"> 
 
    <div class="summary">Some text</div> 
 
    <div class="icons"> 
 
    <div class="icon fa fa-line-chart"> 
 
    </div> 
 
    <div class="icon fa fa-bar-chart"> 
 
    </div> 
 
    </div> 
 
</div> 
 
    
 
</body> 
 
</html>

希望這有助於!