實現標籤及佈局樣式的問題

要實現下圖這個效果:css

問題

圖片描述

左上角label的邊框寬度爲0.5px,字體大小爲15px;下面的文字和label間距爲16px。全部元素寬度固定,高度自適應。html

解決方案

html代碼css3

<div class="parent">
    <div id="wrapper">
        <div id="label">
            Lorem ipsum
        </div>
    </div>
    <div class="content">
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Numquam accusamus ipsa voluptatem rem labore in alias officia, iste molestiae, illum ratione explicabo delectus laborum iusto. Tempore aspernatur, nesciunt excepturi eum.
    </div>
</div>

CSS代碼app

.parent{
    width:300px;
    background: goldenrod;
}
#wrapper{
    position: relative;
}
#label{
    width: 100px;
    border: 1px solid black;
    font-size: 30px;
    transform: scale(.5);
    transform-origin: 0 0;
    position: absolute;
    top: 0;
    left: 0;
}
.content{
    margin-top: 16px;
}

js代碼字體

var label = document.getElementById('label');
var wrapper = document.getElementById('wrapper');
var labelHeight = window.getComputedStyle(label).height;
wrapper.style.height = parseInt(labelHeight)/2 + 'px';

## 心路歷程
首先,0.5px的邊框寬度和15px的字體大小,通常狀況下,是不支持的。這時就使用了css3的縮放。且以父元素左上角爲縮放原點。spa

#label{
    width: 100px;
    border: 1px solid black;
    font-size: 30px;
    transform: scale(.5);
    transform-origin: 0 0;
}
.content{
    margin-top: 16px;
}

效果是這樣的
圖片描述code

能夠看到雖然label進行了縮放,但還佔據了原來的大小的空間。orm

因此就顯示了增長藍色框的wrapper的意義,使label脫離文檔流和文本流,同時佔位。(float並不能脫離文本流)
進一步的代碼是這樣的:htm

#wrapper{
        border: 1px solid blue;
        position: relative;
    }
    #label{
        width: 100px;
        border: 1px solid black;
        font-size: 30px;
        transform: scale(.5);
        transform-origin: 0 0;
        position: absolute;
        top: 0;
        left: 0;
    }
    .content{
        border: 1px solid red;
        margin-top: 16px;
    }

效果:
圖片描述圖片

哦喲~藍色框wrapper塌了,怎麼佔位呢?
label高度是不定的,怎麼設置wrapper的高度呢?
只好用js了:

var label = document.getElementById('label');
var wrapper = document.getElementById('wrapper');
var labelHeight = window.getComputedStyle(label).height;
wrapper.style.height = parseInt(labelHeight)/2 + 'px';

效果:
圖片描述

我胡漢三又回來了~

請大神指點有沒有更好的方法~

相關文章
相關標籤/搜索