-moz-background-inline-policy для веб-набора - PullRequest
3 голосов
/ 03 апреля 2011

Существует ли что-то вроде -moz-background-inline-policy в Webkit?Это свойство в основном дает вам возможность указать, как должен отображаться фон для каждой строки встроенного элемента.Я прикрепляю к изображениям одного и того же элемента в разных браузерах.

Это результат для Firefox (с -moz-background-inline-policy: each-box;)

Firefox

Это в Google Chrome (я пробовал -webkit-background-inline-policy, но похожеон не существует)

Google Chrome

ОБНОВЛЕНИЕ

Поскольку в Webkit отсутствует свойство фоновой политики, я пытаюсь найти другое решение с использованием jQuery.Я добавляю дополнительный интервал за каждой строкой текста.Это нормально, за исключением того факта, что текст не измеряется должным образом.Вы можете увидеть оба примера в действии здесь:

  1. Исходное решение (фоновая политика): http://jsfiddle.net/notme/mCnGy/5/
  2. Новое решение (jQuery spans): http://jsfiddle.net/notme/my3br/1/

РЕШЕНИЕ

//thanks @Peter Bailey - /1916763/kak-vydelit-stroku-teksta-kotoraya-blizhe-vsego-k-myshke#1916766
jQuery.fn.wrapLines = function(openTag, closeTag) {
    var dummy = this.clone().css({
        top: -9999,
        left: -9999,
        position: 'absolute',
        width: this.width()
    }).appendTo(this.parent()),
        text = dummy.text().match(/\S+\s+/g);

    var words = text.length,
        lastTopOffset = 0,
        lines = [],
        lineText = '';

    for (var i = 0; i < words; ++i) {
        dummy.html(
        text.slice(0, i).join('') + text[i].replace(/(\S)/, '$1<span/>') + text.slice(i + 1).join(''));

        var topOffset = jQuery('span', dummy).offset().top;

        if (topOffset !== lastTopOffset && i != 0) {
            lines.push(lineText);
            lineText = text[i];
        } else {
            lineText += text[i];
        }

        lastTopOffset = topOffset;
    }
    lines.push(lineText);

    this.html(openTag + lines.join(closeTag + openTag) + closeTag);
    dummy.remove();
};

//thanks @thirtydot
var fixIt = function() {
    //remove previous .dummy
    $('.dummy').remove();

    $('div.node-title-text').each(function(index) {

        var dummy = $(this).clone().removeClass().addClass('dummy').appendTo($(this).parent());
        console.log(dummy);
        $(dummy).wrapLines('<span><span>', '</span></span>');

        var padding = 15;

        dummy.css({
            left: -padding,
            right: -padding
        }).find(' > span').css('padding-left', padding*2);

    });
};

$(window).load(function(){
    $(window).resize(fixIt).resize(); //trigger resize event onLoad
});

Ответы [ 2 ]

1 голос
/ 06 апреля 2011

Это работает, но, возможно, его можно сделать более эффективным:

http://jsfiddle.net/thirtydot/UGBXD/3/

Вот полный код для потомков:

JS

//thanks @Peter Bailey - /1916763/kak-vydelit-stroku-teksta-kotoraya-blizhe-vsego-k-myshke#1916766
jQuery.fn.wrapLines = function(openTag, closeTag) {
    var dummy = this.clone().css({
        top: -9999,
        left: -9999,
        position: 'absolute',
        width: this.width()
    }).appendTo(this.parent()),
        text = dummy.text().match(/\S+\s+/g);

    var words = text.length,
        lastTopOffset = 0,
        lines = [],
        lineText = '';

    for (var i = 0; i < words; ++i) {
        dummy.html(
        text.slice(0, i).join('') + text[i].replace(/(\S)/, '$1<span/>') + text.slice(i + 1).join(''));

        var topOffset = jQuery('span', dummy).offset().top;

        if (topOffset !== lastTopOffset && i != 0) {
            lines.push(lineText);
            lineText = text[i];
        } else {
            lineText += text[i];
        }

        lastTopOffset = topOffset;
    }
    lines.push(lineText);

    this.html(openTag + lines.join(closeTag + openTag) + closeTag);
    dummy.remove();
};

var fixIt = function() {
    $('.dummy').remove();

    $('div.node-title-text').each(function(index) {
        //remove previous .dummy
        var dummy = $(this).clone().removeClass().addClass('dummy').appendTo($(this).parent());
        $(dummy).wrapLines('<span><span>', '</span></span>');
    });
};
$(window).resize(fixIt).resize(); //trigger resize event onLoad

CSS:

.node-title {
    position: relative;
    margin-bottom: 16px
}
.node-title-text {
    position: relative;
    z-index: 2
}
.dummy {
    position: absolute;
    top: 0; left: 0;
    z-index: 1
}
.dummy > span {
    background: url('http://i.stack.imgur.com/HPofR.png') top left no-repeat,
        url('http://i.stack.imgur.com/C8ImH.png') top right no-repeat,
        url('http://i.stack.imgur.com/9is9r.png') top center repeat-x;
}
.dummy > span > span {
    visibility: hidden
}

HTML: (такой же, как у вас)

<div class="node-title">
    <div class="node-title-text">
        <a href="#">Lorem ipsum dolor sit amet, consectetur adipiscing elit.
            Sed suscipit fermentum leo eu scelerisque.</a>
    </div>
</div>
0 голосов
/ 03 апреля 2011

Эта нестандартная функция не реализована в других браузерах.Вам нужно будет обернуть каждую строку в промежуток, а затем применить фон к этому промежутку.

Вы можете использовать javascript для сортировки промежутков, если вам нужен динамический текст, но если это возможно,жестко закодируйте его, тогда он не должен быть слишком сложным.

...