2011-08-07 11 views
17

Chcę pokazać tylko pierwszą linię bloku owiniętego tekstu, a następnie odsłonić cały blok po kliknięciu. Chciałbym też wiedzieć, jak przełączyć go z powrotem do kompaktowej wersji jednoliniowej za pomocą drugiego kliknięcia.Jak wyświetlić tylko pierwszy wiersz tekstu elementu div i rozwinąć kliknięcie?

Czy istnieje prosty sposób, aby to zrobić za pomocą css + javascript? Używam jQuery.

+1

Nie całkiem pewien, ale myślę, że 'wysokość: 1em' powinno wystarczyć do wyświetlania pierwszej linii. Do ekspansji uważam, że javascript będzie potrzebny. – Quasdunk

+1

Niezależnie od rozwiązania, zawartość powinna zostać ukryta poprzez dodanie klasy w JS ASAP po załadowaniu. Jeśli JS zostanie wyłączone, zawartość będzie nadal wyświetlana. FYI, osoby niewidome i niedowidzące korzystające z czytnika ekranu, a także użytkownicy surfujący przy wyłączonym CSS, a także roboty wyszukiwania i ich pamięć podręczna będą miały dostęp do całej zawartości bez żadnych Kliknij. Może być dobra lub zła w zależności od twoich potrzeb. – FelipeAls

Odpowiedz

14

Zakładając, że nie chcesz używać żadnej biblioteki JavaScript (która jest nieparzysta).

Patrz:http://jsfiddle.net/JUtcX/

HTML:

<div id="content"></div> 

CSS:

#content { 
    border: 1px solid red; 
    height: 1em; 
    padding: 2px; /* adjust to taste */ 
    overflow: hidden  
} 

JavaScript:

document.getElementById("content").onclick = function() { 
    this.style.height = 'auto'; 
} 

Ewentualnie, jeśli chcesz użyć ramy JavaScript, takich jak jQuery, można go ożywić.

Patrz:http://jsfiddle.net/JUtcX/2/

$('#content').click(function() { 
    var reducedHeight = $(this).height(); 
    $(this).css('height', 'auto'); 
    var fullHeight = $(this).height(); 
    $(this).height(reducedHeight); 

    $(this).animate({height: fullHeight}, 500); 
}); 
+0

Czy możesz zmienić swoją odpowiedź, aby pokazać, jak przełączać rozszerzenie z powrotem do kompaktowe wymiary na drugim kliknięciu? – dan

+0

Myślę, że wymyśliłem to – dan

+0

Czy nadal potrzebujesz pomocy? Czy używasz czystego rozwiązania JavaScript lub jQuery? – thirtydot

0
<div id='a' onclick='toggletext'>first line<br /></div> 

function toggletext(){ 
    var html= document.getElementById('a').innerHTML; 
    if(html=='first line<br />'){ 
     html = 'first line<br />next lines<br />next lines<br />'; 
    }else{ 
     html = 'first line<br />'; 
    } 
    document.getElementById('a').innerHTML = html 
} 

ten może zostać zoptymalizowana i można wykorzystać jeden z najczęstszych bibliotekami

0

można zrobić to z pewnym jQuery.

<div id="a"> 
    <span id="first">This is the first line (read more)</span> 
    <br /> 
    <span id="rest">This is the rest of the text</span> 
</div> 

skrypt

$('#rest').hide(); 

$('#first').click(function(){ 
    $('#rest').show();   
}); 

http://jsfiddle.net/jasongennaro/dC32A/

+1

Nie działa.OP powiedział, że owinął (jak w "zawijany") tekst w dziale, a nie tekst, który zawiera wyraźne rozłamy. – aroth

+0

@Delan, rozumiem, że nie lubisz jQuery? ;-) To tylko jedna opcja. Dziękuję za komentarz. –

8

to łatwo zrobić za pomocą CSS + JavaScript. Musisz tylko ustawić wysokość div na wysokość pojedynczej linii i ukryć wszystkie przepełnienia. Następnie, gdy użytkownik kliknie element div, użyj ładnego programu obsługi animacji, aby wykonać efekt ślepej próby lub inny podobny efekt, aby pokazać pełną zawartość elementu div.

Oto bardzo prosty przykład (bez animacji): http://jsfiddle.net/9Lw6T/

+0

'$ (". Expander "). Click (function() { $ (this) .toggleClass (" expander "); });' –

0

W CSS ustawić rozmiar div do wielkości linii (ważne: może być konieczne, aby korzystać z linii rozstaw atrybut do uzyskania odpowiedniego obicia na dół z drugą linią).

Nie wiem o kliknięciu, ale można użyć :hover w CSS, aby zmienić styl (zresetować odstępy między wierszami, przywrócić rozmiar div i przepełnienie do odpowiednich wartości), aby uzyskać efekt wyświetlania po najechaniu.

Lub możesz użyć JavaScript i zmienić ten CSS na kliknięcie (łatwe do zrobienia z jQuery).

0

zamieszczaniu mój komentarz jako odpowiedź:

Innym rozwiązaniem mogłoby być, definiując klasę height: 1em; overflow-y: hidden; a następnie dodawanie/usuwanie go na kliknięcie z JavaScript.

Albo można też obsługiwać go w -pseudo klasy :active owijając swoją <div> z <a> -tag, więc nie ma javascript byłaby potrzebna. Ale wtedy div znów upadłby, tracąc ostrość.

0

ta będzie wystarczająca:

Aby ukryć wszystkie oprócz pierwszej linii:

var theDiv = document.getElementById('theDiv'); 
theDiv.style.overflowY = 'hidden'; 
theDiv.style.height = '1em'; 

Aby pokazać cały tekst:

var theDiv = document.getElementById('theDiv'); 
theDiv.style.overflowY = 'visible'; 
theDiv.style.height = 'auto'; 

Lub, jeśli były w użyciu jQuery:

$('#theDiv').css({ height: '1em', overflowY: 'hidden' }); 

$('#theDiv').css({ height: 'auto', overflowY: 'visible' }); 
0

Ustawianie ukryć div do 1 em a następnie exapnd to onclick jest rozwiązaniem.

Sprawdź to. Nie korzystałem z żadnej biblioteki JS.

CSS

.expandable{ 
    height:1.2em; 
    overflow:hidden; 
} 

HTML

<div class="expandable" onclick="expand(this)">Your text here</div> 

JS

window.expand = function(el) { 
    el.style.height = "auto"; 
} 

Oto Fiddle

http://jsfiddle.net/RwM8S/1/

5

$(document).on('click', '.collapsible', function() { 
 
    $(this).toggleClass('collapsed'); 
 
});
p { 
 
    cursor: pointer; 
 
} 
 

 
.collapsed { 
 
    white-space: nowrap; 
 
    overflow: hidden; 
 
    text-overflow: ellipsis; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<p class="collapsible collapsed">I want to show just the first line of a block of wrapped text, and then reveal the whole block on click. Also, I'd like to know how to toggle it back to the compact one-line version on a second click. 
 
Is there an easy way to do this through css + javascript? I use jQuery.</p> 
 
<p class="collapsible">I want to show just the first line of a block of wrapped text, and then reveal the whole block on click. Also, I'd like to know how to toggle it back to the compact one-line version on a second click. 
 
Is there an easy way to do this through css + javascript? I use jQuery.</p> 
 
<p class="collapsible collapsed">I want to show just the first line of a block of wrapped text, and then reveal the whole block on click. Also, I'd like to know how to toggle it back to the compact one-line version on a second click. 
 
Is there an easy way to do this through css + javascript? I use jQuery.</p>

Powiązane problemy