2017-06-16 116 views
0

我試圖將我的自定義單選按鈕作爲其自己的列旁邊的label元素,其中包含多個span s。使用默認單選按鈕很容易實現,但由於自定義樣式應用於label:before,因此它的行爲不同。將自定義單選按鈕和標籤對齊爲列

<div class="sp-package-show"> 
    <input type="radio" name="" value=""> 
    <label> 
    <span>Title</span> 
    <span>Date</span> 
    </label> 
</div> 

[type="radio"] { 
    border: 0; 
    clip: rect(0 0 0 0); 
    height: 1px; 
    margin: -1px; 
    overflow: hidden; 
    padding: 0; 
    position: absolute; 
    width: 1px; 
} 

label { 
    cursor: pointer; 
} 

[type="radio"] + label { 
    display: block; 
    margin-left: 1px; 
    vertical-align: middle; 
} 

[type="radio"] + label:before { 
    content: ''; 
    display: inline-block; 
    width: 1.1em; 
    height: 1.1em; 
    vertical-align: inherit; 
    border-radius: 1em; 
    // border: 0.15em solid $gray; 
    box-shadow: 0 0 0 1px gray; 
    margin-right: 0.75em; 
} 

[type="radio"]:checked + label:before { 
    box-shadow: 0 0 0 0.05em gray; 
    background-color: gray; 
} 

演示:https://codepen.io/ourcore/pen/mwRdbx

+0

由包裝元素包含的標籤和跨度? –

+1

@Paulie_D是的,我已經更新了每個廣播節的容器。 –

回答

0

可以使labeldisplay: flex,然後換你的span S IN另一個元素,使label柔性孩子是:before元素和包裝你的span S中的元素。這將把他們放在相鄰的列。爲了使跨度在他們自己的路線上,使用display: block

[type="radio"] { 
 
    border: 0; 
 
    clip: rect(0 0 0 0); 
 
    height: 1px; 
 
    margin: -1px; 
 
    overflow: hidden; 
 
    padding: 0; 
 
    position: absolute; 
 
    width: 1px; 
 
} 
 

 
label { 
 
    cursor: pointer; 
 
} 
 

 
[type="radio"] + label { 
 
    margin-left: 1px; 
 
    display: flex; 
 
} 
 

 
[type="radio"] + label:before { 
 
    content: ''; 
 
    width: 1.1em; 
 
    height: 1.1em; 
 
    border-radius: 1em; 
 
    box-shadow: 0 0 0 1px gray; 
 
    margin-right: 0.75em; 
 
} 
 

 
[type="radio"]:checked + label:before { 
 
    box-shadow: 0 0 0 0.05em gray; 
 
    background-color: gray; 
 
} 
 

 
span { 
 
    display: block; 
 
}
<input type="radio" name="" value=""> 
 
<label> 
 
<div class="meta"> <span>Title</span> 
 
    <span>Date</span> 
 
    <span>Date</span> 
 
    <span>Date</span> 
 
    <span>Date</span> 
 
    <span>Date</span> 
 
    <span>Date</span> 
 
    </div> 
 
</label>

+0

當我運行你的片段時,兩個'span'仍然在同一行上 –

+0

@MarioParra那麼你的意思是「對齊列」呢?我認爲你只是意味着垂直對齊。你不希望跨越同一行/行? –

+0

單選按鈕應該位於左側的一列上,並且'label' /兩個'span'都應該在右列中,在上面。基本上,我不希望任何'span'包裝在單選按鈕下。 –